【问题标题】:How to get new results on each execution of Search function in YouTube data API如何在 YouTube 数据 API 中每次执行搜索功能时获得新结果
【发布时间】:2019-07-09 05:07:16
【问题描述】:

我正在使用 Google Apps 脚本中的 YouTube 脚本 我正在使用搜索功能使用关键字获取结果 但是在每次执行时,我都会得到与输出相同的结果,我需要新的结果,否则结果不应重复。这是我当前的脚本:

(获取搜索查询后,需要使用此代码段 YouTube.Videos.list 获取完整描述)

/**getting Videos from Youtube with IDs**/

function searchByKeyword(){

  var results = YouTube.Search.list("id,snippet", {q : "trailers", maxResults: "10",type: "video"});
    Logger.log(' search results: %s', results.items);

  for(var i in results.items) {
    var item = results.items[i];
    Logger.log("[%s] Title: %s", item.id.videoId, item.snippet.title);
  }
  var item = results.items[i];
 //videosListById(item2.id.videoId)

  var results = YouTube.Videos.list("id,snippet",{'id': item.id.videoId });
  for(var i in results.items) {
    var item = results.items[i];
    Logger.log('%s Description: %s', item.snippet.title, item.snippet.description);


}

  for(var i in results.item) {
    var item = results.item[i];

  }

【问题讨论】:

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


    【解决方案1】:

    你必须使用pagination

    下面的代码演示了如何在递归中使用分页。

    • 最大计数设置为 10 项
    • 分页大小为 1

    如果需要,可以更改。

    /**
     * @file getting Videos from Youtube with IDs
     */
    
    /* exported userActionRun */
    
    /**
     * User action. Runs the snippet
     */
    function userActionRun() {
      var data = [];
      var res = searchByKeyword_('trailers');
      while (res.items.length && data.length < 10) {
        data = data.concat(res.items);
        res = searchByKeyword_('trailers', res.nextPageToken);
      }
      Logger.log(data.length);
      Logger.log(
        '\n%s',
        data
          .map(function(item, i) {
            return Utilities.formatString('%s. %s', i + 1, item.snippet.title);
          })
          .join('\n')
      );
    }
    
    /**
     * Returns YouTube search result
     * @param {string} keyword
     * @param {string} nextPageToken
     * @returns {object}
     */
    function searchByKeyword_(keyword, nextPageToken) {
      var q = { q: keyword, maxResults: '1', type: 'video' };
      if (nextPageToken) q.pageToken = nextPageToken;
    
      var results = YouTube.Search.list('id,snippet', q);
      return results;
    }
    

    【讨论】:

    • 你好@oshliaer 我得到了 10 个结果,但在每次执行中都和以前一样,我在我的脚本中得到了它,并且它通过 2 或 3 次搜索耗尽了 api 限制。那么是否可以将结果存储在脚本本身中并通过每次执行 .1 1 或某个循环传递它。就像在第一次执行时得到 50 个结果并一个一个地取结果。
    • 我们需要一个数据库来存储页面令牌更新的答案stackoverflow.com/questions/54821144/…
    猜你喜欢
    • 1970-01-01
    • 2019-07-16
    • 2018-02-13
    • 2010-11-16
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2022-11-12
    • 2014-05-17
    相关资源
    最近更新 更多