Pleroma の投稿を Twitter に転送する

ブログを更新したら URL を Yourls で短縮した上でツイートする仕組みを Pipedream で作ったと書いた。

Connect APIs, Remarkably Fast - Pipedream
https://pipedream.com/

Pipedream は RSS のチェックおよびタスク実行が1日 333 回を超えない範囲であれば無料で使える。その回数は RSS のチェックごとに1回ずつカウントされ、新着があった際にはさらにツイートの実行で1回カウントされる。無料枠に収まるように RSS の更新間隔を考えなければいけない(間隔は自分で設定できる)。僕は複数のブログでこの処理を行っているので、20 分間隔でチェックをしていた。ブログは日に1本更新するのが普通なので、投稿からツイートまで最大 20 分のタイムラグがあっても十分だ。

新着 RSS をトリガーとしてワークフローを実行することができる数少ないウェブサービスが Pipedream なので、こういうややこしいことをしている。

さて、最近 Pleroma を立てて本格運用するようにした。

利用者として Pleroma を使っていく上で問題となるのが、Twitter との使い分けだ。まだまだ日本では Twitter を使い続けている人は多いので、完全に Pleroma に移行してしまったら Twitter 上の関係性が切れてしまう。

僕はその解決策として、Pleroma と Twitter の両方に投稿することにした。そうすれば他の人から見れば僕は Twitter をこれまで通り使っているように見えるだろうし、必要ならば Twitter 上で交流をすればいい。ただしいちいち手動で両方に投稿していられないから、自動転送の方法を考えなければいけない。

この方法も需要がありそうなのにウェブでは情報がほとんどないのだ。

ワークフロー自動化ツールとして有名な IFTTT は Mastodon の投稿を Twitter に転送するワークフローが用意されていて、それは Pleroma でも動いた。ただ IFTTT の無料プランでは1日 25 ツイートまでしか実行できない。僕はバリバリ SNS に投稿することは少ないのでそれで問題ないんだけど、日によっては投稿が多いこともあるし、制限を気にしながら投稿するのは嫌だ。

IFTTT - Connect Your Apps
https://ifttt.com/

Pleroma は投稿を RSS フィードで吐き出すことができるので、IFTTT 以外のワークフロー自動化ツールで自動ツイートを実行できる。IFTTT は1日 25 ツイートまでなので、残るところは Pipedream となる。

実際に Pleroma の RSS フィードを使った自動ツイートを Pipedream で実現できたが、結構苦労した。

Pipedream 単体では投稿文が途中で切れてしまう。Twitter の文字数制限よりかなり少ない段階で切れる。IFTTT ではそういうことはないのに。

最初は、Pipedream がダメなら自分で RSS の新着をチェックする仕組みを作ろうかと考えた。Pleroma の RSS フィードを FileMaker Server で自動取得して新着投稿をスクリプトで判定して・・・といったことをやろうとしたが、もっとシンプルに実現できると分かった。それは以前紹介した n8n を使う方法だ。

n8n.io - a powerful workflow automation tool
https://n8n.io/

以下の2つのページがずばり参考になりそうだったが、なぜかコードをそのまま使っても動かない。Function の部分で「変数が存在しない」とエラーが表示されて止まってしまう。

Mastodonの投稿をTwitterへ転送する - Juggler.jp Lemmyサービス
https://lemmy.juggler.jp/post/1177

Zapierとn8nでの自動化を比較してみた 新着RSSフィードをSlackへ - Qiita
https://qiita.com/shikumiya_hata/items/a68e8cbfba4a9f13e8b6

しかし n8n のコミュニティーで公開されている以下のワークフローを改造して使うことで、やりたいことが実行できるようになった。

Get only new RSS with photo | n8n workflow template
https://n8n.io/workflows/1309-get-only-new-rss-with-photo/

具体的には、n8n で Pleroma の RSS フィードを取得し、新着投稿を抽出して Pipedream に渡すのだ。最終的に Pipedream に渡すのは Pipedream は Twitter API を使わずにツイートできるから(僕は Twitter API の申請が通っていない)。

n8n から Pipedream へは HTTP リクエストで渡す。それがトリガーとなって Pipedream はツイートをする。これまでの Pipedream で RSS をチェックする方法だと、チェックごとに Innovation がカウントされていた(Pipedream は実行回数を Innovation と呼んでカウントしている)。それが HTTP リクエストをトリガーとすると、Pleroma の投稿があったときだけ Pipedream に渡される。つまり実際の投稿時のみ Innovation がカウントされるようになる。1日 333 Innovations が上限なので、1日何百回も投稿するようなことがない限り上限に達することはない。事実上投稿数に制限がなくなった。

n8n による RSS フィードの取得は cron で1分ごとに動かす。n8n は自宅サーバー(Raspberry Pi)で動かしているので回数制限などないから毎分実行するようなことができるわけだ。

実際の運用ではもっと細かい設定が必要となる。@メンションがある投稿は転送から除いた。写真付きの投稿で写真も一緒に転送するのは大変なので、その場合は Pleroma のパーマリンクを併記することにした(リンクをたどって写真を見てもらう)。また、Twitter の 140 字制限にひっかかると投稿に失敗した。だから、(余裕を持たせて)120 字以上の投稿ではテキストをトリミングし、さらにパーマリンクを併記した。

たぶんこれで死角のない、完璧にな Pleroma → Twitter 転送システムを構築できた。

全体の流れを図示すると以下のようになる。

(n8n ではバッチサイズを1にする設定を挟まないと、新着ではない過去分も投稿されてしまう。)

解決できていない問題は、1分間に複数の投稿があった場合、新しいものからツイートされてしまうこと(=古い投稿から順番にツイートできない)。n8n で簡単に設定できそうだがやり方が分かっていない。1分間に複数投稿することはあまりないので、これはとりあえず保留にしている。

それと、この方法は IT スキルがある程度高くないとできないので、普通の人には勧められない。簡単に実現できる仕組みがあればもっと Pleroma を使う人が増えるのに。

参考:
Count the number of characters - Questions - n8n
https://community.n8n.io/t/count-the-number-of-characters/11548/4

How to limit the length of text in a string? - Questions - n8n
https://community.n8n.io/t/how-to-limit-the-length-of-text-in-a-string/4768/2


この記事が気に入ったらサポートをしてみませんか?