TwitterのAPIが止まってしまった
2023/05/24のお昼すぎに、自作のBOTで、
Could not authenticate you.
というメッセージが表示され、API経由でTwitterにツイートできなくなってしまいました。
昨今のTwitter有料化ですが、とうとう私も、締め出されたようです。
過去にはAPIのバージョンアップにて、過去のバージョンが使用できないといったケースにも表示されたようですが、検索すると、ああ、例の有料化で締め出されたんだろうな…と。
ということで、APIが使用できなくなったので、BOTはとりあえず一旦終了する旨、手動でツイートしました。
Mastodonにもトゥートするようにしていたので、そちらをご参照してください。Twitterの方は、改善策が見つかるまで停止いたします。場合によっては再開しないかもしれません。
すると、あるフォロワーから…
Mastodonにもトゥートするようにしていたので、そちらをご参照してください。Twitterの方は、改善策が見つかるまで停止いたします。場合によっては再開しないかもしれません。
とのレスが…
うーん…自作のBOTは、RSS出力してないんだけど…と思ったのですが、もしやと思い、IFTTTを調べみることにします。
すると…
IFTTTはプラガー(Plagger)っぽい?
私が持っていたIFTTTの勝手なイメージは、単にRSSからTwitterをPOSTする程度サービス…といった認識でしたが、サイトを訪れると、RSSからSlackに投げたりメールに飛ばしたりと、さらにRSSだけではなく、Googleのスプレッドシートだったりと、実に多彩。
でも、これってなんとなくPlaggerっぽいですね。
ja.wikipedia.org
でも、GUIベースなので、設定はかなり楽です。
RSSはブログやニュースサイトの更新情報をXMLで配信するサービスなので、TwitterのBOTとはまた違う手段なのですが、IFTTTに直接データを渡すような手段があれば、まだまだ、ゲームセットにはならなそうですね。
さらに調べてみます。
すると…
IFTTTでWebhookが使えることが分かった
直接データを渡すような手段の一つとして(APIの他に)Webhookがあるのですが、IFTTTにはWebhookがありました!
Webhookについては、下記を参照。
kintone-blog.cybozu.co.jp
IFTTTはIf(入力側)とThen(出力側)のサービスをパイプ処理のように結ぶサービスですが、WebhookにするとIf側をIFTTT自身にすることができます。
ということで、IFTTTのWebhookにJSONを渡せば、Tweetできそうですね。
FTTT+curlで、テスト実行
以下の参考サイトをもとに、curlでテストをPOSTすることができました。
zenn.dev
手順が若干異なってしまったのか、「https://maker.ifttt.com/use/~」にあるキーコードの取得はやや手間取りました。
If側の設定をWebhookに設定際に、URLが表示されなかった場合の手順は下記のとおり。
- IFTTTの右端にあるTwitterアイコン(Twitter提携している場合)から「My services」を選択
- 一覧表示される中にある「Webhooks」をクリック
- 「Webhooks integrations」画面が表示されたら、右上の「Settings」をクリック
- 「Webhooks Settings」画面にある、URLの「https://maker.ifttt.com/use/~」の~がキー
その後、Thenで、Twitterを設定し、BOTのアカウントをサービスの連携させます。
参考サイトのとおり、Post a Tweetは、{{Value1}}だけで良いと思います。
Appletsを作成したら、curlで以下を実行します。
curl -X POST -H "Content-Type: application/json" -d '{"value1":"test用のテキスト"}' https://maker.ifttt.com/trigger/(Event Name)/with/key/(Key)
※(Event Name)および(key)は実際の値に差し替えてください。
すると、以下のようなメッセージが表示され、TwitterにPOSTされていることを確認すればOKです。
Congratulations! You've fired the send_tweet event
Twitter有料化に伴い、IFTTTもPro、つまり有料でなければTweetできません。
さらに、BOT用のTwitterアカウントが複数ある場合は、Pro+になります。
ここまでできれば、BOTを出力している言語に、Twitter APIの代わりに、POSTでIFTTTのURLにアクセスするだけです。
プログラム実装について
プログラムへの実装については、続編をご参照ください。
私はRubyで実装していますが、BODYにJSONを挿入しMIMEを指定してPOSTするだけですので、そこまで難しくはないでしょう。
それでは、また。