本記事の内容は古いため、下記の最新記事を参照してください。
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をクリックします
Forkした際と同様に、Repository Nameに任意の名前を入力してCreate Repositoryを実行します
CloudflareのAPIトークンに権限を追加で付与してください
- すでに下記の2番でAPIトークンを作成済みの想定です。未実施、または、昔使っていたAPIトークンの値そのものを忘れた場合は新しく作成してください
https://github.com/usounds/Contrails/blob/main/INSTALL.md - 下記にアクセスします
https://dash.cloudflare.com/profile/api-tokens - 普通に使っている場合は1つしかないはずなので、1つの右上の3点リーダーの編集をクリックします
- 下の方の「+さらに追加する」をクリックします
- 「アカウント」「D1」「編集」を追加して、一番下の「概要へ進む」をクリックします
- トークンを更新するをクリックします
GitHubのEnvironment variablesを登録します
現時点でCLOUDFLARE_D1_IDは未確定なので、ダミー値(DUMMY)を設定しておいてください。
- Variable: BLUESKY_HANDLE
- Variable: CLOUDFLARE_ACCOUNT_ID
- Variable: CLOUDFLARE_WORKER_NAME
- Secret: BLUESKY_APP_PASSWORD
- Secret: CLOUDFLARE_API_TOKEN
- Secret: CLOUDFLARE_D1_ID
GitHubのAction「1. Check Requirements」を実行します
GitHubのAction「4. Create D1 Schema」を実行します
CloudflareのWorker & Pages->D1にアクセスし、contrails-authのデータベースIDをコピーします(右のアイコンをクリックするとコピーできます)
コピーした値を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エンコーディングしてください。
認証している都合上、ログインユーザーのモデレーションが有効になります。
多くの場合、問題にならないはずですが気をつけてください。