Przykładowe fragmenty kodu Apps Script

Aby uruchomić przykłady kodu, musisz włączyć interfejsy YouTube Data API i YouTube Analytics API (w wersji 2) w Apps Script. W artykule Data API – przewodnik po funkcjach znajdziesz instrukcje dodawania usługi.

Eksportowanie danych ze Statystyk YouTube do Arkuszy Google

Ta funkcja korzysta z interfejsu YouTube Analytics API, aby pobierać dane o kanale uwierzytelnionego użytkownika i tworzyć na Dysku tego użytkownika nowy arkusz Google Sheets z tymi danymi.

Pierwsza część tego przykładu demonstruje proste wywołanie interfejsu API Statystyk YouTube. Ta funkcja najpierw pobiera identyfikator kanału aktywnego użytkownika. Korzystając z tego identyfikatora, funkcja wywołuje interfejs API Statystyk YouTube, aby pobrać dane dotyczące wyświetleń, polubień, nieprzychylnych opinii i udostępnień z ostatnich 30 dni. Interfejs API zwraca dane w obiekcie odpowiedzi zawierającym tablicę dwuwymiarową.

Druga część przykładu tworzy arkusz kalkulacyjny. Arkusz kalkulacyjny jest umieszczany na koncie Dysku Google uwierzytelnionego użytkownika. Jego nazwa to „YouTube Report”, a w tytule znajduje się zakres dat. Funkcja wypełnia arkusz kalkulacyjny odpowiedzią interfejsu API, a następnie blokuje kolumny i wiersze, które będą definiować osie wykresu. Do arkusza kalkulacyjnego zostanie dodany skumulowany wykres kolumnowy.

  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);      }