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.