Open13
YouTube Data API v3でチャンネル情報を取得する

目的
- YouTubeのチャンネルが投稿しているライブ・動画・ショート情報を集めること
ゴール
- 対象のチャンネルの情報がスプレッドシートに集まること
- 集めたい情報
- タイトル
- 動画説明
- 動画の長さ
- 投稿日
- 動画のURL
- メンバーシップ限定かどうか
※ メンバーシップ限定動画の情報は、メンバーシップ未加入状態でも取得できる情報に限る

参照する資料

※ Google Cloudへのアカウント作成、プロジェクト登録は省略
- "APIとサービス"の左メニューからライブラリを選択
- ライブラリ検索で"youtube data api v3"と入力して検索
- APIを有効にする
※ このスクショは有効済の画面
- 有効にすると"APIとサービス"の左メニュー "有効なAPIサービス"画面下部のAPI一覧に"YouTube Data API v3"が表示されるようになる

- 認証情報画面から新しいAPIキーを生成
- 生成したAPIキーにもYouTube Data API v3しか使えないように制限を設定
※ 更新系の操作は行わないのでOAuth 2.0 認証方法は採用しない予定

-
動画情報が欲しいのでリソースはvideoのはず
-
操作はlist
-
動画の情報取得は以下のドキュメントを参考にする

-
チャンネルの動画一覧を取得する場合は
channels.list
にアクセスするらしい -
リクエスト例
https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.channels.list?
part=contentDetails
&forUsername=リクエストしたいチャンネルの名前
- チャンネルIDが分かるなら以下のような形でも可能
https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.channels.list?
part=contentDetails
&id=チャンネルのID
- 他の
channels.list
のドキュメント

- APIへのアクセスはGoogle Action Script を使う
- 環境構築が簡単そう & スプレッドシートとの連携が容易そうなため

-
Google Apps ScriptのクイックスタートでYouTube Data API v3を使う
-
スプレッドシートを作成し、Google Apps Scriptを書いてYouTube Data API v3ライブラリを有効にしたところ
- 上記のスクリプトを書いてスプレッドシートをリロードすると、スプレッドシートのメニューに "YouTube Data"という項目が表示されるようになる(IDやTitle列も追加される)
- "YouTube Data"をクリックして"Add GoogleDevelopers data"をクリック
- 初回は認証が必要らしいので、Google アカウントにログインして認証する(途中、警告が出るがそのまま進める)
- 認証して実行が完了するとスプレッドシートに情報が入力される

- さきほどのGoogle Action Scriptを詳しく理解したらやりたいことができそうなので、もう少し詳しく見てみる
- 全文は以下のリンクに記載
function onOpen() {
var firstCell = SpreadsheetApp.getActiveSheet().getRange(1, 1).getValue();
if (firstCell != 'ID') {
var headerRow = ["ID", "Title", "View count"];
SpreadsheetApp.getActiveSpreadsheet().appendRow(headerRow);
}
var ui = SpreadsheetApp.getUi();
ui.createMenu('YouTube Data')
.addItem('Add channel data', 'getChannel')
.addSeparator()
.addItem('Add GoogleDevelopers data', 'getGoogleDevelopersChannel')
.addToUi();
}
※ https://developers.google.com/youtube/v3/quickstart/apps-script?hl=ja より引用
- function onOpen()はおそらくスプレッドシートが開かれた時に呼ばれるもの
- ここでスプレッドシートのメニューに "Youtube Data"を追加している
-
addItem
は第1引数に表示テキスト、第2引数に呼び出す関数名を書く - 今回は "Add GoogleDevelopers data" を実行したので、
getGoogleDevelopersChannel
を見てみる

function getGoogleDevelopersChannel() {
channelsListByUsername('snippet,contentDetails,statistics',
{'forUsername': 'GoogleDevelopers'});
}
※ https://developers.google.com/youtube/v3/quickstart/apps-script?hl=ja より引用
- function getGoogleDevelopersChannel() は channelsListByUsername()を呼び出している
- 第1引数は 'snippet,contentDetails,statistics'
- 第2引数は {'forUsername': 'GoogleDevelopers'}
- channelsListByUsername() を読む
function channelsListByUsername(part, params) {
var response = YouTube.Channels.list(part,
params);
var channel = response.items[0];
var dataRow = [channel.id, channel.snippet.title, channel.statistics.viewCount];
SpreadsheetApp.getActiveSpreadsheet().appendRow(dataRow);
}
※ https://developers.google.com/youtube/v3/quickstart/apps-script?hl=ja より引用
- function channelsListByUsername() は名前から推測するとusernameのチャンネルからリスト形式で情報を返す
- 第1引数はYouTube Data API v3で必要なpart(リソースに対して返されるプロパティのグループ)
- 第2引数はYouTube Data API v3でリクエストするためのパラメータ
- 最初の行にある
YouTube.Channels.list
でYouTube Data API v3をリクエストしてチャンネル情報を取得する - 続く2行はAPIレスポンスに含まれる情報を整形する
- 最後の行でスプレッドシートへデータを書き込んでいる

- やりたいことはこのスクリプトとほぼ同じなので、欲しい情報を洗い出しその情報が格納された具体的なプロパティを調査する
- リクエストに必要な情報も合わせて洗い出す

GASでアップロードされた動画を取り出す方法はGASのサンプルに載っている

メンバーシップ限定動画情報の取得方法