Google Sheets运行YouTube抓取脚本报错:范围行数至少为1,求解决
错误原因分析
- API参数拼写错误:YouTube Data API 要求分页参数为驼峰格式
maxResults,原代码中拼写为maxresults,参数不生效导致搜索返回结果为空,results数组长度为0。 - 视频ID提取逻辑错误:
YouTube.Search.list返回的视频唯一标识存储在item.id.videoId字段,原代码错误提取了item.snippet.title(视频标题)作为ID传入后续统计接口,导致YouTube.Videos.list无匹配结果,videostats数组长度为0。 - 缺少空值校验:当结果数组为空时,直接向
getRange传入长度为0的行数参数,不符合Google Sheets API要求,触发对应报错。
修正后可用代码
function YouTubeScraper() { var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var activeSheet = spreadSheet.getActiveSheet(); // 修正参数拼写为maxResults,增加type:video过滤非视频结果 var search = YouTube.Search.list('id, snippet', {q:"coding", maxResults: 50, type: "video"}); var results = search.items.map((item) => [item.snippet.title]); // 修正ID提取逻辑,取视频唯一标识videoId var ids = search.items.map((item) => item.id.videoId).join(","); var stats = YouTube.Videos.list('statistics', {id: ids}); var videostats = stats.items.map((item) => [item.statistics.viewCount]); // 增加空值判断,仅当数组有内容时写入表格 if (results.length > 0) { activeSheet.getRange(2, 1, results.length, results[0].length).setValues(results); } if (videostats.length > 0) { activeSheet.getRange(2, 3, videostats.length, 1).setValues(videostats); } }
额外注意事项
- 运行前请确保你已经在Google Apps Script编辑器的「服务」设置中添加了YouTube Data API v3服务
- 首次运行需要按照提示完成账号授权,允许脚本访问YouTube数据和Google表格权限
- 若搜索关键词无对应返回结果,空值判断会自动跳过写入操作,不会触发报错
内容的提问来源于stack exchange,提问作者AidenLIVE
相关产品推荐
相关产品推荐

