Melacak jumlah tontonan video YouTube &

Tingkat coding: Pemula
Durasi: 20 menit
Jenis project: Otomatisasi dengan pemicu berbasis waktu

Tujuan

  • Pahami fungsi solusi.
  • Pahami fungsi layanan Apps Script dalam solusi.
  • Siapkan skrip.
  • Jalankan skrip.

Tentang solusi ini

Solusi ini melacak performa video YouTube publik, termasuk penayangan, suka, dan komentar, di spreadsheet Google Spreadsheet. Pemicu memeriksa informasi terbaru setiap hari dan mengirim email jika video memiliki aktivitas komentar baru sehingga Anda dapat berinteraksi dengan pertanyaan dan komentar.

Screenshot data YouTube di Google Spreadsheet

Cara kerjanya

Skrip ini menggunakan layanan YouTube lanjutan untuk mendapatkan detail dan statistik video YouTube untuk URL video yang tercantum di kolom Link Video di setiap sheet. Jika jumlah komentar untuk video yang tercantum telah meningkat, skrip akan mengirim notifikasi email ke alamat email yang digunakan untuk memberi nama sheet.

Layanan Apps Script

Solusi ini menggunakan layanan berikut:

Prasyarat

Untuk menggunakan contoh ini, Anda memerlukan prasyarat berikut:

  • Akun Google (akun Google Workspace mungkin memerlukan persetujuan administrator).
  • Browser web dengan akses ke internet.

Menyiapkan skrip

Membuat project Apps Script

  1. Klik tombol berikut untuk membuat salinan spreadsheet Melacak penayangan dan komentar video YouTube. Project Apps Script untuk solusi ini dilampirkan ke spreadsheet.
    Buat salinan
  2. Di spreadsheet yang disalin, ubah nama sheet Your_Email_Address menjadi alamat email Anda.
  3. Tambahkan URL video YouTube yang ingin Anda lacak atau gunakan URL yang disediakan untuk pengujian. URL harus diawali dengan format www.youtube.com/watch?v=.
  4. Klik Ekstensi > Apps Script. Jika YouTube sudah tercantum di bagian Layanan, Anda dapat langsung ke 2 langkah berikutnya.
  5. Di samping Layanan, klik Tambahkan layanan .
  6. Dari daftar, pilih YouTube Data API, lalu klik Tambahkan.

Buat pemicu

  1. Di project Apps Script, klik Pemicu > Tambahkan pemicu.
  2. Untuk Pilih fungsi yang akan dijalankan, pilih markVideos.
  3. Untuk Select event source, pilih Time-driven.
  4. Untuk Pilih jenis pemicu berbasis waktu, pilih Penghitung waktu hari.
  5. Untuk Pilih waktu dalam sehari, pilih waktu yang Anda inginkan.
  6. Saat diminta, izinkan skrip. Jika layar izin OAuth menampilkan peringatan, Aplikasi ini tidak diverifikasi, lanjutkan dengan memilih Lanjutan > Buka {Project Name} (tidak aman).

Jalankan skrip:

Pemicu yang Anda siapkan akan menjalankan skrip sekali sehari. Anda dapat menjalankan skrip secara manual untuk mengujinya.

  1. Di project Apps Script, klik Editor .
  2. Di dropdown fungsi, pilih markVideos.
  3. Klik Run.
  4. Beralih kembali ke spreadsheet untuk meninjau informasi yang ditambahkan skrip ke sheet.
  5. Buka email Anda untuk meninjau email yang berisi daftar video yang memiliki lebih dari satu komentar. Saat berjalan di masa mendatang, skrip hanya akan mengirim email dengan video yang jumlah komentarnya meningkat sejak terakhir kali skrip berjalan.

Meninjau kode

Untuk meninjau kode Apps Script untuk solusi ini, klik Lihat kode sumber di bawah:

Melihat kode sumber

Code.gs

solutions/automations/youtube-tracker/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/youtube-tracker

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Sets preferences for email notification. Choose 'Y' to send emails, 'N' to skip emails.
const EMAIL_ON = 'Y';

// Matches column names in Video sheet to variables. If the column names change, update these variables.
const COLUMN_NAME = {
  VIDEO: 'Video Link',
  TITLE: 'Video Title',
};

/**
 * Gets YouTube video details and statistics for all
 * video URLs listed in 'Video Link' column in each
 * sheet. Sends email summary, based on preferences above, 
 * when videos have new comments or replies.
 */
function markVideos() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  // Runs through process for each tab in Spreadsheet.
  sheets.forEach(function(dataSheet) {
    let tabName = dataSheet.getName();
    let range = dataSheet.getDataRange();
    let numRows = range.getNumRows();
    let rows = range.getValues();
    let headerRow = rows[0];

    // Finds the column indices.
    let videoColumnIdx = headerRow.indexOf(COLUMN_NAME.VIDEO);
    let titleColumnIdx = headerRow.indexOf(COLUMN_NAME.TITLE);

    // Creates empty array to collect data for email table.
    let emailContent = [];

    // Processes each row in spreadsheet.
    for (let i = 1; i < numRows; ++i) {
      let row = rows[i];
      // Extracts video ID.
      let videoId = extractVideoIdFromUrl(row[videoColumnIdx])
      // Processes each row that contains a video ID.
      if(!videoId) { 
        continue;
      }
      // Calls getVideoDetails function and extracts target data for the video.
      let detailsResponse = getVideoDetails(videoId);
      let title = detailsResponse.items[0].snippet.title;
      let publishDate = detailsResponse.items[0].snippet.publishedAt;
      let publishDateFormatted = new Date(publishDate);
      let views = detailsResponse.items[0].statistics.viewCount;
      let likes = detailsResponse.items[0].statistics.likeCount;
      let comments = detailsResponse.items[0].statistics.commentCount;
      let channel = detailsResponse.items[0].snippet.channelTitle;

      // Collects title, publish date, channel, views, comments, likes details and pastes into tab.
      let detailsRow = [title,publishDateFormatted,channel,views,comments,likes];
      dataSheet.getRange(i+1,titleColumnIdx+1,1,6).setValues([detailsRow]);

      // Determines if new count of comments/replies is greater than old count of comments/replies.
      let addlCommentCount = comments - row[titleColumnIdx+4];

      // Adds video title, link, and additional comment count to table if new counts > old counts.
      if (addlCommentCount > 0) {
        let emailRow = [title,row[videoColumnIdx],addlCommentCount]
        emailContent.push(emailRow);
      }
    }
    // Sends notification email if Content is not empty.
    if (emailContent.length > 0 && EMAIL_ON == 'Y') {
      sendEmailNotificationTemplate(emailContent, tabName);
    }
  });
}

/**
 * Gets video details for YouTube videos
 * using YouTube advanced service.
 */
function getVideoDetails(videoId) {
  let part = "snippet,statistics";
  let response = YouTube.Videos.list(part,
      {'id': videoId});
 return response;
}

/**
 * Extracts YouTube video ID from url.
 * (h/t https://stackoverflow.com/a/3452617)
 */
function extractVideoIdFromUrl(url) {
  let videoId = url.split('v=')[1];
  let ampersandPosition = videoId.indexOf('&');
  if (ampersandPosition != -1) {
    videoId = videoId.substring(0, ampersandPosition);
  }   
 return videoId;
}

/**
 * Assembles notification email with table of video details. 
 * (h/t https://stackoverflow.com/questions/37863392/making-table-in-google-apps-script-from-array)
 */
function sendEmailNotificationTemplate(content, emailAddress) {
  let template = HtmlService.createTemplateFromFile('email');
  template.content = content;
  let msg = template.evaluate();  
  MailApp.sendEmail(emailAddress,'New comments or replies on YouTube',msg.getContent(),{htmlBody:msg.getContent()});
}

email.html

solutions/automations/youtube-tracker/email.html
<!--
 Copyright 2022 Google LLC

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<body>
  Hello,<br><br>You have new comments and/or replies on videos: <br><br>
  <table border="1">
    <tr>
      <th>Video Title</th>
      <th>Link</th>
      <th>Number of new replies and comments</th>
    </tr>
    <? for (var i = 0; i < content.length; i++) { ?>
    <tr>
      <? for (var j = 0; j < content[i].length; j++) { ?>
      <td align="center"><?= content[i][j] ?></td>
      <? } ?>
    </tr>
    <? } ?>
  </table>
</body>

Kontributor

Contoh ini dikelola oleh Google dengan bantuan Pakar Developer Google.

Langkah berikutnya