ReferenceError:未定义 YouTube/将 YouTube 评论插入电子表格
Posted
技术标签:
【中文标题】ReferenceError:未定义 YouTube/将 YouTube 评论插入电子表格【英文标题】:ReferenceError: YouTube is not defined / insert YouTube comments to a Spreadsheet 【发布时间】:2021-03-09 23:59:51 【问题描述】:我正在尝试将 YouTube cmets 插入电子表格。
我想从中获取 cmets 的 YouTube 视频是由我在同一个 Google 帐户上创建的。 YouTube 数据 API v3 已启用。当我运行该函数时,出现错误:
ReferenceError: YouTube is not defined (line 9, file "Code")
,
但这对我来说似乎很好。我不知道第 9 行出了什么问题。
这是完整的代码:
function getComments()
var ss = SpreadsheetApp.getActiveSpreadsheet();
var video_list = ['YouTube_ID'];
var PageToken = '';
for (var i = 0; i < video_list.length; i++)
var video_id = video_list[i];
var video = YouTube.Videos.list('id, snippet, statistics', id: video_id,);
if (i == 0)
var sh = ss.getActiveSheet();
else
var sh = ss.insertSheet();
sh.setName(video.items[0].snippet.title);
var row = 2;
var col = 1;
sh.getRange(1, 1).setValue("name");
sh.getRange(1, 2).setValue("date");
sh.getRange(1, 3).setValue("comment");
while (true)
var comment_list = YouTube.CommentThreads.list('id, replies, snippet',
videoId: video_id,
pageToken: PageToken,
maxResults: 500,
);
for (var j = 0; j < comment_list.items.length; j++)
sh.getRange(row, col).setValue(comment_list.items[j].snippet.topLevelComment.snippet.authorDisplayName);
sh.getRange(row, col + 1).setValue(comment_list.items[j].snippet.topLevelComment.snippet.publishedAt);
sh.getRange(row, col + 2).setValue(comment_list.items[j].snippet.topLevelComment.snippet.textDisplay);
row += 1;
if (typeof comment_list.items[j].replies !== "undefined")
for (var k = 0; k < comment_list.items[j].replies.comments.length; k++)
sh.getRange(row, col).setValue(comment_list.items[j].replies.comments[k].snippet.authorDisplayName);
sh.getRange(row, col + 1).setValue(comment_list.items[j].replies.comments[k].snippet.publishedAt);
sh.getRange(row, col + 2).setValue(comment_list.items[j].replies.comments[k].snippet.textDisplay);
row += 1;
PageToken = comment_list.nextPageToken
if (typeof PageToken == "undefined")
break
错误信息如下:
【问题讨论】:
从您的脚本和错误消息中,您能否确认 YouTube Data API v3 是否已在 Google 高级服务中再次启用? Ref如果还没有启用,请启用它并再次测试您的脚本。 错误刚刚解决,函数运行没有任何问题。我在this page 上启用了 YouTube Data API v3,但这是错误的。非常感谢您的帮助^^ 感谢您的回复。从您的回复中,我可以理解您的错误信息可以被删除。我很高兴。作为一个建议,我建议使用修改后的脚本来降低脚本的处理成本作为答案。你能确认一下吗?如果这对您的情况有用,我很高兴。 【参考方案1】:修改点:
根据您的脚本和错误消息,我认为您的错误消息YouTube is not defined
的原因是由于在高级 Google 服务中禁用了 YouTube Data API v3。关于这个,您能否再次确认一下是否已经在 Google 高级服务中启用了 YouTube Data API v3? Ref如果还没有启用,请启用它并再次测试您的脚本。
而且,当我看到你的脚本时,我认为脚本的处理成本会很高。因为循环中使用了setValue
。 Ref为了减少你的脚本的处理成本,我建议如下流程。
-
检索所有值并将它们放入数组中。
将数组放入电子表格。
“视频:列表”方法的maxResults
似乎是50。
当以上几点反映到你的脚本中时,它变成如下。
修改脚本:
function getComments()
var ss = SpreadsheetApp.getActiveSpreadsheet();
var video_list = ['YouTube_ID'];
var PageToken = '';
var values = []; // Added
for (var i = 0; i < video_list.length; i++)
var video_id = video_list[i];
var video = YouTube.Videos.list('id, snippet, statistics', id: video_id);
if (i == 0)
var sh = ss.getActiveSheet();
else
var sh = ss.insertSheet();
sh.setName(video.items[0].snippet.title);
values.push(["name", "date", "comment"]); // Added
while (true)
var comment_list = YouTube.CommentThreads.list('id, replies, snippet', videoId: video_id, pageToken: PageToken, maxResults: 50);
for (var j = 0; j < comment_list.items.length; j++)
var snippet = comment_list.items[j].snippet.topLevelComment.snippet;
values.push([snippet.authorDisplayName, snippet.publishedAt, snippet.textDisplay]); // Added
var replies = comment_list.items[j].replies;
if (replies)
for (var k = 0; k < replies.comments.length; k++)
var comments = replies.comments[k].snippet;
values.push([comments.authorDisplayName, comments.publishedAt, comments.textDisplay]); // Added
PageToken = comment_list.nextPageToken;
if (typeof PageToken == "undefined")
break
sh.getRange(1, 1, values.length, values[0].length).setValues(values); // Added
注意:
在此脚本中,当存在相同的工作表名称时,会发生错误。所以请注意这一点。参考资料:
Videos: listgoogle-apps-script
我认为这些链接可能有用。
【讨论】:
以上是关于ReferenceError:未定义 YouTube/将 YouTube 评论插入电子表格的主要内容,如果未能解决你的问题,请参考以下文章
打字稿 - 未捕获的 ReferenceError:未定义导出
JavaScript Uncaught ReferenceError: jQuery is not defined;未捕获的 ReferenceError:$ 未定义 [重复]