「rss2bsky」はRSSフィードを元にBlueskyへ自動投稿してくれるツールとのこと。実際に試して使い勝手を確かめてみました。

nesges/rss2bsky: Post items of a RSS-Feed to Bluesky. Also contains a simple script to post a single skeet to Bluesky. Written in PHP - Codeberg.org

https://codeberg.org/nesges/rss2bsky

rss2bskyを動かすためにはBlueskyのアカウントの他に「SQLite3・CURL・SimpleXML・GD・マルチバイト文字をサポートしたPHP」「SimplePie」が必要です。今回はUbuntuで動作させるため、下記のコマンドを入力して必要なツールをインストールしました。

sudo apt install php-sqlite3 php-curl php-xml php-mbstring php-gd libphp-simplepie

ツールが用意できたら下記のコマンドでrss2bskyをダウンロードします。

git clone https://codeberg.org/nesges/rss2bsky.git
cd rss2bsky

そして「cache」ディレクトリを作成し、「www-data」などサーバー用のユーザーに所有権を渡しておきます。

mkdir cache
sudo chown www-data.www-data cache

続いて「lib」ディレクトリを作成し、SimplePieのコードをコピー。

mkdir lib
cp /usr/share/php/simplepie/SimplePie.compiled.php lib/SimplePie.compiled.php

さらにBlueskyのログインに必要な情報を取得していきます。Blueskyにログインし、設定の「アプリパスワード」をクリック。



「アプリパスワードを追加」をクリックします。



何に使うためのパスワードなのか分かるように名前を付け、「アプリパスワードを作成」をクリック。



パスワードが表示されるのでコピーすれば準備完了です。



「config.sample.php」を「config.php」という名前に変えてコピーし、テキストエディタで開きます。

cp config.sample.php config.php
vi config.php

変更が必要なのは下記の部分です。「feed-url」では投稿の元となるRSSフィードのURLを指定し、「bluesky-username」にはBlueskyのユーザー名を入力。「bluesky-password」には先ほどコピーしておいたアプリパスワードを入力し、「bluesky-language」には「ja-JP」を指定します。最後の「cache-dir」には先ほど作成した「cache」フォルダの絶対パスを入力すればOK。



変更内容を保存してエディタを閉じたら下記のコマンドでrss2bskyを起動します。

/usr/bin/php rss2bsky.php

ところが、「PHP Fatal error: Uncaught Exception: Unable to open database: bad parameter or other API misuse in〜」というエラーが出て動作が止まってしまいました。どうやらcacheフォルダに書き込み権限が無いのが問題のようなので、下記のコマンドを入力します。

sudo chmod a+w cache

もう一度実行すると今度はフィードの内容が表示され、「posted」という表示が出ました。



Blueskyの画面を確認すると無事RSSフィードの内容が投稿されています。



同じRSSフィードで連続して動作させた場合でも、「already posted .. skipped(既に投稿済み .. スキップしました)」と表示されて連続投稿が防止されるようになっていました。



そのため、下記のようにcronを設定することでRSSの更新にあわせて投稿してくれるというわけです。

0 * * * * /usr/bin/php /opt/rss2bsky/rss2bsky.php > /dev/null

なお、rss2bskyには簡易的な手動投稿のためのスクリプトも付属しており、下記のコマンドで利用することができます。

./post "手動投稿のテスト!"

手動投稿の場合でもちゃんと投稿されているのが確認できました。