Estoy intentando insertar comentarios de YouTube en una hoja de cálculo.
El video de YouTube del que quiero obtener comentarios es creado por mí, en la misma cuenta de Google. La API de datos de YouTube v3 está habilitada. Cuando ejecuto la función, ocurre un error:
ReferenceError: YouTube is not defined (line 9, file "Code")
,
pero me parece bien. No tengo idea de lo que está mal en la línea 9.
Aquí está el código completo:
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
}
}
}
}
El mensaje de error se parece a:
De su secuencia de comandos y mensaje de error, pensé que el motivo de su mensaje de error YouTube is not defined
se debe a la desactivación de la API de datos de YouTube v3 en los servicios avanzados de Google. Acerca de esto, ¿puede confirmar si la API de datos de YouTube v3 ya se habilitó en los servicios avanzados de Google nuevamente? Ref. Si aún no se ha habilitado, habilítelo y pruebe su script nuevamente.
Y, cuando vi tu guión, pensé que el costo del proceso del guión sería alto. Porque setValue
se usa en los bucles. Ref Para reducir el costo de proceso de su script, me gustaría sugerir el siguiente flujo.
Parece que maxResults
el método de "Videos: lista" es 50.
Cuando los puntos anteriores se reflejan en su secuencia de comandos, se convierte en lo siguiente.
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
}
}
google-apps-script
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras