スキップしてメイン コンテンツに移動

GASでYouTube連携

GASでYouTube連携

GASとYouTube Data APIの連携

Google Apps Script(GAS)を使ってYouTube Data APIにアクセスするには、まず Advanced Services を有効化し、Google Cloud Console で YouTube Data API を有効にします。設定は「サービス」タブで「YouTube Data API v3」をオンにし、必要なスコープ(例:https://www.googleapis.com/auth/youtube.readonly)をスクリプトに追加します。これにより、GAS から YouTube オブジェクトを直接呼び出せるようになります。

以下は、チャンネルの動画リストを取得し、スプレッドシートに書き込むサンプルコードです。コードは 高度な連携 を実現するために、ページング処理とエラーハンドリングを組み込んでいます。

function listVideos() {
  const channelId = 'UCxxxxxxxxxxxx';
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.clearContents();
  sheet.appendRow(['動画ID', 'タイトル', '公開日']);
  let nextPageToken = '';
  do {
    const response = YouTube.Videos.list('snippet', {
      channelId: channelId,
      maxResults: 50,
      pageToken: nextPageToken
    });
    response.items.forEach(item => {
      sheet.appendRow([item.id, item.snippet.title, item.snippet.publishedAt]);
    });
    nextPageToken = response.nextPageToken;
  } while (nextPageToken);
}

このスクリプトを実行すると、YouTube Data API から取得したデータがスプレッドシートに自動で反映されます。API の呼び出し回数制限に注意し、必要に応じて Utilities.sleep でリクエスト間隔を調整してください。

Analytics APIとBigQuery APIを使った高度な分析

YouTube の視聴データをさらに深く分析したい場合、Analytics APIBigQuery API を組み合わせると強力です。Analytics API で取得したレポートを BigQuery にロードし、SQL で複雑なクエリを実行できます。

まず、Google Cloud Console で BigQuery API を有効化し、プロジェクトにデータセットを作成します。次に、Apps Script から Analytics API を呼び出し、JSON レポートを取得します。取得したデータを BigQuery.Jobs.insert でロードします。

function loadAnalyticsToBigQuery() {
  const viewId = 'ga:12345678';
  const startDate = '30daysAgo';
  const endDate = 'today';
  const metrics = 'ga:views,ga:averageViewDuration';
  const dimensions = 'ga:videoTitle,ga:videoId';
  const report = AnalyticsReporting.Reports.batchGet({
    reportRequests: [{
      viewId: viewId,
      dateRanges: [{startDate, endDate}],
      metrics: [{expression: metrics}],
      dimensions: [{name: dimensions}]
    }]
  });
  const rows = report.reports[0].data.rows;
  const rowsToInsert = rows.map(row => ({
    json: {
      videoId: row.dimensions[1],
      videoTitle: row.dimensions[0],
      views: parseInt(row.metrics[0].values[0]),
      avgDuration: parseFloat(row.metrics[0].values[1])
    }
  }));
  const job = BigQuery.Jobs.insert({
    configuration: {
      load: {
        destinationTable: {
          projectId: 'your-project-id',
          datasetId: 'youtube_analytics',
          tableId: 'video_stats'
        },
        schema: {
          fields: [
            {name: 'videoId', type: 'STRING'},
            {name: 'videoTitle', type: 'STRING'},
            {name: 'views', type: 'INTEGER'},
            {name: 'avgDuration', type: 'FLOAT'}
          ]
        },
        writeDisposition: 'WRITE_TRUNCATE'
      }
    },
    jobReference: {
      jobId: 'load_job_' + new Date().getTime()
    }
  }, {rows: rowsToInsert});
}

BigQuery でのクエリ例として、視聴時間が長い動画を抽出する SQL は次のようになります。

SELECT videoTitle, SUM(avgDuration * views) AS totalWatchTime
FROM `your-project-id.youtube_analytics.video_stats`
GROUP BY videoTitle
ORDER BY totalWatchTime DESC
LIMIT 10;

このように、高度な連携 を実現することで、YouTube のデータをビジネスインサイトに変換できます。

拡張サービスの設定と有効化

Apps Script で外部 API を利用する際は、拡張サービス の設定が不可欠です。設定手順は以下の通りです。

  1. スクリプトエディタの左側メニューから「サービス」を選択。
  2. 「+」ボタンをクリックし、利用したいサービス(例:YouTube Data API、Analytics API、BigQuery API)を検索。
  3. 該当サービスを選択し、「追加」をクリック。
  4. スクリプト内で ServiceName オブジェクトを使用して API を呼び出す。

また、Google Cloud Console で API キーや OAuth クライアント ID を作成し、有効化 した API のスコープをスクリプトに設定します。スコープは appsscript.jsonoauthScopes 配列に追加します。

{
  "timeZone": "Asia/Tokyo",
  "oauthScopes": [
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/youtube.readonly",
    "https://www.googleapis.com/auth/analytics.readonly",
    "https://www.googleapis.com/auth/bigquery"
  ]
}

設定が完了すると、Apps Script から直接 API を呼び出せるようになり、高度な連携 が可能になります。設定ミスやスコープ不足は認証エラーの原因になるため、必ず確認してください。

この記事はAIによって作成されました。

コメント