Site icon image usounds

usoundsの日常や技術的なメモを残すブログです

Contrails - fork版

本記事の内容は古いため、下記の最新記事を参照してください。

https://blog.usounds.work/posts/contrails-fork-manual

ContrailsとBluesky APIに詳しい方向けです。必ず注意事項を読んでから使ってください。

新規でセットアップをする方は別記事を参照してください。

前段

Contrailsが叩いているAPIは「https://search.bsky.social/search/posts」ですが、なんか挙動がおかしいです。認証不要で叩けるので、余りメンテナンスされてないのかな。

認証が必要なAPIである「https://bsky.social/xrpc/app.bsky.feed.searchPosts」を叩けばマシな結果になるのでは?ということで、エンドポイントを変えてみました。

手順

私のレポジトリから、改めてレポジトリを作成してください。(または、私のレポジトリからあなたのレポジトリにプルリク作成して反映してください)

プルリクで反映する場合は、必ずCONFIG.mdをバックアップするようにしてください。下記は改めてレポジトリ作る手順です。

右上のUse this templateからCreate a new Repositoryをクリックします

Image in a image block

Forkした際と同様に、Repository Nameに任意の名前を入力してCreate Repositoryを実行します

Image in a image block
CloudflareのAPIトークンに権限を追加で付与してください
Image in a image block
  • 下の方の「+さらに追加する」をクリックします
Image in a image block
  • 「アカウント」「D1」「編集」を追加して、一番下の「概要へ進む」をクリックします
Image in a image block
  • トークンを更新するをクリックします
Image in a image block
GitHubのEnvironment variablesを登録します

現時点でCLOUDFLARE_D1_IDは未確定なので、ダミー値(DUMMY)を設定しておいてください。

  • Variable: BLUESKY_HANDLE
  • Variable: CLOUDFLARE_ACCOUNT_ID
  • Variable: CLOUDFLARE_WORKER_NAME
Image in a image block
  • Secret: BLUESKY_APP_PASSWORD
  • Secret: CLOUDFLARE_API_TOKEN
  • Secret: CLOUDFLARE_D1_ID
Image in a image block
GitHubのAction「1. Check Requirements」を実行します
GitHubのAction「4. Create D1 Schema」を実行します

CloudflareのWorker & Pages->D1にアクセスし、contrails-authのデータベースIDをコピーします(右のアイコンをクリックするとコピーできます)

Image in a image block
コピーした値をGitHubのEnvironment variablesのCLOUDFLARE_D1_IDに上書きします
今までのContrailsと同様、CONFIG.mdを修正し、「2. Deploy to Cloudflare」「3. Publish Feed Generators」の順に実行します。

recordNameは旧Contrailsと同じ値で大丈夫です(要するに CONFIG.mdは昔の内容のコピペでOKですがハッシュタグのみ注意が必要なので後続の注意事項を読んでください)。Avator Icon設定している場合は、忘れずに新しいレポジトリに再アップロードしてください。

新しくWorkerを作成した場合、1回目の「2. Deploy to Cloudflare」はSecretの作成に失敗するので、そのまRetryしてください。

注意事項

D1使ってます

読み込みはさておき書き込みは最低限にしているので問題ないはずですが、念の為Usageは眺めるようにしてください。また、D1はWorkerごとではなくCloudflareアカウント共通なので、新しくWorkerを作る場合であっても、「4. Create D1 Schema」は一度だけの実行で問題ありません。

動作が異なる場合は、面倒ですがWebAPIで挙動を試してください

検索ワードは必ず、公式サイトのWeb上かcurlで直接叩いて実験してください。叩いているAPIが違うので挙動が違います。試した限りは「#」が含まれると検索に失敗するなど。

APIを直接叩く場合は、下記を参照してください。

searchPostを叩く前に認証トークンを取ります。

認証トークンコピってパラメータに渡します。クエリパラメータはURLエンコーディングしてください。

認証している都合上、ログインユーザーのモデレーションが有効になります。

多くの場合、問題にならないはずですが気をつけてください。