2020年7月22日

Google Apps Script で YouTube の API を使う


Google Apps Script から YouTube の情報を取得するときの設定方法をメモメモ…



この記事で紹介する方法は2020年7月時点のものです。仕様変更などにより情報が古くなっている場合があります。



GAS(Google Apps Script) から YouTube Data APIYouTube Live Streaming API といった各種 API を利用したいときの方法です。さっそく手順を説明します。

  1. スクリプト編集画面を開く
  2. リソース > Google の拡張サービス を選択する
  3. 利用したい API を ON に切り替える

以上です。

正直自分は「えっこれだけ?」と驚きました。だいぶ前に YouTube の API を使ったときは、まずプロジェクトを登録して、利用したい API を個別に申請して、キーをもらって…というなかなか面倒な手順を踏まないといけなかったのですが、それがなんとエディタ内で有効化するだけで各種 API が使えるとは。たった3クリック!便利ですね。

ただし、2019年4月8日以前に作成された古いプロジェクト(ファイル)の場合は Google Cloud Platform や Google APIs といった画面に一旦移動し、手動で API を有効化する必要があるとのことなので注意してください。まあその場合スクリプト実行時にエラーメッセージが表示されると思うので、メッセージの内容に従えば大丈夫だと思います。その他拡張サービスを利用するときの注意点についてはこちらにまとめられています。

Advanced Google services  |  Apps Script  |  Google Developers
https://developers.google.com/apps-script/guides/services/advanced

具体的な使い方はこんな感じです。

// メニュー項目を追加する
function onOpen()
{
  const ui = SpreadsheetApp.getUi();
  const menu = ui.createMenu("Custom Script");
  menu.addItem("Get Playlist Data", "retrievePlaylist");
  menu.addToUi();
}

// YouTube のプレイリストから動画の情報を取得しスプレッドシートに出力する
function retrievePlaylist()
{
  const playlistId = "UUyof-1Ko_jy2sOtivyTpc4Q";
  const maxResults = 100;
  const outputSheetName = "YoutubePlaylist";
  
  // プレイリストのデータを取得する
  let playlistData = [];  
  let nextPageToken = "";
  let remainingResults = maxResults;
  
  while (nextPageToken != null && remainingResults > 0)
  {
    const playlistResponse = YouTube.PlaylistItems.list("snippet", {
      playlistId: playlistId,
      maxResults: remainingResults,
      pageToken: nextPageToken
    });
    
    const itemsNum = playlistResponse.items.length;
    for (let i = 0; i < itemsNum; i++)
    {
      const item = playlistResponse.items[i];
      const title = item.snippet.title;
      const description = item.snippet.description.replace(/\r?\n/g,""); // 改行は削除
      playlistData.push([title, description]);
    }
    
    nextPageToken = playlistResponse.nextPageToken;
    remainingResults -= itemsNum;
  }
  
  // 取得したデータをシートに書き込む
  const outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(outputSheetName);
  outputSheet.getRange(1, 1, playlistData.length, 2).setValues(playlistData);
}

YouTube のプレイリストから100件の動画タイトルと説明を取得してスプレッドシートに出力するスクリプトです。24行目でYouTube.PlaylistItems.listというメソッドを使ってデータを取得しています。これが YouTube Data API です。いちいち API のキーを取得し fetch を使って…という手間をかけなくてもいいのでとても便利ですよね。今回はプレイリストのIDや最大件数を直接指定していますが、これもスプレッドシートなどから読み込むようにすればもっと汎用性が高くなると思います。

ついでに動画コメントを取得するスクリプトも書いたので別記事にまとめました。


あ、それから、API の利用にはアカウントの紐付けと承認が必要になります。もしスクリプト実行時に承認画面が表示された場合は指示に従って適宜許可するようにしてください。


0 件のコメント:

コメントを投稿