Apps Script 程式碼範例

如要執行程式碼範例,您必須在 Apps Script 中啟用 YouTube Data API 和 YouTube Analytics API (v2)。Data API 快速入門指南說明如何新增服務。

將 YouTube 數據分析資料匯出至 Google 試算表

這個函式會使用 YouTube Analytics API 擷取已驗證使用者頻道的資料,並在使用者的 Google 雲端硬碟中建立新的 Google 試算表,並在其中儲存資料。

這個範例的前半部會示範簡單的 YouTube 數據分析 API 呼叫。這個函式會先擷取活躍使用者的頻道 ID。這個函式會使用該 ID 發出 YouTube 數據分析 API 呼叫,擷取過去 30 天的觀看次數、喜歡次數、不喜歡次數和分享次數。API 會在回應物件中傳回資料,該物件包含 2D 陣列。

範例的第二部分會建構試算表。這個試算表會放置在已驗證使用者的 Google 雲端硬碟中,名稱為「YouTube 報表」,標題則會顯示日期範圍。這個函式會使用 API 回應填入試算表,然後鎖定用於定義圖表軸的欄和列。試算表會新增堆疊柱狀圖。

  function spreadsheetAnalytics() {
    // Get the channel ID
    var myChannels = YouTube.Channels.list('id', {mine: true});
    var channel = myChannels.items[0];
    var channelId = channel.id;
  
    // Set the dates for our report
    var today = new Date();
    var oneMonthAgo = new Date();
    oneMonthAgo.setMonth(today.getMonth() - 1);
    var todayFormatted = Utilities.formatDate(today, 'UTC', 'yyyy-MM-dd')
    var oneMonthAgoFormatted = Utilities.formatDate(oneMonthAgo, 'UTC', 'yyyy-MM-dd');
  
    // The YouTubeAnalytics.Reports.query() function has four required parameters and one optional
    // parameter. The first parameter identifies the channel or content owner for which you are
    // retrieving data. The second and third parameters specify the start and end dates for the
    // report, respectively. The fourth parameter identifies the metrics that you are retrieving.
    // The fifth parameter is an object that contains any additional optional parameters
    // (dimensions, filters, sort, etc.) that you want to set.
    var analyticsResponse = YouTubeAnalytics.Reports.query({
      "startDate": oneMonthAgoFormatted,
      "endDate": todayFormatted,
      "ids": "channel==" + channelId,
      "dimensions": "day",
      "sort": "-day",
      "metrics": "views,likes,dislikes,shares"
    });
  
    // Create a new Spreadsheet with rows and columns corresponding to our dates
    var ssName = 'YouTube channel report ' + oneMonthAgoFormatted + ' - ' + todayFormatted;
    var numRows = analyticsResponse.rows.length;
    var numCols = analyticsResponse.columnHeaders.length;
  
    // Add an extra row for column headers
    var ssNew = SpreadsheetApp.create(ssName, numRows + 1, numCols);
  
    // Get the first sheet
    var sheet = ssNew.getSheets()[0];
  
    // Get the range for the title columns
    // Remember, spreadsheets are 1-indexed, whereas arrays are 0-indexed
    var headersRange = sheet.getRange(1, 1, 1, numCols);
    var headers = [];
  
    // These column headers will correspond with the metrics requested
    // in the initial call: views, likes, dislikes, shares
    for(var i in analyticsResponse.columnHeaders) {
      var columnHeader = analyticsResponse.columnHeaders[i];
      var columnName = columnHeader.name;
      headers[i] = columnName;
    }
    // This takes a 2 dimensional array
    headersRange.setValues([headers]);
  
    // Bold and freeze the column names
    headersRange.setFontWeight('bold');
    sheet.setFrozenRows(1);
  
    // Get the data range and set the values
    var dataRange = sheet.getRange(2, 1, numRows, numCols);
    dataRange.setValues(analyticsResponse.rows);
  
    // Bold and freeze the dates
    var dateHeaders = sheet.getRange(1, 1, numRows, 1);
    dateHeaders.setFontWeight('bold');
    sheet.setFrozenColumns(1);
  
    // Include the headers in our range. The headers are used
    // to label the axes
    var range = sheet.getRange(1, 1, numRows, numCols);
    var chart = sheet.newChart()
                     .asColumnChart()
                     .setStacked()
                     .addRange(range)
                     .setPosition(4, 2, 10, 10)
                     .build();
    sheet.insertChart(chart);
  
  }