Open13

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

Endo ShogoEndo Shogo

目的

  • YouTubeのチャンネルが投稿しているライブ・動画・ショート情報を集めること

ゴール

  • 対象のチャンネルの情報がスプレッドシートに集まること
  • 集めたい情報
    • タイトル
    • 動画説明
    • 動画の長さ
    • 投稿日
    • 動画のURL
    • メンバーシップ限定かどうか

※ メンバーシップ限定動画の情報は、メンバーシップ未加入状態でも取得できる情報に限る

Endo ShogoEndo Shogo

※ Google Cloudへのアカウント作成、プロジェクト登録は省略

  • "APIとサービス"の左メニューからライブラリを選択
  • ライブラリ検索で"youtube data api v3"と入力して検索

  • APIを有効にする

※ このスクショは有効済の画面

  • 有効にすると"APIとサービス"の左メニュー "有効なAPIサービス"画面下部のAPI一覧に"YouTube Data API v3"が表示されるようになる

Endo ShogoEndo Shogo
  • 認証情報画面から新しいAPIキーを生成
  • 生成したAPIキーにもYouTube Data API v3しか使えないように制限を設定

※ 更新系の操作は行わないのでOAuth 2.0 認証方法は採用しない予定

Endo ShogoEndo Shogo
  • チャンネルの動画一覧を取得する場合は 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 のドキュメント

https://developers.google.com/youtube/v3/docs/channels/list?hl=ja

Endo ShogoEndo Shogo
  • Google Apps ScriptのクイックスタートでYouTube Data API v3を使う

  • スプレッドシートを作成し、Google Apps Scriptを書いてYouTube Data API v3ライブラリを有効にしたところ

  • 上記のスクリプトを書いてスプレッドシートをリロードすると、スプレッドシートのメニューに "YouTube Data"という項目が表示されるようになる(IDやTitle列も追加される)

  • "YouTube Data"をクリックして"Add GoogleDevelopers data"をクリック

  • 初回は認証が必要らしいので、Google アカウントにログインして認証する(途中、警告が出るがそのまま進める)

  • 認証して実行が完了するとスプレッドシートに情報が入力される

Endo ShogoEndo Shogo
  • さきほどのGoogle Action Scriptを詳しく理解したらやりたいことができそうなので、もう少し詳しく見てみる
    • 全文は以下のリンクに記載

https://developers.google.com/youtube/v3/quickstart/apps-script?hl=ja

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 を見てみる
Endo ShogoEndo Shogo
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レスポンスに含まれる情報を整形する
  • 最後の行でスプレッドシートへデータを書き込んでいる
Endo ShogoEndo Shogo
  • やりたいことはこのスクリプトとほぼ同じなので、欲しい情報を洗い出しその情報が格納された具体的なプロパティを調査する
  • リクエストに必要な情報も合わせて洗い出す