You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YouTube API获取视频统计数据时遇Google Sheets脚本报错求助

YouTube API 写入Google Sheets统计数据报错修复方案

问题重现

运行脚本时触发错误:

Exception: The number of rows in the range must be at least 1.

移除最后一行写入统计数据的代码后,脚本可正常写入搜索结果(标题、频道ID、发布时间),但无法写入统计数据,调整范围参数也无效。原代码如下:

function YoutubeScraper() {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet()

  var search = YouTube.Search.list ("snippet, id", {q: "searching youtube", maxResults: 30})

  var results = search.items.map((item) => [item.snippet.title, item.snippet.channelId, item.snippet.publishedAt])

  var ids = results.map ((id) => id[0]).join(",")

  var stats = YouTube.Videos.list ("statistics", {id: ids})

  var videoStats = stats.items.map((item) => [item.statistics.viewCount, item.statistics.likeCount, item.statistics.commentCount])
  
  sheet.getRange(2,1, results.length, results[0].length).setValues(results)
  sheet.getRange(2,3, videoStats.length, results[0].length).setValues(videoStats)
}

错误原因

  1. 视频ID提取逻辑完全错误:原代码中results.map((id) => id[0])取的是视频标题而非视频ID,YouTube API无法通过标题返回统计数据,导致stats.items为空数组,videoStats也为空,调用setValues时因行数为0触发报错。
  2. 写入范围冲突:原代码从第3列开始写入统计数据,会覆盖之前写入的发布时间(第三列),逻辑混乱。
  3. 未过滤非视频结果:Search API可能返回频道、播放列表等非视频内容,这些内容没有videoId,会导致ID列表无效。

修复方案

核心修正点

  • 从Search结果中正确提取item.id.videoId作为视频ID
  • 指定Search API只返回视频类型内容
  • 调整统计数据的写入起始列,避免覆盖原有数据
  • 处理统计字段缺失的情况(如隐藏点赞数的视频)
  • 增加空结果判断,提前终止避免报错

修复后完整代码

function YoutubeScraper() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // 仅搜索视频类型内容,避免混入频道/播放列表
  var search = YouTube.Search.list("snippet, id", {
    q: "searching youtube",
    maxResults: 30,
    type: "video"
  });

  var results = [];
  var videoIds = [];

  // 遍历搜索结果,提取有效数据和视频ID
  search.items.forEach(item => {
    if (item.id.kind === "youtube#video") {
      results.push([
        item.snippet.title,
        item.snippet.channelId,
        item.snippet.publishedAt
      ]);
      videoIds.push(item.id.videoId);
    }
  });

  // 无有效视频时提示并终止
  if (videoIds.length === 0) {
    SpreadsheetApp.getUi().alert("未找到符合条件的视频");
    return;
  }

  // 请求视频统计数据
  var stats = YouTube.Videos.list("statistics", {
    id: videoIds.join(",")
  });

  // 提取统计数据,处理可能缺失的字段
  var videoStats = stats.items.map(item => [
    item.statistics.viewCount || 0,
    item.statistics.likeCount || 0,
    item.statistics.commentCount || 0
  ]);

  // 写入基础信息(第2行第1列开始)
  sheet.getRange(2, 1, results.length, results[0].length).setValues(results);
  // 写入统计数据(第2行第4列开始,不覆盖发布时间)
  sheet.getRange(2, 4, videoStats.length, videoStats[0].length).setValues(videoStats);
}

内容的提问来源于stack exchange,提问作者Danilo Reuben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:25:33