如何获得超过50个由maxResults设置的结果?

时间:2019-07-02 09:59:12

标签: google-apps-script youtube-api

此源代码运行良好。 maxResults的数量不能超过50。

对youtube.search.list的API调用失败,并出现以下错误:无效值“ 150”。值必须在以下范围内:[0,50](第32行,文件“代码”)

如何获得更多结果?

function Search_YouTube_videos_ByChannel() {
  var results = YouTube.Search.list('id,snippet', {
    channelId:'UCZFUrFoqvqlN8seaAeEwjlw',
    maxResults: 50
  });
    var title = "";
    var id = "";
    var last_row = 0;
    var spread_active = SpreadsheetApp.getActiveSpreadsheet();
    var sheet1 = spread_active.getSheetByName("Sheet1");
    for (var i = 0; i < results.items.length; i++) {
        var item = results.items[i];
        title = item.snippet.title;
        id = item.id.videoId;
        last_row = sheet1.getLastRow() + 1;
        sheet1.getRange(last_row, 1).setValue(title);
        sheet1.getRange(last_row, 2).setValue(id);
        last_row++;
    }
}

1 个答案:

答案 0 :(得分:2)

  • 您要从channelId中检索所有项目。
  • 您想要将检索到的项目中的titlevideoId放入“ Sheet1”的“ A”和“ B”列。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

修改点:

  • 当您要检索50个以上的项目时,请使用nextPageToken
  • 在脚本中,setValue()用于for循环。在这种情况下,处理成本将变高。因此,您可以使用setValues()

当以上几点反映到您的脚本中时,它如下所示。

修改后的脚本:

使用此功能时,请在高级Google服务中启用YouTube数据API。

function Search_YouTube_videos_ByChannel() {
  var items = [];
  var pageToken = "";
  do {
    var temp = YouTube.Search.list('id,snippet', {
      channelId:'UCZFUrFoqvqlN8seaAeEwjlw',
      maxResults: 50,
      pageToken: pageToken,
    });
    Array.prototype.push.apply(items, temp.items);
    pageToken = temp.nextPageToken || "";
  } while (pageToken);
  var spread_active = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = spread_active.getSheetByName("Sheet1");
  var values = items.map(function(e) {return [e.snippet.title, e.id.videoId]});
  sheet1.getRange(sheet1.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
}

注意:

  • 运行此脚本时,将检索410个项目。

参考文献:

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