🈳

DenoでBlueskyをRSS feed化した

2023/04/20に公開

BluestreamというWeb toolを作りました。
Deno Deployで動いています。

https://bluestream.deno.dev/

https://bluestream.deno.dev/kawarimidoll.bsky.socialのようにBlueskyのハンドル(bsky.socialのみ対応)をpathnameにしてアクセスすることで、Blueskyの投稿のRSSを生成します。
上記のTOPページからハンドルを入力することも可能です。

リポジトリはこちら。
https://github.com/kawarimidoll/bluestream

活用例

任意のRSSリーダーに取り込むことができます。
Slackで表示するとこんな感じ。

IFTTTなどのサービスでRSSをトリガーとすることで、他のサービスへの連携が可能です。
以下はBlueskyへPostするたびにPixe.laへ記録していくサンプルです。

https://pixe.la/v1/users/kawarimidoll/graphs/bluesky.html

設定方法は以下の記事を参考にしてください。

https://zenn.dev/kawarimidoll/articles/223b86334c8b1d

困ったポイント

以下の記事ではnpm:@atproto/apiをimportして使っていました。

https://zenn.dev/kawarimidoll/articles/42efe3f1e59c13

ローカルやGitHub Actions等で使う場合にはこれでも問題ないのですが、(本開発時点では)Deno Deployではnpm:xxx形式でのモジュールの使用には対応していません。

https://github.com/denoland/deploy_feedback/issues/314

したがって、esm.shからインポートして使う必要があります。
ただ、微妙に書式が異なるため、ちょっとハマりました。
以下のように修正する必要があります。

npmモジュールとしてimport
import AtprotoAPI from "npm:@atproto/api";
const { BskyAgent } = AtprotoAPI;
const agent = new BskyAgent({ service: "https://bsky.social" });
const resolve = await agent.com.atproto.identity.resolveHandle({
  handle: "kawarimidoll.bsky.social"
});
esm.shからimport
import BskyAgent from "https://esm.sh/@atproto/api";
const agent = new BskyAgent({ service: "https://bsky.social" });
const resolve = await agent.api.com.atproto.identity.resolveHandle({
  handle: "kawarimidoll.bsky.social"
});

関連プロジェクト

RSSを自前で記述するにあたり、XMLタグを簡単に書けるモジュールを作っていたのが役に立ちました。

https://zenn.dev/kawarimidoll/articles/6022552f509b84

BluestreamのTOPページは以下で作ったindexページを流用しています。

https://zenn.dev/kawarimidoll/articles/4183e072266140

Discussion