当我尝试获取统计信息时出现此错误:
'例外:范围内的行数必须至少为 1。'
没有最后一行,运行良好。
这是代码:
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)
}
我希望在我的活动工作表上获得一个包含查询结果及其统计信息的列表。可以得到结果,但不能得到统计数据。我尝试过更改统计数据的范围,但不起作用。没有最后一行运行良好,我在 Google 文档上的活动工作表已填充结果(标题、频道 ID 和发布时间),但无法使最后一行正常工作。
var ids = results.map ((id) => id[0]).join(",")
的值是item.snippet.title
的results
。这样,stats.items
就是[]
。我猜这就是你当前问题Exception: The number of rows in the range must be at least 1.
的原因。YouTube.Videos.list
。当这些要点反映在你的脚本中时,就会变成如下所示。
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]);
// --- I modified the below script.
if (search.items.length == 0) return;
var ids = search.items.map(({ id: { videoId } }) => videoId || "").filter(String);
var stats = YouTube.Videos.list(["statistics", "snippet"], { id: ids });
var obj = stats.items.reduce((o, { snippet, statistics }) => (o[snippet.channelId] = [statistics.viewCount || 0, statistics.likeCount || 0, statistics.commentCount || 0], o), {});
var values = results.map(e => [...e, ...(obj[e[1]] ? obj[e[1]] : Array(3).fill(null))]);
sheet.getRange(2, 1, values.length, values[0].length).setValues(values);
}