概要
AWS Chalice を触って、API を立てるのをやってみました。
Discord の Webhook に投げるための中継点として使得ないかなと思い、試しています。
やったこと
- 【お手軽ハンズオンで AWS を学ぶ】サーバーレスな RESTful API を構築しよう! Chaliceで実現する Python アプリ開発 | AWS Startup ブログ をやった
- IFTTT から AWS に建てた API に対して POST した
- AWS の API から Discord の Webhook に POST した
要はこう
できたもの
これをしていた pic.twitter.com/2nWU7b1DOc
— yumechi (@__yumechi) 2020年6月21日
コード
真面目?に書いた部分だけ
@app.route('/test', methods=['POST'], name='TweetTest') def send_tweet_test(): import urllib.request import json json_body = app.current_request.json_body app.log.info("received: %s" % json_body) webhook_url = os.environ.get('WEBHOOK_URL') method = "POST" headers = { "Content-Type" : "application/json", # User-Agent 指定なしだと怒られるため "User-Agent": "Yumechi WebHook/1.0", } # TODO: コンテンツはこの辺を見て増やしたい # https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html values = {'content' : str(json_body)} # 典型的なリクエスト処理 # refer: https://qiita.com/neko_the_shadow/items/324976c7b54623e82b26 # refer: https://qiita.com/hoto17296/items/8fcf55cc6cd823a18217 json_data = json.dumps(values).encode("utf-8") request = urllib.request.Request(webhook_url, data=json_data, headers=headers) with urllib.request.urlopen(request) as response: response_body = response.read().decode("utf-8") return { 'status': 'ok', 'res': response.read().decode("utf-8"), }
学び
- めっちゃ簡単に API 立つ
- Serverless Framework より楽かも
- AWS 謹製なので完全に相性が考慮されてるんだろうなぁ
chalice local
が超便利chalice deploy
が便利- この記事とかわかりやすいかも
- 【AWS Lambda】Python製フレームワークChaliceでサーバーレスアプリをつくる
- ログも設定ができる
- IFTTT の Twitter 連携が下記の形でないとうまくいかなかった
- 置換が string なら string というわけではなく、確実に ダブルクォーテーションで囲う必要がある
- エスケープは不要ということだったが、将来的にはまるパターンを考えると先にやっておいて損はなさそう
{ "text": "<<< {{Text}} >>>", "user_name": "<<< {{UserName}} >>>", "link_to_tweet": "<<< {{LinkToTweet}} >>>", "created_at": "<<< {{CreatedAt}} >>>", "tweet_embed_code": "<<< {{TweetEmbedCode}} >>>" }
展望
- Discord の WebHook は下記を見てもう少し充実させたい気持ち
- Discord Webhook · Discord Webhooks Guide
- このドキュメントはめちゃくちゃまとまっていてよい
- 脱線するが、ニコニコ動画のAPIを見つけた
- とりあえずぱっと見つけたのは下記
- 最新に追従しているドキュメントの正確な情報源が探しずらい。どう探せばよいのやら。
- 何かの遊びに使えたらいいなと思う
- 公式ドキュメントももう少し読みたい
まとめ
Serverless Framework やってたおかげか、すっと頭の中に入ってきて、しかもわかりやすいなと思いました。
Python でやるならこれで十分かもという感じ。
ほかの言語でやりたい場合は Serverless Framework のほうが良いかもしれないですね。
自分はパッとかけるのは Python なので、パッと書かなきゃならないときは活用していきたいです。