【发布时间】:2021-04-08 09:52:02
【问题描述】:
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import base64
import time
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/gmail.modify']
def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
creds = None
# The file token.pickle stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
service = build('gmail', 'v1', credentials=creds)
# Call the Gmail API
repeat = 0
while repeat <= 10:
labelName = "READ-BY-SCRIPT"
LABEL_ID = 'Label_8507504117657095973'
results = service.users().messages().list(
userId='me', q="-label:"+labelName, maxResults=1).execute()
messages = results.get('messages', [])
body = []
if not messages:
repeat += 10
time.sleep(60)
else:
for message in messages:
msg = service.users().messages().get(
userId='me', id=message['id']).execute()
labels = msg['labelIds']
if "INBOX" in labels:
body.append(msg['payload']['parts'])
body = base64.urlsafe_b64decode(
body[0][0]['body']['data'])
body = str(body)
if 'b"\\r\\nHi MOHAMMAD,\\r\\n' or "b'\\r\\nHi MOHAMMAD,\\r\\n" in body:
if 'posted a new assignment in IX K \\r\\n<https://classroom.google.com/c/MTEyNDMxODgyMTE0>.' in body:
body = body.replace(
"\\r\\nIf you don\\'t want to receive emails from Classroom, you can unsubscribe \\r\\n<https://classroom.google.com/s>.\\r\\n\\r\\nGoogle LLC\\r\\n1600 Amphitheatre Pkwy\\r\\nMountain View, CA 94043 USA\\r\\n'", "")
body = body.replace("b\"", "").replace("b'", "").replace('"', '').replace(" ", ' ').replace(
" ", ' ').replace(" \\n<https://classroom.google.com/c/MTEyNDMxODgyMTE0>", "").replace("\\n", "\\n\\n")
body = body.replace("\\r\\n\\nHi MOHAMMAD,\\r\\n\\n", "").replace(" \\r\\n\\n<https://classroom.google.com/c/MTEyNDMxODgyMTE0>.\\r\\n", "").replace(
"\\r\\n\\nIf you don't want to receive emails from Classroom, you can unsubscribe \\r\\n\\n<https://classroom.google.com/s>.\\r\\n\\n\\r\\n\\nGoogle LLC\\r\\n\\n1600 Amphitheatre Pkwy\\r\\n\\nMountain View, CA 94043 USA\\r\\n\\n", "")
body = body.replace("\\r", "\r").replace(
"\\n", "\n").replace("\n\n", "\n").replace("\\\\", "\\")
body = body.replace("\\xe2", "").replace(
"\\x80", "").replace("\\x99", "").replace("\\x98", "")
body = body.replace(
"\\r\\nIf you don\\'t want to receive emails from Classroom, you can unsubscribe \\r\\n<https://classroom.google.com/s>.\\r\\n\\r\\nGoogle LLC\\r\\n1600 Amphitheatre Pkwy\\r\\nMountain View, CA 94043 USA\\r\\n'", "")
body = body.replace("\\'", "")
body = body.replace(
"\\r\\nIf you don\\'t want to receive emails from Classroom, you can unsubscribe", "")
body = body.replace(
"If you dont want to receive emails from Classroom, you can unsubscribe\n <https://classroom.google.com/s>.\nGoogle LLC\n1600 Amphitheatre Pkwy\nMountain View, CA 94043 USA\n", "")
TEACHER_NAME = body.split("posted", 1)[0]
body = body.replace(TEACHER_NAME, "")
LINK = str(body.split("\r\nOPEN \r\n<", 1)[1])
LINK = LINK[:-1]
body = body.replace(LINK, "").replace("<", "").replace(">", "").replace(
'posted a new assignment in IX K\n\r\n', "").replace("\r\nOPEN \r\n", "")
if 'Due: ' in body:
body = body.replace("\n", " ", 1)
DATE = body.split(' ')[0]
body = body.split(' ')[1]
else:
body = body
DATE = 'No Due Date Provided'
service.users().messages().modify(userId='me', id=message['id'], body={
'addLabelIds': ['Label_8507504117657095973']}).execute()
repeat += 1
else:
service.users().messages().modify(userId='me', id=message['id'], body={
'addLabelIds': [LABEL_ID]}).execute()
pass
else:
service.users().messages().modify(userId='me', id=message['id'], body={
'addLabelIds': [LABEL_ID]}).execute()
pass
else:
service.users().messages().modify(userId='me', id=message['id'], body={
'addLabelIds': ['Label_8507504117657095973']}).execute()
pass
if __name__ == '__main__':
main()
此脚本从 gmail 获取最新的未读电子邮件。如果没有新电子邮件,它会立即结束脚本。如果有一封不是来自谷歌课堂的电子邮件,它将将该电子邮件标记为已读,然后再次重复该过程,直到没有新的未读电子邮件或找到来自谷歌课堂的电子邮件。如果有来自 google 课堂的新电子邮件,它会获取教师姓名 [TEACHER_NAME]、作业链接 [LINK]、截止日期 [DATE] 和作业详细信息 [正文],然后结束脚本
我想制作一个不同的 python 文件 (bot.py),它运行另一个包含上述脚本的 python 文件 (gmail.py) 10 次。每次运行 gmail.py 时,如果这些变量由 gmail.py 定义,bot.py 通过 discord.py 在不同的消息中发送这些变量中的每一个,如果它们不是由 gmail.py 定义的,则不执行任何操作。 bot.py 然后等待 1 分钟,然后再次重复整个过程。如何才能做到这一点?我应该从哪里开始?
【问题讨论】:
标签: python-3.x discord discord.py gmail-api discord.py-rewrite