この記事では、GoogleのAPIを使用してYouTubeLiveのイベント配信の枠を作成する方法を簡単に説明します。
使い道はよくわかりませんが、スプレッドシートで放送管理している人や、イベント枠を毎日何十個と作る人は、便利かもしれません。
1. Google API Consoleで各種キーを発行
必要なキーは「APIキー」「クライアントID」「クライアントシークレット」の3つです。
Google API Consoleを開き、
新規プロジェクト作成→APIライブラリより「YouTube Data API v3」を有効化する。
認証情報→認証情報を作成→APIキー/OAuthクライアントID この2つを作成する。
OAuthクライアントは使用アプリケーションに「その他」を選択。

こんな感じの画面になればOK。「APIキー」をどこかにコピーしておく。
更にOAuthクライアント名をクリックすると、

ここで「クライアントID」と「クライアントシークレット」が手に入るのでどこかにコピー。
OAuth同意画面から「Google API のスコープ」という欄があるので、「スコープを追加」を押し、
../auth/youtube
../auth/youtube.force-ssl
この二つを追加する。
※上でYouTube Data API v3を有効化していないと、ここでこの二つは表示されない。

こうなっていればOK。
2. OAuth認証
GASに組込む前にひとまずcURLで実行してみます。
CLIENT_ID=**** CLIENT_SECRET=**** echo "https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=$CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/youtube%20https://www.googleapis.com/auth/youtube.force-ssl&access_type=offline"
生成されたURLをブラウザで開きます。

イベントを生成するブランドアカウントを選ぶ。
間違えてメールアドレスのものを選んでしまったり、別のアカウントを選ばないように注意。

すると警告が出てくるので、左下の「詳細」をクリックし、

移動をクリックする。
その後も何度か確認が出てくるので全て「許可」し続ける。
全て認証が終わると、Authorization Codeが表示されるのでコピーしておく。
CLIENT_ID=**** CLIENT_SECRET=**** AUTHORIZATION_CODE=**** curl --data "code=$AUTHORIZATION_CODE" --data "client_id=$CLIENT_ID" --data "client_secret=$CLIENT_SECRET" --data "redirect_uri=ietf:wg:oauth:2.0:oob" --data "grant_type=authorization_code" --data "access_type=offline" https://www.googleapis.com/oauth2/v4/token
上手くいくとこんな感じのJSONが返ってきます。
{
"access_token": "**.**-****-****",
"expires_in": 3600,
"refresh_token": "*//****-****-**",
"scope": "https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube",
"token_type": "Bearer"
}
ここで生成されたAccess Tokenは60分で失効してしまうので、
何度でも生成できるようにRefresh Tokenを使います。
CLIENT_ID=**** CLIENT_SECRET=**** REFRESH_TOKEN=*//****-****-** curl --data "refresh_token=$REFRESH_TOKEN" --data "client_id=$CLIENT_ID" --data "client_secret=$CLIENT_SECRET" --data "grant_type=refresh_token" https://www.googleapis.com/oauth2/v4/token
これでRefresh TokenからAccess Tokenを再生成できます。
Refresh Tokenは明示的に無効化させない限り、何度でも使うことができます。
3. LiveStreming APIを使ってみる
$API_KEY=****
$ACCESS_TOKEN=****
curl --request POST \
'https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id,snippet,contentDetails,status&key=$API_KEY' \
--header 'Authorization: Bearer $ACCESS_TOKEN' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"scheduledStartTime": "20**-**-**T**:**:00.000Z","title": "****","status":{"privacyStatus": "private"}}' \
--compressed
これで最低限のイベント枠が生成されます。
data部分に渡すJSONのパラメーターは公式のドキュメントを参考にして下さい
かるく触った感じ、公式に乗ってなくても反映されるものが一部ありました。
{
"snippet": {
"scheduledStartTime": "***", // *放送開始時間(記法は 2019-11-27T22:00:00.000Z)
"title": "***", // *放送タイトル
"isDefaultBroadcast": false, // 今すぐ配信の設定かどうか(イベント作成の場合はfalse)
"description": "", // 概要欄。改行は\n
"categoryId": 20, // カテゴリー20=ゲーム(機能していない)
"tags": "" // タグ(機能していない)
},
"contentDetails": {
"enableAutoStart": true, // データ送信開始と同時にストリームも開始する
"latencyPreference": "ultraLow", // 超低遅延モード
"monitorStream": {
"broadcastStreamDelayMs": 0, // 放送に遅延を与える(0秒)
"enableMonitorStream": false // プレビューモードにするか
},
"enableDvr": false, // DVR
"enableContentEncryption": false, // ストリームを暗号化
"enableEmbed": true, // 埋め込み許可
"recordFromStart": true, // 放送開始したら録画を開始する
"startWithSlate": false, // ??
"enableClosedCaptions": false, // 字幕を?
"enableLowLatency": false, // ??
"projection": "rectangular" // ??
},
"status": {
"privacyStatus": "public" // *公開するかどうか(private/public)
}
}
うちはこんな感じで設定しています。
4. GASへ組み込み
function createEvent(title, desc, startAt) {
var accessToken = getToken();
var apiKey = "*********";
var url = "https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id,snippet,contentDetails,status&key=" + apiKey;
var headers = {
"Authorization": "Bearer " + accessToken,
"Accept": "application/json",
"Content-type": "application/json"
}
var data = {
"snippet": {
"scheduledStartTime": startAt, // *放送開始時間(正しい記法は 2019-11-27T22:00:00.000Z)
"title": title, // *放送タイトル
},
"status": {
"privacyStatus": "public" // *公開するかどうか(private/public)
}
}
var options = {
"method": "post",
"payload": JSON.stringify(data),
"headers": headers
};
var resultRaw = UrlFetchApp.fetch(url, options).getContentText();
var resultJson = JsonParse(resultRaw);
return resultJson.id;
}
function getToken() {
var refreshToken = "*//*****-*****";
var clientId = "******";
var clientSecret = "*******";
var url = "https://www.googleapis.com/oauth2/v4/token";
var data = "refresh_token=" + refreshToken + "&client_id=" + clientId + "&client_secret=" + clientSecret + "&grant_type=refresh_token"
var options = {
"method": "post",
"payload": data,
}
var resultRaw = UrlFetchApp.fetch(url, options).getContentText();
var resultJson = JsonParse(resultRaw);
return resultJson.access_token;
}
使い方としては、管理用のスプレッドシートに日付やゲーム名を入力し、「イベント作成」の文字を消すとトリガー。
createEvent()にそれらの情報を渡してあげたら自動でイベント作成し、できたイベントのYouTubeIDをセルに書き込む。
(実際はHYPERLINKでイベント編集画面にリンクさせている)

これでイベントを作成する手間を少しだけ減らすことができた。
(DVRオフ、超低遅延モードなどの設定忘れも無くなる!)
ちなみに、とかい育ちチャンネルは基本サイマル放送(同時放送)なのですが、
そういう方は、他のプラットホーム(例えばTwitchなど)も同時に自動で枠作成してあげると、
放送準備が一気に簡単になるのでおすすめです!(⊃∪`*)







コメントを書く