YouTube収集でsearch.listは節約すべき資源だ — チャンネル探しにだけ使い、残りは1 unitの経路で
type=videoではなくtype=channelで探したら、ライブカメラが24件から113件に増えた
YouTube Data APIで動画を集めていて、quota(1日の呼び出し上限)がすぐ尽きる人向けの記事だ。読み終わると、search.listを何にだけ使い、残りをどの呼び出しに置き換えるか、そして「いま配信中」の検索がなぜ取りこぼすのかがわかる。
キーワードを16個に増やしても0件
埼玉のライブカメラを集めて地図に載せていた。ところが大宮周辺だけがやけに空いていた。検索語を区単位で16個まで増やしても、新しく出てきた再生可能なカメラは0件。キーワード検索が飽和していた。
チャンネル名がそのまま住所だった
手元のカメラを見直すと、この地域のライブカメラは1チャンネル1カメラで、チャンネル名が設置住所そのものだった。埼玉県さいたま市大宮区桜木町ライブカメラ といった具合だ。
それまでは type=video&eventType=live で探していた。これは今まさに配信中の動画しか拾わない。少し途切れたカメラは丸ごと見えなくなる。チャンネルなら配信が切れていても結果に残る。そこで type=channel でまずチャンネルを探し、動画はチャンネルの中から取り出すやり方に変えた。
高いのはsearchだけ
search.listを除けば、ここで使う呼び出しは全部1回1 unitだ。チャンネルが見つかったら、channels.listでアップロード再生リストのIDを取り、playlistItems.listで最新アップロード50本を取り、videos.listで50本ずつ「いまライブか」「埋め込めるか」を聞く。playlistItemsにはライブかどうかの情報がないので、videos.listは必須だ(公式ドキュメントのplaylistItemリソースにそのフィールドがない)。
チャンネル1つあたりおよそ2〜3 unitになる。チャンネルごとにsearch.listで「いまライブ中の動画」を聞くやり方と比べると差は大きい。あちらはチャンネルの数だけsearchを使う。
記事を書こうとドキュメントを見直したらルールが変わっていた
収集スクリプトを書いたときは、search.listは1回100 unitで、1日10,000 unitを他の呼び出しと分け合うものだと思っていた。この記事のために公式ドキュメントを開き直したら変わっていた。2026年6月1日の改訂でsearch.listとvideos.insertはそれぞれ専用のquota枠を使うようになり、今のquota計算ページではsearch.listが「1日100回、1回1」と書かれている(2026-10-15更新版で確認)。
結論は変わらない。旧ルールなら65チャンネルそれぞれにsearchを使うと6,500 unitで1日分の65%。新ルールなら1日100回のうち65回。どちらにしてもsearchが真っ先に尽きる。プロジェクトごとに上限が違うこともあるので、Google Cloud Consoleで自分の数字を確認してほしい。
2026-08-24に測った数字
type=video だけのときは65チャンネルからライブ24件。type=channel を足すと138チャンネル、ライブ113件になった。地図に載せたカメラは41件から58件に、大宮10km圏内は16件から21件に増えた。
このとき138チャンネル・5,710本を回るのに使ったsearch.listは12回。残りの呼び出しは約275 unit。スクリプトは旧ルールで1,475と数えていて、そのうち1,200がsearchだった。見つけたチャンネルIDを固定リストとして保存しておけば次からはsearchをほぼ使わずに済むと見ているが、これはまだ測っていない。
YouTube APIで収集や監視を作っていてquotaに詰まっているなら、negabaro に構成を見せてもらってかまわない。どこで呼び出しが漏れているか一緒に見る。
探し方ごとの結果(埼玉、2026-08-24)
| 方法 | チャンネル | ライブ | 地図に掲載 | 大宮10km圏 |
|---|---|---|---|---|
| type=videoのみ | 65 | 24 | 41 | 16 |
| + type=channel | 138 | 113 | 58 | 21 |
65チャンネルを回るとき
| やり方 | 旧ルール(search 1回100 unit) | 現ルール(search 1日100回) |
|---|---|---|
| チャンネルごとにsearch.list | 6,500 unit(1日分の65%) | search 65回(1日分の65%) |
| チャンネル → アップロード再生リスト → videos | 1チャンネル2〜3 unit | search 0回 + 1チャンネル2〜3 unit |
現ルールはYouTube Data API公式ドキュメントのquota計算ページ(2026-10-15更新)と2026-06-01の改訂履歴による。
呼び出しの順番
GET /youtube/v3/search?part=snippet&type=channel&q=さいたま市 ライブカメラ
GET /youtube/v3/channels?part=contentDetails&id=UC...,UC... # uploads ID
GET /youtube/v3/playlistItems?part=contentDetails&playlistId=UU...&maxResults=50
GET /youtube/v3/videos?part=snippet,liveStreamingDetails,status&id=v1,v2,... # 50本まで
実践ステップ
search.list?type=channelでチャンネルだけを探し、見つけたIDはリストとして保存する
channels.listでアップロード再生リストのIDを取る(1 unit)
playlistItems.listで最新アップロード50本を取る(1 unit、ライブかどうかは入っていない)
videos.listに50本ずつ渡してliveStreamingDetails・status.embeddableを見る(1 unit)
自分のプロジェクトのquota上限はGoogle Cloud Consoleで確認する