GitHub Trending を定期投稿する Bluesky ボットを作った
🤖 作ったもの
最新の GitHub Trending Repository を定期的に投稿する Bluesky ボットを作りました。 全体のトレンドと、JS/TSのフロントエンドのトレンドを投稿する2つのBotがあります。
GitHub Trending | GitHub Trending JS/TS |
---|---|
細かい仕様はこちらです。
- 毎日最新のトレンドを取得
- 30 分から 1 時間おきに GitHub Trending に掲載されているリポジトリをツイート
- 一度投稿したリポジトリは再度掲載されていても 4 日間は投稿しない
コードはすべて以下リポジトリで公開しています。
💘 モチベーション
こちらの記事 で紹介したGitHub Trending を流すTwitter Botを作った時と同様です。
複数のつよい人から GitHub Trending を定期的に見て最新の情報をキャッチアップしているという話を聞いたのがはじまりです。自分も見る習慣をつけようと思ったのですがなかなか続かず、それなら毎日見る Twitter のタイムラインで見れるようにすればよいのでは? と怠惰なモチベーションではじめました。
このTwitter Botは1年ほど運用していて8,000フォロワーほどまで成長していたのですが、先日いきなり凍結されてしまいました。解除を申請してもダメで、諦めかかけていたところ、Blueskyの招待コードをもらえたので「Twitterで駄目ならBlueskyで運用だ!」となり、この記事に至ります。
(凍結されてしまったTwitter Botのリポジトリ🥲)
🛠️ 実装のポイント
基本的な構成は以前のTwitter Botと同様です。コードの大部分も流用しています。
- インフラ: Firebase
- 定期投稿: Cloud Functions for Firebaseの定期実行
今回書き換えた Bluesky への投稿部分を中心に解説します。
Blueskyのクライアント
BlueskyのATProtocolでの通信は@atproto/apiを使っています。プロダクト上では、@atproto/apiを叩くラッパーのBskyClient
クラスを定義してそれを使うようにしています。
リッチテキストとリンクカードを使って投稿
投稿時は情報を見やすくするために、リッチテキストとリンクカードを使っています。
投稿部分はこちらのコードです。GitHub Trendingのリポジトリ情報とエージェントを受け取り、情報を整形して投稿しています。
convertLinkText
関数でのリッチテキストへの変換は、@kawarimidollさんの以下記事のコードをそのまま使わせてもらっています。良記事ありがとうございます🙏
リンクカードの実装は以前こちらの記事でまとめた手法を使っています。
🎬 おわりに
以上 GitHub Trending を流す Bluesky ボットの紹介でした。自分で作ったというのもありますが、ボットを日々見ることで明らかに最新の情報をキャッチアップする速度が上がった気がします。使ってもらえると嬉しいです。
📣 宣伝
Blueskyを最近始めた方で「知り合い誰がいるかわからん..🤔」という方には Sky Follower Bridge が便利なのでぜひ使ってみてください!
Discussion