はじめに
本記事では、Node.js上でYouTube Data API v3を使いプレイリストを一括作成する手順を紹介します。
言語はTypeScript、Google APIs Node.js Clientを用います。
そもそも大量のプレイリストを必要とするケースがどんなものか、さほど明白ではないと思われる1ので、最初に筆者の業務実例を簡単に触れておきます。(記事本文に進みたい方はこちら)
業務実例 〜コンクールでの動画審査
全日本ピアノ指導者協会(ピティナ)は国内最大規模のコンクール、ピティナ・ピアノコンペティション2を運営しています。
ピティナ・ピアノコンペティションでは新型コロナウイルスを契機に、2020年度より「特級」ほか上位の部門(級)で「動画審査」を導入しました。
動画審査の応募動画の一例(2022年度:特級グランプリ 北村 明日人さん)
コンクールは通常、1時間〜1時間30分を1グループとして、上位級では1日に5~6つのグループを審査します。これが複数の級で何日かにわたって行われます。
動画審査でも同様の形式となりますが、審査の便宜をはかり、各グループごとに再生リストを用意することになりました。
こうして、「「2022特級一次A 1グループ」といったプレイリストを、2020年度は56、2021年度は92、2022年度は68、作成する必要が生じました。加えて、再生リストは 限定公開(unlisted) でなければいけません。
目標
動画審査用に限定公開で大量のプレイリストを作成する。
例
「2022特級一次A 1グループ」「2022特級一次A 2グループ」...「2022特級一次A 6グループ」…「2022特級一次D 6グループ」
「2022Pre特級一次A 1グループ」...
「2022G級A 1グループ」...
環境
- Node.js
- v. 18.16.1
- Voltaでのバージョン管理。
- macOS Ventura 13.4.1
Voltaを使ったNode.jsの導入については本記事では扱いません。
参考
https://qiita.com/KokiSakano/items/1bfcad79a0ba5e549186
想定読者
- YouTube Data API v3を活用したい方
- 非エンジニアの方も念頭に、作業ステップを細かめに記述しています。
- Google Cloud Platformのアカウント作成済みの方
- YouTube Data APIでプレイリストを作りたい方
- YouTube Data APIについての概論は省きます。
Node.jsプロジェクトの準備
VSCode等のエディタを開き、プロジェクトを作ります。
node -v
v18.16.1
mkdir <Your Project Name>
cd <Your Project Name>
npm init -y
package.json
を下記に書き換え、npm install
を行い、依存パッケージをインストールします。
{
"name": "<your project name>",
"version": "1.0.0",
"description": "create playlist using YouTube Data API v3",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@google-cloud/local-auth": "^2.1.1",
"googleapis": "^118.0.0"
},
"devDependencies": {
"@types/node": "^20.3.1",
"ts-node": "^10.9.1",
"typescript": "^5.1.3"
}
}
加えて、認証情報を保管するsecrets
ディレクトリを作成します。
git管理する場合secrets
はgitignoreすることを忘れずに。
📦your_project
┣ 📂node_modules
┣ 📂secrets
┣ 📜package-lock.json
┗ 📜package.json
YouTube Data APIの準備 〜 認証用JSONの作成
最初にYouTube API Data API v3の設定〜実装を行います。認証用のJSONデータをローカルにダウンロードするのが目標です。この辺りは別記事も数多くありますので参照してください。
Google Cloud Platformで新規プロジェクト作成
GCPにアクセスし、新規プロジェクトを作成します。
YouTube Data API v3を有効化
検索窓よりMarketPlaceへ | 有効化 |
---|---|
認証情報へ
OAuthクライアントIDを作成
「承認済みのリダイレクトURI」 にhttp://localhost:3000/oauth2callback
を指定。
作成完了ダイアログから「JSONをダウンロード」。
「OAuth同意画面」でテストユーザーを追加する
📦your_project
┣ 📂node_modules
┣ 📂secrets
┃ ┗ 📜oauth2.keys.json
┣ 📜package-lock.json
┗ 📜package.json
コードを書く
createPlayList.ts
を作成します。
import { google } from "googleapis";
import path from "path";
import { authenticate } from "@google-cloud/local-auth";
const youtube = google.youtube("v3");
// 作成するプレイリスト名を配列で指定する
const playListTitles = ["2023特級一次A 1グループ", "2023特級一次A 2グループ"]
async function main() {
const auth = await authenticate({
keyfilePath: path.join(__dirname, "secrets/oauth2.keys.json"),
scopes: ["https://www.googleapis.com/auth/youtube"],
});
google.options({ auth });
playListTitles.forEach(title => {
createPlaylist(title).then(res =>
console.log(`${res.data.snippet?.title},id:${res.data.id}`)
)
}
)
console.log("success!")
}
async function createPlaylist(title: string) {
const res = await youtube.playlists.insert({
"part": ["snippet", "status"],
"requestBody": {
"snippet": {
title: title
},
"status": {
privacyStatus: "unlisted"
},
}
}
);
return res
}
main()
「限定公開」指定をするには、part
にstatusを追加し、status.privacyStatusをunlistedで指定します。
📦your_project
┣ 📂node_modules
┣ 📂secrets
┃ ┗ 📜oauth2.keys.json.json
┣ 📜createPlayList.ts
┣ 📜package-lock.json
┗ 📜package.json
実行
最後にコードを実行します。
コードの実行はts-nodeで行っています。
ts-node "createPlayList.ts"
するとログインプロンプトが表示されます。チャンネルが複数ある場合は、プレイリストを作成したいチャンネルを選択してください。
アラートが表示されますが、「詳細」から「<アプリ名>に移動」を選択。
アカウント権限の承認を行うと、実行が完了します。
success!
2023特級一次A 1グループ,id:PLA1PkDYbNMjeRczV_Qj7pfuzjPY-iEg3o
2023特級一次A 2グループ,id:PLA1PkDYbNMjdL9SYfL0-9P9Ayj6i0fFl8
Quota(使用可能量)について
YouTube Data API v3はデフォルトで10,000 per dayのQuotaがあります。
Quotaの使用量はメソッドによって変わりますが、今回は 50/requestなります。
したがって1日あたり200までAPIでのプレイリスト作成が可能ということになります。
Quota使用量の一覧は下記で確認できます。
https://developers.google.com/youtube/v3/determine_quota_cost?hl=ja
おわりに
こうして作られたプレイリストによって、コロナ禍での動画審査がスムーズに進みました。
2023年度もホールでの実地審査と合わせ、動画審査も行われます。3
「プレイリストを大量に作る」という場面はあまり多くはないかもしれませんが、ピティナでの実例を参考に、身の回りの業務自動化にご活用いただけましたら幸いです。