起因是想要记录一下 milklove 的二搭剧 Whale Store xoxo 在油管上的预告片的播放量的 คุณวาฬร้านชำ (Whale Store xoxo) | GMMTV 2025 - YouTube

于是先搜了一下有没有可以直接使用的开源项目或者接口,然后在 批量统计YouTube视频播放量方法 - 杨哥的出海营销笔记 这篇文章中了解到了可以使用 google sheet 的 apps 脚本 直接获取油管的播放量。

不过这篇文章中的脚本更多的获取当前的播放量,而不是定时获取,因此我在这个脚本的基础上进行了一些修改,来实现定时获取播放量,然后把时间和对应的播放量的信息存到 sheet 中。

最终的效果如图所示。杂货铺播放量记录 - Google 表格

CleanShot 2024-12-15 at 21.38.06@2x.png

操作教程

第一步,在 sheet 中的原始模板是这样的:

链接视频 id时间播放量
https://www.youtube.com/watch?v=Eia_Sh_ZTyQ=MID(A2, FIND(“v=”, A2) + 2, LEN(A2) - FIND(“v=”, A2) - 1)

在第一列写上要监听的油管的链接,然后视频的 id 通过公式直接计算出来。

第二步,点击 extentions - apps script 这里,跳转到脚本配置界面。

CleanShot 2024-12-15 at 21.40.14@2x.png

点击左侧的 services 的加号,添加 YouTube Data API v3,标识符、版本直接默认就可以了。

CleanShot 2024-12-15 at 21.44.17@2x.png

第三步,把代码复制到 Code.gs 中,效果如图:

function onOpenFunc() {
  PropertiesService.getScriptProperties().setProperty("accessToken", ScriptApp.getOAuthToken())
}
 
function getVideoViews(videoid) {
  var accessToken = PropertiesService.getScriptProperties().getProperty("accessToken")
 
  // Check if the access token exists
  if (!accessToken) {
    Logger.log("No access token found.")
    return "Error: No access token"
  }
 
  try {
    var videoStatsResponse = YouTube.Videos.list("statistics", {
      id: videoid,
      access_token: accessToken,
    })
 
    // Check if the response contains the expected data
    if (
      videoStatsResponse.items &&
      videoStatsResponse.items[0] &&
      videoStatsResponse.items[0].statistics
    ) {
      return videoStatsResponse.items[0].statistics.viewCount
    } else {
      Logger.log("No statistics found for video ID: " + videoid)
      return "Error: No statistics"
    }
  } catch (error) {
    Logger.log("Error fetching statistics for video ID " + videoid + ": " + error.toString())
    return "Error: " + error.toString()
  }
}
 
function recordYouTubeViewCount() {
  // 获取活动表格
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
 
  // 获取第二行的 ID
  var videoId = sheet.getRange(2, 2).getValue()
 
  // 获取当前时间
  var currentTime = new Date()
 
  try {
    // 获取播放量
    var viewCount = getVideoViews(videoId)
 
    // 获取当前表格的最后一行
    var lastRow = sheet.getLastRow()
 
    // 在最后一行之后插入新行,并填写时间和播放量
    sheet.insertRowAfter(lastRow)
    sheet.getRange(lastRow + 1, 3).setValue(currentTime) // 设置时间
    sheet.getRange(lastRow + 1, 4).setValue(viewCount) // 设置播放量
  } catch (error) {
    // 错误处理
    Logger.log("Error processing video " + videoId + ": " + error.toString())
 
    // 如果发生错误,记录错误信息
    var lastRow = sheet.getLastRow()
    sheet.insertRowAfter(lastRow)
    sheet.getRange(lastRow + 1, 3).setValue(currentTime) // 设置时间
    sheet.getRange(lastRow + 1, 4).setValue("Error: " + error.toString()) // 设置错误信息
  }
}

CleanShot 2024-12-15 at 21.41.33@2x.png

然后如果要验证是否正确,选择 recordYouTubeViewCount,然后点击 run 按钮。不出意外的话会在 sheet 中新增一行记录。

CleanShot 2024-12-15 at 21.42.08@2x.png

第四步,也是最后一步,我们要设置一下 trigger,来实现定时地查询播放量并且写入到 sheet 中。点击左边侧边栏的 trigger 菜单,再点击右下角的 add trigger.

CleanShot 2024-12-15 at 21.47.04@2x.png

设置如下,配置完成后点击 save 按钮。

image.png

点击完之后,可能出现一个验证弹窗,需要你选择自己的 google 账号,然后点击 go to xxx project (unsave), 点击 allow 进行授权。(这里没有保留截图,但或许大概应该能直接看懂?)

然后我们就完成了所有的配置,等待一小时后看是否运行正常即可。

参考和鸣谢

这个脚本是在 批量统计YouTube视频播放量方法 - 杨哥的出海营销笔记 的脚本的基础上改的,感谢作者提供了很详细的教程和代码。

同时也要感谢 google 提供的 api.