IFTTTを用いてRSSフィードをmastodonに投稿しよう
自鯖を立ち上げた直後から自分用に作ったnetkeiba botが今やフォロワー150人弱もいて驚いています。
mastodonにおけるbotというのは多数存在しますが、IFTTTを使ったやり方が一番簡単でしょう。
IFTTTとはIFとThenを設定すれば自動実行処理が行えるというものです。今回は「Twitterの投稿をmastodonに投稿させる」というのは結構文献を見かけるので、「RSSからmastodonに投稿する」パターンをご紹介します。
IF THIS
今回はnetkeibaのRSSを使用しましょう。RSSを配信しているサイトならどこでもOK。例えば私のnetkeiba botは「新着ニュースパック」のRSSを使用しています。
IFTTT側は右上の「Create」をクリックし、「If This」から「RSS Feed」を選択してください。
RSS Feedの「New feed item」をクリックするとFeed URLを入力を求められます。Feed URLはRSSのリンクです。例えばnetkeibaの新着ニュースRSSを取得対象とする場合はこちらのURLを入力し、以下のようになります。
これにてIF THISの方は完了です。「Create trigger」をクリックし、終わらせましょう。
Then That
IFTTT側の設定に入る前に、まずbot用のアカウントをmastodon上で作っておきましょう。アカウント作成自体は何ら特別なことはしません。一般ユーザーを作成してください。
アカウントを作成できたら、bot用に権限を与えます。「アカウント設定→開発→新規アプリ」をクリックしてください。
アプリの名前は任意の名前を入れてください。
権限はデフォルトで「read」「write」「follow」がありますが、これらに加えて「write:media」と「write:statuses」にチェックを入れて権限を追加します。(最小権限の法則的にはfollowとかはいらない気がする)
その後、アプリ名をクリックした時に表示されるアクセストークンをIFTTT側で使用するので覚えておいてください。メモとか残るものはあまりしない方がいいです。(流出したらまずいので)
IFTTT側はIF THISと同様にアプリケーションを選びたいのですが、残念ながらIFTTTには「mastodon」という選択肢はありません。mastodonとIFTTTを繋げるにはwebhooksを使用します。
webhooksをクリックし、「Make a web request」をクリックしてください。ここからが細かいです。
設定値は以下のようにしてください。Bodyの部分はお好きにどうぞ。netkeiba botが現在設定している設定値をsampleで記載しておきます。
URL:https://yourdomain.com/api/v1/statuses Method: POST Content Type: application/json Additional Headers: Authorization: Bearer [アクセストークン] Body(sample): { "status": " {{EntryTitle}} \n {{EntryUrl}}" }
補足として、Bodyは\nで改行できます。あとはAdd ingredientの部分から投稿したい項目を選んでください。URLのyourdomain.comはご自身のbotアカウントがあるmastodonサーバーのURLに差し替えてください。
実はここのやり方は複数あって、最初はBodyにアクセストークンを記載するやり方を試みました。ただ、netkiebaのURLの一部に「?」があってそれが原因でURLが途切れて「?」以降が文字になるという問題が起きました。例えば以下の記事の場合、pid=news_view&no=253189
が文字列として判断されちゃうって訳です。
https://news.netkeiba.com/?pid=news_view&no=253189
そこで取った方法がBearer認証という方法でして、この場合トークンはHTTPヘッダーに含まれ、Authorizationヘッダーの値として渡されます。このとき、URLに含まれる特殊文字や記号が、正しくエンコードされているため、問題なく送信されます。
一方で他の認証方法を使用する場合、例えばURLパラメーターとしてトークンを渡す場合などURLに直接含まれると、特殊文字や記号が正しく処理されない可能性があります。これはURLエンコーディングが適用されていないか、正しく行われていないから発生する問題です。なので、RSSのURLで記号などが入っている場合はBearer認証で設定することを推奨します。
あとはこれでIFTTTを動かしてRSSが更新された時にmastodon側でも投稿されているかチェックして完了です。
RSS側が更新されているのにIFTTT側が動かない時は「View Activity」からエラーを確認することができます、よくある原因としてはトークンが間違ってる、「Body」や「Additional Headers」の書式が間違っているなどが挙げられますので、よく確認しましょう。