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

使用Google Script调用YouTube.Videos.list获取超50条视频数据报错求助

解决YouTube API批量获取视频数据的参数错误与分页问题

你遇到的问题核心有两个:

  1. YouTube API的id参数限制:Videos.list接口的id参数一次最多接受50个视频ID,你把1000+个ID拼接成一个字符串传入,直接触发了参数无效的报错。
  2. 分页逻辑错误:原代码里的pageToken完全没用——分页是用来获取超过单页最大结果的数据,但你已经一次性传了所有ID,API根本无法分页返回,而且循环结束后只保留了最后一次请求的结果,前面的数据都丢失了。

修正后的代码

function getYoutubeVideoStatistics(){
  const activeSheet = SpreadsheetApp.getActiveSheet();
  const videoIDRange = activeSheet.getRange(4, 4, activeSheet.getLastRow() - 3);
  const videoIDRangeValues = videoIDRange.getValues();
  // 转换为一维数组并过滤空ID
  const videoIDArray = videoIDRangeValues.map(row => row[0]).filter(id => id);

  const allVideoStats = [];
  const batchSize = 50; // API单次允许的最大ID数量

  // 分批处理ID数组
  for (let i = 0; i < videoIDArray.length; i += batchSize) {
    const batchIDs = videoIDArray.slice(i, i + batchSize).join(",");
    try {
      // 调用API,批量ID请求不支持分页,无需pageToken
      const statsResponse = YouTube.Videos.list("contentDetails, statistics", { id: batchIDs });
      // 收集当前批次的视频数据
      allVideoStats.push(...statsResponse.items);
    } catch (e) {
      console.error(`处理第 ${Math.floor(i/batchSize)+1} 批次时出错: ${e.message}`);
    }
  }

  // 整理表格所需数据
  const vidDuration = allVideoStats.map(item => [item.contentDetails.duration]);
  const details = allVideoStats.map(item => [
    item.statistics.viewCount || 0,
    item.statistics.commentCount || 0,
    item.statistics.likeCount || 0
  ]);

  // 写入表格
  if (allVideoStats.length > 0) {
    activeSheet.getRange(4, 6, vidDuration.length, 1).setValues(vidDuration);
    activeSheet.getRange(4, 7, details.length, 3).setValues(details);
  } else {
    console.log("未获取到任何有效视频数据");
  }
}

关键修改说明

  • 分批请求:将ID数组按50个一组拆分,严格遵守API参数限制
  • 全量数据收集:用数组存储所有批次的返回结果,避免数据丢失
  • 错误容错:添加try-catch处理单批次请求失败的情况,保证脚本不会中途崩溃
  • 空值处理:过滤无效空ID,给缺失的统计字段设置默认值0,避免写入表格时出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:20:22