「固定ポスト-random」フィードの技術的詳細

@tomo-x.bsky.social

そもそもこのフィードは何なのか

  • フォローしている人の固定ポストを
  • ランダムな順番で

表示するフィードです
↓ぜひ見てみてください
https://bsky.app/profile/did:plc:qcwvyds5tixmcwkwrg3hxgxd/feed/pinfeedran

インフラ詳細

デプロイ先はRender、データベースはUpstashのRedisを使っています。
どちらも無料枠がとても良心的で、個人で使うのにはとてもおすすめです。(今のところ一銭もかかってません)

仕組み

アクセスされてからのフローはこんな感じです(カスタムフィード自体の説明は省きます)

  1. ヘッダーに含まれているJWTからDIDを取得
  2. Redisからキャッシュを取得
  3. もしキャッシュが存在すればそこから要求されている部分を切り取って返す
  4. app.bsky.graph.getFollowsでその人がフォローしている人を取得
  5. app.bsky.actor.getProfilesでプロフィールを取得
  6. 固定ポストの情報を抽出し、一次元配列にしてランダムに並べる
  7. データを返し、一次元配列の状態でそのままRedisに保存(寿命は現状10分にしている)

cursorの値は配列のインデックスをそのまま使っています。多分ほんとはよくないです。

おまけ 今回生み出したくそコード

//ランダムに並べる    
posts
    .map((v) => ({ ran: Math.random(), value: v }))
    .toSorted((a, b) => a.ran - b.ran)
    .map((v) => v.value)
tomo-x.bsky.social
tomo-x

@tomo-x.bsky.social

高二
プログラミング/プロセカ/雀魂/スプラ/AC音ゲー/AC6
自称素人コラ師
atcoder茶レ(最高パフォーマンス緑)
チュウニズムプラレ

作ったもの
#Githubsky ( https://githubsky.vercel.app )
splatoonステージbot( @splatoon-stage-bot.bsky.social ) 他

アイコン: @yutan-po.bsky.social

Post reaction in Bluesky

*To be shown as a reaction, include article link in the post or add link card

Reactions from everyone (0)