4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プロもくチャットAdvent Calendar 2024

Day 6

特定のyoutubeチャンネルの全動画をcsvにする

Last updated at Posted at 2024-12-05

プロもくチャットアドベントカレンダー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を入れました

参考になりました :pray:

ソース

使い方

  1. GoogleCloudのYoutube Data API V3を有効にする

  2. 認証情報からAPIキーを作成(作成時にYoutubeAPIだけに制限すること!)

  3. readmeに従う

cp .env.example .env

.envにAPIキー設定

npm i

npm run start -- <channelId> --maxPage=1

おわり

間に合ってよかった〜

本当はTSで書きたかったのですが,速度が追いつかず断念

後日やりたい


明日は https://qiita.com/yosoyalumno さん!

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?