Something went wrong. Try again.
Something went wrong. Try again.
Files
- JavaScript 71%
- CSS 20%
- HTML 9%
- Shell <1%
README.md
ATOMO Station #
Bluesky のカスタムフィードを毎日集め、テレビ欄のように並べるサイトです。
しくみ #
- Cloudflare Worker と D1 で動きます。5分ごとに
app.bsky.unspecced.getPopularFeedGeneratorsを語で検索し、フィードを集めます。認証は要りません - 名前か説明にかなを含むものを国内、ほかを海外(いいね20以上)とします
- チャンネル(11本)は、名前と説明の語で決めます(
src/genres.js)。1本ずつ直すときはsrc/overrides.jsに書きます - 成人向けのラベルが付いたものは出しません
- いいねの数は順番を決めるのにだけ使い、画面にも API にも出しません
- さがすの一覧は Worker が JSON に作り置き、ブラウザが Cache Storage に残して手元で探します
- ログイン(AT Protocol の OAuth)は鍵をブラウザが持ちます。Worker は client metadata を配るだけで、だれがログインしたかを知りません
- D1 に1日に書く行の数に上限を決めてあります(
wrangler.example.jsoncのD1_WRITE_BUDGET、src/d1-budget.js)。超えた日は集めるのをやめ、読むだけで動きます - 声の番組(
public/radio.js)は、番組表のおすすめから台本を作り、聞く人のブラウザの中で ZEN-TTS が声にします。Worker は何もしません
声の番組 #
音声モデル:Blueskyちゃん(https://github.com/kojira/zen-tts-models )/ ZEN-TTS(https://zenryokukikai.com )
ZEN-TTS と声のモデルは再配布できないので、このリポジトリには入っていません。動かすときは、ZEN-TTS v1.1.0(https://github.com/zenryokukikai/zen-tts )を組んで public/tts/ に、bluesky.ztm を public/voices/ に置きます。画面には「音声合成:ZEN-TTS(https://zenryokukikai.com )」を出します。
動かす #
wrangler.example.jsoncをwrangler.jsoncに写し、名前・ドメイン・database_idを自分のものにしますwrangler d1 create <名前>で D1 を作り、wrangler d1 execute <名前> --remote --file schema.sqlで表を作りますwrangler deployで出します
手元では wrangler dev --ip 127.0.0.1 で開きます。ログインは 127.0.0.1 でだけ動きます。/api/sweep を開くと1回分を集め、/api/build で番組表と一覧を作ります。どちらも 127.0.0.1 でだけ開きます。
リンクカードの画像(public/og/)は og/作る.sh で作り直します(macOS の Google Chrome を使います)。
ライセンス #
コードは MIT です(LICENSE)。public/vendor/oauth.js に入っているものの許諾は THIRD_PARTY.md と THIRD_PARTY_LICENSES.txt にあります。