Gmail API を使って監視メールチェックを楽にしたい その3
暑い日が続いてますねぇ~、夏半ばにしてバテ気味のうえピーです。
1ヶ月半、更新サボっていたことは置いておいて、早速、本題に入りたいと思います!!
前回に続き、「Gmail API を使って監視メールチェックを楽にしたい」シリーズです。
そんな今回の詳細は「監視メールの件名リストを取得しよう」という題材で進めます。
なぜ、監視メールの件名を??というところは、色んな事情がございますので、突っ込みはなしでお願い致します。
前回までに作成したquickstart.py(詳細はその2をご覧下さい)に関数を追加して、件名のリストを標準出力してみようと思います。
早速、GmailAPIのUsers.messagesを参照して見ましょう。
うーん、messageオブジェクトには、subject的な属性はないですねぇ・・・。
多分、payloadのheadersに含まれているのかな。
というわけで、最初のプログラムではheadersの中身を出力してみましょう。
見るのは、メールの1件目でいいから、こんな感じでいいかな。
def printSubject(service, user_id, query=''): response = service.users().messages().list(userId=user_id, q=query).execute() if 'messages' in response: message = service.users().messages().get(userId=user_id, id=response['messages'][0]['id']).execute() print(message['payload']['headers'])
えぃ、実行。
おぉ、メールのヘッダーってこんなに項目あるんだっけぇー!!!
とりあえず、出力した内容を拝見しますと・・・
ふむふむ、27番目あたりに、存在を確認できますねぇ。
{ ・・・・・・ , {'name': 'Subject', 'value': 'ひ・み・つ'} ・・・・・・ }
念のため、別な監視メールのheaderはと。
げーっ、残念、27番目じゃないやん。
{ ・・・・・・ , {'name': 'Subject', 'value': 'ひ・み・つ・その2'} ・・・・・・ }
ふーん、通知元の監視アプリケーションが同じものだと、Subjectの場所は同じっぽいけど・・・、
もう1種類の監視アプリケーションと比較すると、違うのかぁ。
しょうがねぇ、headersの場所べたうちはやめてかつ、改ページも考慮して、こんな感じでどうでしょう。
def printSubject(service, user_id, query=''): response = service.users().messages().list(userId=user_id, q=query).execute() if 'messages' in response: # message = service.users().messages().get(userId=user_id, id=response['messages'][0]['id']).execute() # print(message['payload']['headers']) # print(message['payload']['headers'][26]['value']) for message_id in response['messages']: message = service.users().messages().get(userId=user_id, id=message_id['id']).execute() print([i['value'] for i in message['payload']['headers'] if (i['name'] == 'Subject')]) while 'nextPageToken' in response: page_token = response['nextPageToken'] response = service.users().messages().list(userId=user_id, q=query, pageToken=page_token).execute() for message_id in response['messages']: message = service.users().messages().get(userId=user_id, id=message_id['id']).execute() print([i['value'] for i in message['payload']['headers'] if (i['name'] == 'Subject')])
おっけーぃ、出た出た件名。バッチグー!!!
それでは、雪見だいふく買いに行ってきまーす。See, You.