【python】GmailからFromとタイトルを引っこ抜く
■きっかけ
GoogleAPIを使ってGmailデータを取得してみましたが、思った以上にごちゃごちゃしていて戸惑ったので書き残します。
■前提
GoogleのAPI設定を設定を済ませており、JSONファイルを用意している
GoogleAPIを利用したgmailの受信はよくわからないができている
参考:https://yukituna.com/1284/
■ポイント
1.取得したメール情報にフィルタをかける
2.欲しい情報だけを抽出する
■取得したメール情報にフィルタをかける
# 通信準備--------------------------------------------------------
# ユーザーの認証データの読み取り
store = Storage('credentials-gmail.json')
credentials = store.get()
# ユーザーが認証済みか?
if not credentials or credentials.invalid:
# 新規で認証する
flow = client.flow_from_clientsecrets("C:/Users/tokyo/Desktop/credentials_getmail.json", 'https://www.googleapis.com/auth/gmail.readonly')
flow.user_agent = 'Python Gmail API'
credentials = tools.run_flow(flow, store, None)
# ユーザー認証の取得
http = credentials.authorize(httplib2.Http())
# GmailのAPIを利用する
service = discovery.build('gmail', 'v1', http=http)
# ここから!--------------------------------------------------------
# メッセージの一覧を取得
messages = service.users().messages()
# 1時間前から検索
t = int(time.time()) - 3600
filter_t = 'after:' + repr(t)
msg_list = messages.list(userId='me', q=filter_t).execute()
ポイントは「msg_list = messages.list(userId='me', q=filter_t).execute()」の一文です。
listの引数である「q」にはgmailの検索条件が入ります。
下記のサンプルはのようにGmailで検索するのと同じイメージです。
今回は現在時刻より1時間の間で受信しているメールを対象にしています。
■欲しい情報だけを抽出する
# 取得したメッセージの一覧を表示
for msg in msg_list['messages']:
topid = msg['id']
msg = messages.get(userId='me', id=topid).execute()
title = ""
address = ""
for i in msg['payload']['headers']:
try:
# 送り主
if (i['name'] == 'From'):
address = i['value'].replace("<","").replace(">","")
# タイトル
if (i['name'] == 'Subject'):
title = i['value']
except:
print("pass")
今回はFromとメールタイトルだけ取得しています。
msg['payload']['headers']をぐるぐる回していれば、そのうちFromとかSubjectにいきつくので、その時の値を取得してください。
メール情報はここでだいたい取れます。
おかけで取得したアドレスやメールタイトルに合わせてスクリプトを実行することができるようになりました。
なんでも自動化していきたいです。