概要
YouTubeの特定チャンネルの動画一覧を取得・表示するプログラムをClojureで作りました。 プログラムはGitHubにホストしてあります。
このプログラムでは、取得した動画情報をSQLiteに保存します。 そして、SQLiteに保存された動画情報をHTMLに出力して表示します。
2023/04/22 追記
下の画像のような並べ替えボタンを実装しました。
なお、このプログラムの下書きはChatGPTに書かせました。
API Keyの作成
以下の手順でYouTube Data APIで使用するAPI Keyを作成します。
- Googleアカウントを作成する
- Google Cloud Platformのプロジェクトを作成する
- YouTube Data APIを有効化する
- API Keyを作成する
- API KeyをYouTube Data APIのみに制限する
手順1のGoogleアカウントの作成方法は以下のサイトに書いてあります。
手順2~5のやり方は以下のサイトに書いてあります。 作成したAPI Keyは後で使うのでメモしておいてください。
YouTubeチャンネルIDの取得
YouTubeチャンネルIDの取得方法は以下のサイトに書いてあります。 取得したチャンネルIDは後で使うのでメモしておいてください。
プログラムのダウンロード
プログラムはGitHubにホストしてあります。リンクは以下になります。
インストール手順や設定方法は、GitHubに書いてあります。
GitHubにも書いてありますが、以下のコマンドでYouTube動画を取得してHTMLを生成します。
$ lein run -- --fetch --load --generate-html
.lein-env
の:html-dir
にチャンネル名.html
というファイル名でHTMLが生成されています。
それをブラウザで見ると動画一覧を以下のように見ることができます。
注意点
YouTube Data APIには1日あたり10,000[Quota]の利用制限があります。
https://www.googleapis.com/youtube/v3/search
APIは1回あたり100[Quota]かかります。
search
APIの1回あたりの最大取得件数は50件になります。
したがって、1日あたり5,000件の動画情報を取得できます。
ただし、search
APIのレスポンスには同じ動画が重複して帰ってくることがあるので注意が必要です。
search
APIには、publishedAfter
とpublishedBefore
で開始日時と終了日時を指定してその期間内の動画を取得することができます。しかし、チャンネル登録日から今日までの全ての期間の動画を取得する場合でも、例えば、3ヶ月間ごとに取得する場合と8ヶ月間ごとに取得する場合でレスポンスに含まれる動画情報に違いが出る場合があります。そのため、本プログラムでは、SQLiteに動画を保存し重複を回避したり後から最新動画を追加保存できるように作ってあります。取りこぼした動画を取得するために.lein-env
の:interval-month
を適宜変更して新しい動画を取得できないか試してみてください。
search
APIではpageToken
を使用することで1リクエストあたりの最大件数50件を超えて動画情報を取得することができます。
しかし、search
APIはレスポンスが500件を超えたあたりでレスポンスを返さなくなりpageToken
を返さなくなります。
そのため、500件以上の動画情報を取得する場合は、publishedAfter
とpublishedBefore
で取得する期間を指定して期間あたりの動画件数が500件以下になるように調節する必要があります。本プログラムでは、設定ファイル.lein-env
の:interval-month
で取得する最小期間(月)を設定できます。この期間あたりの件数が500件以下になるように設定してください。
なお、チャンネルの全動画を取得する場合チャンネル登録日が必要になります。チャンネル登録日は、YouTubeチャンネルページの「概要」タブの「統計情報」に書いてあります。
SQLiteのテーブルにはチャンネルIDをカラムに持たせているので、複数のチャンネルの動画を保存することができます。 また、本プログラムは、チャンネルごとにHTMLを出力できます。