Bluesky のポストを github actions で取得して保存する bsky-to-markdown を公開した

https://github.com/tokuhirom/bsky-to-markdown

rss-to-twitter と同様の発想で rss からデータをとってきて github に保存するということも可能かもしれない。

  1. github actions で cron 実行する。
  2. bluesky の rss を取得する
  3. 取得した rss をパースする
  4. 各エントリを 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 "[email protected]"
          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 を使うようにしたほうが画像とかも取れていいかもだけど、まぁ一旦これで僕の要望は満たされた感じある。