Bluesky のポストを github actions で取得して保存する bsky-to-markdown を公開した
https://github.com/tokuhirom/bsky-to-markdown
rss-to-twitter と同様の発想で rss からデータをとってきて github に保存するということも可能かもしれない。
- github actions で cron 実行する。
- bluesky の rss を取得する
- 取得した rss をパースする
- 各エントリを foreach する
- エントリの日付のファイルを開く(なければ作る)
- 202412.md のようなフォーマットとする。
- markdown の表の一行のようなフォーマットを 1 エントリとする
- URL を重複排除キーとして、上書きしていく。
- git add して、変更されたファイルをすべて書き込んでいく。
この方法で bluesky の投稿もすべて記録しておくことができる。 お金はかからない。最高。
github actions は nodejs なら docker image 使わなくて( ・∀・)イイ!!ので、実装言語は nodejs とする。まずは nodejs のスクリプトを実装しよう。
azu/rss-to-twitter で使われていた gh-actions-template をテンプレートとしてプロジェクトを開始してみようかなと思った。が、ちょっといろいろと設定が入りすぎてて理解が大変そうだ。久々の github actions なのでイチから実装することとする。そのほうが結局理解が早そう。
rss-parser を使って rss をパースすることにしてみる。他に良い物があるのかもしれないが、chatgpt がおすすめしてきたので一旦これで。
- esbuild
- vitest
- prettier
とか、割と使い慣れてる技術スタックで実装していく。
実際、使うには以下のようにすれば良い。簡単ね。
name: Bluesky to Markdown
on:
schedule:
- cron: "*/15 * * * *"
workflow_dispatch:
permissions:
contents: write
jobs:
take-logs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
- uses: tokuhirom/bsky-to-markdown@v1
with:
rss_url: "https://bsky.app/profile/did:plc:lxhl5eomhtxsraduecf3n6p3/rss"
- name: Push built files
run: |
git config user.name "GitHub Actions"
git config user.email "actions@github.com"
git add logs/
if ! git diff --cached --quiet; then
git commit -m "Add built files"
git push origin HEAD
else
echo "No changes to commit"
実際に動かしてみると以下のようになる。
https://github.com/tokuhirom/bsky-logs/blob/main/logs/202412.md
これで、Twilog 的なことができるようになりました。
本当は RSS じゃなくて API を使うようにしたほうが画像とかも取れていいかもだけど、まぁ一旦これで僕の要望は満たされた感じある。
Published: 2025-01-01(Thu) 07:50