Para ejecutar muestras de código, debes habilitar la API de YouTube Data y la API de YouTube Analytics (v2) en Apps Script. En la Guía de inicio rápido de la API de Data, se explica cómo agregar un servicio.
Cómo exportar datos de YouTube Analytics a Hojas de cálculo de Google
Esta función usa la API de YouTube Analytics para recuperar datos sobre el canal del usuario autenticado y crear una nueva hoja de cálculo de Google en Drive del usuario con los datos.
En la primera parte de este ejemplo, se muestra una llamada simple a la API de YouTube Analytics. Esta función primero recupera el ID del canal del usuario activo. Con ese ID, la función realiza una llamada a la API de YouTube Analytics para recuperar las vistas, los Me gusta, los No me gusta y los compartidos de los últimos 30 días. La API devuelve los datos en un objeto de respuesta que contiene un array 2D.
La segunda parte de la muestra construye una hoja de cálculo. Esta hoja de cálculo se coloca en Google Drive del usuario autenticado con el nombre "Informe de YouTube" y el período en el título. La función completa la hoja de cálculo con la respuesta de la API y, luego, bloquea las columnas y filas que definirán los ejes de un gráfico. Se agrega un gráfico de columnas apiladas a la hoja de cálculo.
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); }