نماذج رموز برمجة التطبيقات

لتنفيذ عيّنات الرموز البرمجية، عليك تفعيل YouTube Data API وYouTube Analytics API (الإصدار 2) في Apps Script. يوضّح دليل البدء السريع لواجهة برمجة التطبيقات Data API كيفية إضافة خدمة.

تصدير بيانات "إحصاءات YouTube" إلى "جداول بيانات Google"

تستخدِم هذه الدالة YouTube Analytics API لطلب بيانات عن قناة المستخدم الذي تمّت مصادقته، ما يؤدّي إلى إنشاء جدول بيانات جديد في Drive الخاص بالمستخدم يتضمّن هذه البيانات.

يوضّح الجزء الأول من هذا النموذج طلب بيانات بسيطًا من YouTube Analytics API. تُستخدَم هذه الدالة أولاً لعرض رقم تعريف قناة المستخدم النشط. باستخدام هذا المعرّف، تطلب الدالة بيانات من YouTube Analytics API لاسترداد عدد المشاهدات والمعجبين والمعجبين السلبيين والمشاركات خلال آخر 30 يومًا. تعرض واجهة برمجة التطبيقات البيانات في عنصر استجابة يحتوي على صفيف ثنائي الأبعاد.

ينشئ الجزء الثاني من العيّنة جدول بيانات. يتم وضع جدول البيانات هذا في Google Drive الخاص بالمستخدم الذي تمّت المصادقة عليه باسم "تقرير YouTube" مع إدراج النطاق الزمني في العنوان. تملأ الدالة جدول البيانات بردّ واجهة برمجة التطبيقات، ثمّ تُقفل الأعمدة والصفوف التي تحدّد محاور الرسم البياني. تتم إضافة رسم بياني عمودي مكدس إلى جدول البيانات.

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