-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gmail の内容を Slack 通知したい #10
Comments
参考になりそうなリンクGCP Cloud functions
Gmail の API |
💭 quickstart.py は Gmail の label 一覧を表示するやつっぽい |
初回起動の際に認証を求められた |
cloud functions に乗っけるスクリプトには CLI モードを有効にしてローカルでデバッグ、行けそうなら cloud functions へデプロイという感じでいいだろうか。 |
Gmail の API にどうアクセスしていくかのイメージが Quickstart だけだと掴めなかったけどここの記事のコードでちょっとイメージできたかも。 |
例えば特定の人とのやり取りと取りたい時 query = '(from OR to OR cc):u****@*******.co.jp'
results = service.users()\
.messages()\
.list(userId='me', q=query)\
.execute()
print(results) 結果 (雰囲気) {
'messages': [{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'},
{'id': '16*********', 'threadId': '16************'}],
'resultSizeEstimate': 23
} ここまでだと、あくまで個別にアクセスするための ID 情報だけが取れるっぽい |
特定のメッセージのとり方 |
message.get したときのレスポンス |
snippet だとメッセージ本文全体が取れないんだよなー |
payload.body, base64url って形式で encode されてるみたい https://developers.google.com/gmail/api/v1/reference/users/messages/attachments#resource
|
なんか文字コード壊れてる... ? なんか上手く decode できない 😭
ちなみに `.decode('utf-8', 'ignore') してみるも、ほとんどがぐっちゃぐちゃで読めたものではない... |
base64url が曲者だったっぽい。 body_data に payload.body.data が入ってる前提 before try:
body_64decoded = base64.b64decode(body_data)
print(f'payload.body.data(64decoded): {body_64decoded}')
except:
print(f'payload.body.data(64decoded): (passed)')
try:
body_decoded = bytes(body_64decoded).decode()
print(f'payload.body.data(decoded): {body_decoded}')
except:
print(f'payload.body.data(decoded): (passed)') after try:
body_64decoded = base64.b64decode(base64urldecode(body_data))
print(f'payload.body.data(64decoded): {body_64decoded}')
except:
print(f'payload.body.data(64decoded): (passed)')
try:
body_decoded = bytes(body_64decoded).decode()
print(f'payload.body.data(decoded): {body_decoded}')
except:
print(f'payload.body.data(decoded): (passed)') |
公式ライブラリでこのへんやってくれるのがあるらしいので調べて差し替える |
@HayaoSuzuki が教えてくれた thx!! https://docs.python.org/ja/3/library/base64.html#base64.urlsafe_b64decode ref. https://twitter.com/CardinalXaro/status/1132213056098820101 |
Webhook が最近新しいものが出てきている。 これが結構ややこしい。形式は以下のツールで色々手探りしてる TIL/gmail_tool/modules/fetch.py Lines 35 to 57 in 0cd7906
|
(第99回)Python mini Hack-a-thon - connpass
いろいろ調べながら試行錯誤することになりそうなので Issue にしとく
とりあえず以下のことやりたい
The text was updated successfully, but these errors were encountered: