プロもくチャットアドベントカレンダー6日目です!
勉強も兼ねてJSでツールを作りました
こんな感じで実行すると指定のチャンネルの全動画がoutput.csvに書き込まれます
npm run start -- <channelId>
・チャンネルIDの確認方法
youtubeのチャンネルのページに行くと大体@account
のようにエイリアスがつけられていますがこれはidじゃないです
詳細ページにいってチャンネルIDをコピーで取得できました
このチャンネルの動画を取得してみましょう
maxPageをつければお試しで取得できます(1ページあたり50件)
npm run start -- UCrXUsMBcfTVqwAS7DKg9C0Q --output=test.csv --maxPage=1
よさそう
head -n 3 test.csv
id,title,thumbnail
LoXtRJZtVGA,#PokemonTCGPocket のエフェクトはもう試した?👀あなたも #YouTubeショート でポケモンカードを引いてみよう!,https://i.ytimg.com/vi/LoXtRJZtVGA/default.jpg
AaAF7gl3BIw,YouTube Fanfest Japan 2024 🎉メッセージ第三弾✨出演クリエイターのみなさんから動画が届きました! #YTFF 当日をお楽しみに!,https://i.ytimg.com/vi/AaAF7gl3BIw/default.jpg
フィールドも指定できます
カラム名:アクセスするリソースの階層をドットつなぎで指定する
# id, title, publishedAtを取得
npm run start -- UCrXUsMBcfTVqwAS7DKg9C0Q --output=test.csv --maxPage=1 --fields=id:snippet.resourceId.videoId,title:snippet.title,published:snippet.publishedAt
よさそう
head -n 3 test.csv
id,title,published
LoXtRJZtVGA,#PokemonTCGPocket のエフェクトはもう試した?👀あなたも #YouTubeショート でポケモンカードを引いてみよう!,2024-12-02T02:00:10Z
AaAF7gl3BIw,YouTube Fanfest Japan 2024 🎉メッセージ第三弾✨出演クリエイターのみなさんから動画が届きました! #YTFF 当日をお楽しみに!,2024-12-01T03:00:08Z
こまったとこ
初期の実装はsearch listでチャンネルIDを指定して取得していました
しかしsearch listはquotaを100使うので5000件くらいしか取得できません
そこで、channelの全動画が入っているplaylistを取得して、そこからvideo listで取得するように変えました
簡単に表すとこんな感じ
// channelの全動画が入っているplaylistを取得
const playlistId = await fetchPlaylistId(channelId)
// playlistidを指定して動画一覧取得
const response = await youtube.playlistItems.list({playlistId})
そうするとchannel list=1quota playlist list=1quota なのでめっちゃ取得できるようになりました
助かった
簡易的な実装をしてからオプションが色々欲しくなったのでcommanderを入れました
参考になりました
ソース
使い方
-
GoogleCloudのYoutube Data API V3を有効にする
-
認証情報からAPIキーを作成(作成時にYoutubeAPIだけに制限すること!)
cp .env.example .env
.envにAPIキー設定
npm i
npm run start -- <channelId> --maxPage=1
おわり
間に合ってよかった〜
本当はTSで書きたかったのですが,速度が追いつかず断念
後日やりたい
明日は https://qiita.com/yosoyalumno さん!