IFTTTを使ってWordpressのRSS feedをMastodonへPOSTすることがようやくできるようになったので、備忘録として記述する。
自分が管理運営している「コンサデコンサ」の投稿記事のRSSを参照し、Mastodonへお知らせを(IFTTTにより)自動でPOSTしたい。昔チャレンジした際はどうしてもうまくいかず、あきらめていた。最近になって対話型AIの回答ではできることになっていたので、あーでもない、こーでもないとかなり苦労しながらもなんとかうまくいった。
なお、一連の作業は、有料の「Pro」アカウントでないとできない。
以下の2ステップを踏む。
- Mastodon側でアクセストークンを生成
- IFTTT側でアプレットを作成
【Mastodon側の処理】
・「ユーザー設定」から入り、さらに「開発」に入る。

・アプリの名前:好きな名前を入れる(必須)。とりあえず「IFTTT POST」と入れた。

・アプリのウェブサイト:任意のURLを入れる(空欄でもいい)。とりあえず、Feedを参照する自分のホームページのURLを入れた。
・リダイレクトURI:すでに何かが記載されている(いじらない)
・アクセス権:「write:statuses」だけをチェック。その他のチェックは全てはずす。POST以外のことをするのであれば、その部分の機能をチェックする必要あり。今回は、RSS側からMastodonへPOSTするのが目的なので、「write:statuses」の部分だけをチェック。

・「送信」を押す。
・「クライアントキー」、「クライアントシークレット」、「アクセストークン」の3つが新しく作成される。これらはセキュリティ項目なので、他人には見せない。

・「アクセストークン」を、このあとのIFTTT側で使うことになる。
【IFTTT側】
・アプレットを新規作成「Create」する。

・「If This」を「Add」する。「RSS Feed」を選ぶ。

・「New Feed item」を選ぶ。

・「Feed URL」に、参照するサイトのRSS feedのURLを入力して、「Create trigger」を押す。

・「Then That」を「Add」する。「Webhooks」を選ぶ。


・「Make a web request」を選ぶ。

・それぞれの入力欄に、必要項目を入力する。

・URL:Mastodonサーバー側の窓口になるURLを入力。自分は、「mstdn.jp」のユーザなので、「https://mstdn.jp/api/v1/statuses」と入力。
・Method:「POST」を選択。
・Content Type:「application/x-www-form-urlencoded」を選択。
・Additional Headers:必要項目を入力。
「Authorization」に、先に作成したMastodonのアクセストークン値を入力する。アクセストークン値は他人には見せないこと。「Bearer」の前後には半角スペースは必要。こんな感じ「Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXX」。「XXXXXXXXXXXXXXXXXXXXXXX」にアクセストークン値。
IFTTTからMastodonに投稿するには、「Authorization」に加え、なぜなのか「User-Agent」の情報が必要。これがないと、「Timeout」エラーがでてPOSTしてくれない。「User-Agent」の内容はなんでもよく、今回は「User-Agent:RSStoMstdn/1.0」と入力した。「User-Agent」がないとなぜだめなかは不明だが、とりあえずこれでうまく行った。
・Body:POSTしたい内容を入力。
自分は、「status=記事を更新しました→<<<{{EntryTitle}}>>> {{EntryUrl}} #consadole #コンサドーレ&visibility=unlisted」と入力。
「POST」の本体部分は、「status=記事を更新しました→<<<{{EntryTitle}}>>> {{EntryUrl}} 」。「#consadole #コンサドーレ」の部分はハッシュタグ。「&visibility=unlisted」の部分は、POSTにunlistedの限定を付加。指定しないとPublicになり、関係ない人のタイムラインにまで表示されるので、フォローしている人だけに表示されるunlistedしている。「&visibility=unlisted」の部分は、なくてもいいかも。Botと間違われてBANされるのも嫌なので、入れてみた。
visibilityには、MastodonのPOSTに対する制限の種類が入る。以下の4種類。
- public(公開):「ローカル」タイムラインと「連合」タイムラインにすべてに公開される。
- unlisted(未収録):「ローカル」と「連合」のタイムラインには公開されず。「ハッシュタグ」と「フォローワー」のタイムラインにのみ表示。
- Private(非公開):「フォロワー」のタイムラインにのみ表示。
- Direct(ダイレクト):「自分」のホームタイムラインと「送信先」の通知カラムにのみ表示。
Bodyのstatus=の内容に特殊文字が含まれていると、うまく投稿できない。自分が経験した例では、POST分が途中で切れてしまい、特殊文字以降の文章が表示されなかった。これを避けるには、IFTTT側で特殊文字の処理をしてもらうために、三重カギ括弧「<<<POSTしたい文章>>>」で囲むとよい。上の例では、投稿記事のタイトル「{{EntryTitle}}」を三重カギ括弧で囲み、特殊文字が含まれていても、POSTできるようにしている。
・全部入力したら「Create action」を押す。

・これで完了。Wordpress側で記事が投稿されれば、Webhooksにより、MastodonにPOSTされる。
こんな感じ

昔は、こうしたノウハウは、誰かのサイトの解説記事とかがないと同仕様もなかったが、対話型AIでも回答してくれる時代になった。対話型AIは本当にすごい。例えば「IFTTTからMastodonにPOSTする方法と設定項目を教えて」なんて感じでGoogleのGemini聞くと回答してくれる。