IFTTTを用いてRSSフィードをmastodonに投稿しよう

mastodon
この記事は約4分で読めます。

自鯖を立ち上げた直後から自分用に作ったnetkeiba botが今やフォロワー150人弱もいて驚いています。

mastodonにおけるbotというのは多数存在しますが、IFTTTを使ったやり方が一番簡単でしょう。

IFTTTとはIFThenを設定すれば自動実行処理が行えるというものです。今回は「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が文字列として判断されちゃうって訳です。

イクイノックスが2年連続の年度代表馬に! 2023年度のJRA賞12部門の受賞馬決定 | 競馬ニュース - netkeiba
JRAは9日、「『2023年度JRA賞』受賞馬選考委員会」を開催し、記者投票の結果に基づき、年度代表馬・競走馬各部門の受賞馬が決定したことを発表した。 受賞馬は下記のとおり。騎手はJRA掲載の受賞騎… No.1競馬情報サイト「netkeib...

そこで取った方法がBearer認証という方法でして、この場合トークンはHTTPヘッダーに含まれ、Authorizationヘッダーの値として渡されます。このとき、URLに含まれる特殊文字や記号が、正しくエンコードされているため、問題なく送信されます。

一方で他の認証方法を使用する場合、例えばURLパラメーターとしてトークンを渡す場合などURLに直接含まれると、特殊文字や記号が正しく処理されない可能性があります。これはURLエンコーディングが適用されていないか、正しく行われていないから発生する問題です。なので、RSSのURLで記号などが入っている場合はBearer認証で設定することを推奨します。

あとはこれでIFTTTを動かしてRSSが更新された時にmastodon側でも投稿されているかチェックして完了です。

RSS側が更新されているのにIFTTT側が動かない時は「View Activity」からエラーを確認することができます、よくある原因としてはトークンが間違ってる、「Body」や「Additional Headers」の書式が間違っているなどが挙げられますので、よく確認しましょう。

コメント

タイトルとURLをコピーしました