[Python]Gmal api 文字化け・エンコードの謎と解決方法

Gmail api encode

GmailをAPI経由で読み込もうと思ったら思いの外ハマってしまったのでメモ。

なんかパターンがあるみたいでまだよく分かっていないのでこれで必ずしも解決するとは限りませんが、参考になれば幸いです。

まず、GmailをAPI経由で取得します。この時にformatが”full’と’raw’の2種類があります。

full と raw で入っている文字の形式が違うようです。

今回はfullを利用します。

[code]
message = self.service.users().messages().get(userId=user, id=i,format='full').execute()
[/code] [‘payload’][‘body’][‘data’] の中にメールの本文が入っているので取り出します。

[code]
message = message['payload']['body']['data']
[/code]

取り出した文字をエンコードします。このたった3行の組み合わせを発見するのに2日かかりました(;´Д`)

[code]
import email,base64
message = base64.urlsafe_b64decode(text)
message = str(message, 'utf-8')
message = email.message_from_string(message)
[/code]

昨日は不思議なことにこちらのコードでうまくいきました。

[code]
import quopri,email,base64
message = base64.urlsafe_b64decode(text)
message = quopri.decodestring(message).decode('utf8')
message = email.message_from_string(message)
[/code]

文字コード周りのこと詳しくないのでこういうのは本当につまづきます…

こんなことをいちいち意識しなくても利用できるようにAPIとかパケージを公開して欲しいです。

Googleのドキュメント通りにやると全然動かなかったので、そのへんもう少し親切な作りにして欲しいな(;´∀`)と思いました。

もう少しいろいろ触って問題なさそうならGithubにアップロードするのでGmailをAPIで利用するのに困っている人は使ってみてください。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください