ぽぽろん研究所のサムシング

twitter:@poporon_labもよろしく

Google Apps ScriptでTwitterのwebhookを使おうと思った【2022/03/20】

こんにちは、ぽぽろん研究所です。ガンオンのサ終まであと10日となり、どこか寂しいような必然のような、、、、よくわからないですね。

今回はなんとなくTwitterAPIを使って通知を受けて何かできないかという開拓です。今回はその通知を受ける部分にGoogle Apps Script(GAS)を使って見ようとした話です。

ここではTwitterAPIの使い方の詳細については飛ばします。これを書いている現状も何か作り上げたわけではないですし。それどころかwebhookをまだテストできていないという状態なので、あくまで現状レポートです。

Twitterのwebhook関係のAPIAccount Activity APIに相当するようで、リアルタイムアクティビティをサブスクライブできるとかなんとか。まだ、使う段階に行っていないので、どういったことができるのかはテストできていないので詳しくは知らないです。おそらく、通知の類を受けられるのかと思っています。

この機能を使うためにはwebhookのオーナーとアプリが自分であることを確認する必要があるのです。これをChallenge-Response Checks(CRC)というそうです。このCRCは送られてきたcrc_tokenとConsumer Secretを合わせて暗号化してjson形式で送る必要があるそうです。

ここで問題となるのがjson形式で送ることです。GASではContentServiceクラスを使うことで、json形式やテキストなどのデータを生で送ることができるそうです。「これを使えば簡単にできそうじゃん」そう思っていた時期もありました。問題はこれです。 f:id:poporon_lab:20220320120204p:plain はい、よくわからないイギリス語ですね。簡単に言うと「セキュリティーのために、データは直接送らずに一度きりのURLを生成してリダイレクトするようにしてます」と書いているのです。要はワンタイムURLで安全ってことですね。

developers.google.com

このリダイレクトが曲者で、こいつのせいでGASでCRCを行おうとすると、HTTPステータスコードが200にならないのです。リダイレクトをするとHTTPステータスコードが301となり、Twitter側が「ステータスコードが200じゃない!!」と怒り出すのです。そのため、GASではCRCを突破することが難しそうという事になりました。

今回はGASでTwitterのwebhookを使ってみようとした結果CRCを乗り越えられずに撤退した話でした。一応別の方法で模索中なので、その話はまた今度。

それでは、また次回。今回のできないは次回のできたになる!