前提・実現したいこと
spyderでwindows上にPython環境を作り、Seleniumで
下記のようなスクレイピングのソースコードがあります。
下記コードはGmail APIを使っていて、
10秒毎にGmailアカウントを閲覧し、メールの件名に、
60秒以内に指定した文字列のメール受信があった場合は、
プログラムを起動させるものです。
今回はメールの件名ではなくて、メール本文に「ABCD」という文字列が
”含まれていた場合”は(※完全一致ではない)
trueとなり、システムが動くようにしたいのですが、記述がわかりません。
※コードは他人に用意してもらったもので、当方はPythonに関する知識がなく、困っています。
※下記コードで件名にはしっかり反応しています。
該当のソースコード
# -*- coding: utf-8 -*- #!/usr/bin/python import time from datetime import datetime from datetime import date from httplib2 import Http from googleapiclient import sample_tools from apiclient import discovery from apiclient.discovery import build from oauth2client import client from oauth2client import tools from oauth2client import file from oauth2client.file import Storage from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select import dateutil.parser as parser SCOPES = 'https://www.googleapis.com/auth/gmail.readonly' store = file.Storage('C:\Users\masa\Documents\credentials-gmail.json') creds = store.get() if not creds or creds.invalid: flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) creds = tools.run_flow(flow, store) service = build('gmail', 'v1', http=creds.authorize(Http())) def fetch_inbox(): output=[] results = service.users().messages().list(userId='me', labelIds='INBOX', maxResults=10).execute() for msg in results['messages']: topid = msg['id'] msg = service.users().messages().get(userId='me', id=topid).execute() payld = msg['payload'] headr = payld['headers'] for k in headr: if k['name']=='Date': temp_date=(parser.parse(k['value'])).strftime("%Y/%m/%d %H:%M:%S") for j in headr: if j['name']=='From': temp_from=j['value'] for i in headr: if i['name']=='Subject': temp_subject=i['value'] output.append((temp_date, temp_from, temp_subject, msg['snippet'])) # print(msg['snippet']) return(output) print(datetime.today().strftime("%Y/%m/%d %H:%M:%S"),"システムを起動しました") judge=False while judge==False: info=fetch_inbox() for i in range(len(info)): dt1=datetime.today() dt2=datetime.strptime(info[i][0],"%Y/%m/%d %H:%M:%S") delta=dt1-dt2 if info[i][2]=='ABCD' and delta.total_seconds()<60: print(datetime.today().strftime("%Y/%m/%d %H:%M:%S"),"ただ今、指定した文字列が件名にあるメールを受信しました") judge=True if judge==False: print(datetime.today().strftime("%Y/%m/%d %H:%M:%S"),"waiting...") time.sleep(10) if judge==True: print(datetime.today().strftime("%Y/%m/%d %H:%M:%S"),"これよりシステムを実行します") # 以下システムコード~
試したこと
output.append((temp_date, temp_from, temp_subject, msg['snippet'], payld['body']))
if 'ABCD' in info[i][4] and delta.total_seconds()<60:
上記の部分を修正してみましたが、
テストメールを送ってみてても、うまくシステムが実行されません。
※エラーなどはでておらず、コンソールにwaiting...が続いているだけです。
メール”本文”に「ABCD」という文字列が
”含まれていた場合”は(※完全一致ではない)
trueとなり、システムが動くようにしたいのです。
どうぞよろしくお願い致します。
あなたの回答
tips
プレビュー