## What — クォータ制のコスト構造 ### 課金は存在しない(クォータ制) 従量課金ではなく**1日10,000ユニットのポイント制**。使い切ると課金されるのではなく、ただ403エラーで止まる。だからAPIキーが流出しても金銭被害はゼロ(最悪、当日の枠が焼かれるだけ)。リセットは太平洋時間の深夜0時=日本時間16時(夏)/ 17時(冬)。 ### 操作ごとのコスト(ここが設計の肝) | 操作 | ユニット | 備考 | | --- | --- | --- | | キーワード検索 (search) | **100** | 突出して高い。1回で最大50件 | | 動画統計 (videos) | 1 | IDをカンマ連結して**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の定番イディオム: ```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で◯◯調べて」で検索クエリ設計→取得→伸び率計算→チャット報告まで動く。 > [!warning] つまずきどころ > - 1語クエリはジャンルが偏る(「恋愛」→漫画系ばかり。「恋愛 心理」でハウツー系に変わる)。**2語に絞る** > - 登録者数は3桁精度の概数で返る > - 字幕取得だけはAPIキー不可(OAuth必須)。文字起こし系をやるなら別設計 ## 関連 - [[AIと働く]] - [[APIとJobの違い]]