created: 2020-04-29T03:41:01.000Z
YouTube DataAPIv3 でプレイリストに動画を追加する
工程はこんな感じになる
- GCPのコンソールでYouTubeDataAPIv3をenableにする
- OAuthトークンを取得
youtube.playlistItems.insert
を呼ぶ
トークンを取得するのが面倒なのだが、サービスアカウントの認証情報でそのままリクエストを投げることはできないようだ
アプリケーションは OAuth 2.0 トークンを、非公開のユーザー情報にアクセスするリクエストと共に送信しなければなりません。アプリケーションはクライアント ID と、場合によってクライアント シークレットを、トークンを取得するために送信します。ウェブ アプリケーション、サービス アカウント、インストール型アプリケーションで使用する OAuth 2.0 認証情報を作成できます。
GCPのコンソールでYouTubeDataAPIv3をenableにする
GCPの管理画面で操作してenableにする
この記事はスクショが多くてよさそうである
ただし、今回は youtube.playlistItems.insert
を呼びたいので、払い出す認証はAPIキーではなくOAuthクライアントになる。APIキーはreadonlyな処理しかできず、writeっぽい操作はOAuthトークンが必要ということらしい
OAuthトークンを取得
ここにあるスクリプトをコピペして実行するとトークンが得られる
一箇所 SCOPES
のところはいじる必要がある (スクリプトだとreadonlyになっている)
トークンの取得はこんな感じになる
- スクリプトを実行
- コンソールにURLが表示されるのでブラウザでアクセス
- Googleアカウントの認証、渡す権限についても承認する
- ブラウザでcodeが提示されるので、それをコンソールに戻って入力
$HOME/.credentials/youtube-nodejs-quickstart.json
にトークンが置かれる
youtube.playlistItems.insert
を呼ぶ
clientId
,clientSecret
は OAuthクライアントの認証情報auth.credentials
はyoutube-nodejs-quickstart.json
の中身
import { youtube_v3, google } from 'googleapis';
const auth = new google.auth.OAuth2({
clientId: 'xxxxxxxx.apps.googleusercontent.com',
clientSecret: 'xxxxxxxxxxx9',
});
auth.credentials = {
access_token: 'xxxxxxxxxx',
refresh_token: 'xxxxxxxxxxxxx',
token_type: 'Bearer',
expiry_date: 1588132656533,
};
const youtube = new youtube_v3.Youtube({ auth });
youtube.playlistItems
.insert({
part: 'id,snippet,contentDetails',
requestBody: {
snippet: {
playlistId: 'xxxxxxxxxGLoNoixAluaV',
position: 0,
resourceId: {
videoId: 'sqPbMsssiFw',
kind: 'youtube#video',
},
},
},
})
.then((res) => console.log(res.data))
.catch(console.error);