inuinu blog(開発用)

BOT @wagagun の開発ノウハウや、IT向け?の雑記ブログです。

有料化でTwitter APIが停止したので、IFTTTを使ってみる(curl編)

このページでは、Twitter APIの有料化に伴い、Webhook経由でIFTTTより自動ツイートを行う方法を、まずはcurlを使った手法で試してみます。

TwitterAPIが止まってしまった

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で配信するサービスなので、TwitterBOTとはまた違う手段なのですが、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が表示されなかった場合の手順は下記のとおり。

  1. IFTTTの右端にあるTwitterアイコン(Twitter提携している場合)から「My services」を選択
  2. 一覧表示される中にある「Webhooks」をクリック
  3. 「Webhooks integrations」画面が表示されたら、右上の「Settings」をクリック
  4. 「Webhooks Settings」画面にある、URLの「https://maker.ifttt.com/use/~」の~がキー

Twitter複数アカウントであっても、KEYは変わりません。 (Appletの区別はEvent Nameで表現します。)

その後、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

もし、ツイートできない場合は、仮登録のままであることを確認してください。
(Congratulations!はツイートに失敗しても表示されます。)
本登録とすることでツイートできます。

Twitter有料化に伴い、IFTTTもPro、つまり有料でなければTweetできません。
さらに、BOT用のTwitterアカウントが複数ある場合は、Pro+になります。

ここまでできれば、BOTを出力している言語に、Twitter APIの代わりに、POSTでIFTTTのURLにアクセスするだけです。

プログラム実装について

プログラムへの実装については、続編をご参照ください。

IFTTTにはIFTTTなりの癖があります。
そのあたりも含め、解説しております。

inuinu-tech.hatenablog.jp

私はRubyで実装していますが、BODYにJSONを挿入しMIMEを指定してPOSTするだけですので、そこまで難しくはないでしょう。

それでは、また。