imu-note
いむたろ
いむたろ
@imutaroh
新卒エンジニア / データ基盤 × AI

What — クォータ制のコスト構造

課金は存在しない(クォータ制)

従量課金ではなく1日10,000ユニットのポイント制。使い切ると課金されるのではなく、ただ403エラーで止まる。だからAPIキーが流出しても金銭被害はゼロ(最悪、当日の枠が焼かれるだけ)。リセットは太平洋時間の深夜0時=日本時間16時(夏)/ 17時(冬)。

操作ごとのコスト(ここが設計の肝)

操作ユニット備考
キーワード検索 (search)100突出して高い。1回で最大50件
動画統計 (videos)1IDをカンマ連結して50本まとめて1回で取る
チャンネル統計 (channels)1同上。登録者数はここ
投稿一覧 (playlistItems)1チャンネル監視はこれ。searchでやると100倍のコスト

「どの窓口から取るか」でコストが桁で変わる。チャンネル監視をsearchでやるかuploads(playlistItems)でやるかで同じ結果が100 vs 2ユニット

検索結果に再生数は入っていない(二段取得)

searchが返すのはタイトル・チャンネル名・投稿日まで。再生数が欲しければ、searchで得たvideoIdをvideosに投げ直す二段取得が必須。ここを知らないと「API使ってるのに数字がない」と混乱する。

「伸びている」は自分で定義する

APIはランキングをくれない。指標は2つ組み合わせる。

  • 伸び率 = 再生数 ÷ 登録者数(2.0x以上が目安。チャンネル規模に対するバズ度)
  • 勢い = 再生数 ÷ 投稿からの経過日数(古い動画の伸び率が過大に出るのを補正)

How — キー管理と実装

キー管理は3レイヤー。

Google Cloud(発行・API制限・無効化・使用量の正本)
   ↓
macOS Keychain(暗号化保管。gitの外なのでコミット事故が構造的に起きない)
   ↓
スクリプト(キー本体は書かず、実行時に解決する)

スクリプト側の解決はこの1行。${変数:-フォールバック} はbashの定番イディオム:

KEY="${YOUTUBE_API_KEY:-$(security find-generic-password -s youtube-api-key -w)}"
  • Keychainへの保存は security add-generic-password -a "$USER" -s youtube-api-key -w 'キー' -U
  • 漏洩を疑ったらConsoleでキー再生成 → Keychainを上書きすれば旧キーは即死(ローテーション)
  • キーには「YouTube Data API v3のみ」のAPI制限を掛ける。有料API(Maps系)と請求先連携が揃うと流出時に実害が出るため、防壁を多層にする

実装はClaude CodeのSkill youtube-research(dotfiles内 ~/.claude/skills/youtube-research/)として済んでいる。「YouTubeで◯◯調べて」で検索クエリ設計→取得→伸び率計算→チャット報告まで動く。

つまずきどころ
  • 1語クエリはジャンルが偏る(「恋愛」→漫画系ばかり。「恋愛 心理」でハウツー系に変わる)。2語に絞る
  • 登録者数は3桁精度の概数で返る
  • 字幕取得だけはAPIキー不可(OAuth必須)。文字起こし系をやるなら別設計

関連