【问题标题】:Need to populate a channel's videos onto Google Sheets using YouTube Data API v3需要使用 YouTube Data API v3 将频道的视频填充到 Google 表格中
【发布时间】:2026-02-06 03:50:02
【问题描述】:

我对所有这些都感到不知所措,因为我对使用 API 完全陌生。我想用频道的视频填充 Google 表格,以便在向列表中添加(或替换最旧的)新视频时,我可以随时更新其统计信息。我尝试按照视频指南进行操作,感觉我已经接近了,但我遇到了麻烦。

注意:我在下面使用的 playlistID 用于 Google Developers 频道​​。

我观看的视频显示了一个示例,其中被提取的视频是特定关键字的热门搜索结果。相反,我想从特定频道中提取最后 50 个视频。

原来的代码是这样的:

var sr = YouTube.Search.list("snippet,id", { q: "guitars", maxResults: 50});

我把它改成了:

var sr = YouTube.PlaylistItems.list("snippet,id", { playlistId: "UU_x5XG1OV2P6uZZ5FSM9Ttw", maxResults: 50});

问题似乎出在这一行:

var srVidsOnly = sr.items.filter(function(res){ return res.resourceId.kind === "youtube#playlistItems"});

我尝试通过this,经过多次反复试验,放弃了。我完全不确定这条线应该是什么样子。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var sr = YouTube.PlaylistItems.list("snippet,id", { playlistId: "UU_x5XG1OV2P6uZZ5FSM9Ttw", maxResults: 50});

  var srVidsOnly = sr.items.filter(function(res){ return res.resourceId.kind === "youtube#playlistItems"});
  var modRes = srVidsOnly.map(function(v){ return [v.resourceId.videoId,v.snippet.title]; });

  var ids = modRes.map(function(res){return res[0]; }).join(",");
  var stats = YouTube.Videos.list("statistics", {id: ids});
  var vidStats = stats.items.map(function(res){return [res.statistics.viewCount, res.statistics.likeCount]; });
  activeSheet.getRange(2, 1, modRes.length, modRes[0].length).setValues(modRes);
  activeSheet.getRange(2, 3, vidStats.length, vidStats[0].length).setValues(vidStats);
}

给出的错误是:

TypeError: Cannot read property "kind" from undefined. (line 6, file "Code")

从第五行删除 kind,像这样:

var srVidsOnly = sr.items.filter(function(res){ return res.resourceId === "youtube#playlistItems"});

给出错误:

TypeError: Cannot read property "length" from undefined. (line 12, file "Code")

按照最初的视频指南进行操作(搜索结果中的视频)。表格的格式与我想要的一样。我只需要来自特定频道的视频,而不是搜索结果。

谢谢

【问题讨论】:

  • 请扩展您的代码 sn-p 以查看 srVidsOnly 的使用位置。
  • 谢谢你,这里有一个错误。我编辑了我的帖子以反映这些变化。

标签: google-apps-script google-sheets youtube-api youtube-data-api


【解决方案1】:

这个修改怎么样?

修改点:

  • 请进行如下修改。
    • res.resourceId.kindres.kind
    • youtube#playlistItemsyoutube#playlistItem
    • v.resourceId.videoIdv.snippet.resourceId.videoId

所以当上述修改反映到你的脚本时,它变成如下。

修改脚本:

请在您的脚本中修改myFunction(),如下所示。

从:
var srVidsOnly = sr.items.filter(function(res){ return res.resourceId.kind === "youtube#playlistItems"});
var modRes = srVidsOnly.map(function(v){ return [v.resourceId.videoId,v.snippet.title]; });
到:
var srVidsOnly = sr.items.filter(function(res){ return res.kind === "youtube#playlistItem"});
var modRes = srVidsOnly.map(function(v){ return [v.snippet.resourceId.videoId,v.snippet.title]});

注意:

  • 根据您的脚本,我了解到您正在使用 Google Apps 脚本和高级 Google 服务。

参考资料:

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

【讨论】: