【问题标题】:How to get different results in each execution in YouTube API using pagination?如何使用分页在 YouTube API 中的每次执行中获得不同的结果?
【发布时间】:2019-07-16 04:44:02
【问题描述】:

我正在尝试通过在 YouTube 数据 API 中执行搜索功能来获得新结果。我需要的是在每次执行中获取新结果作为输出,即不重复结果。我知道分页会这样做,但我不知道如何避免在每次执行中重复结果。

我将 Google Apps 脚本用于服务器端 cron 作业,因此无论何时执行,它都需要缓存结果或避免发布已发布的结果。

这是我的两种类型的代码,一种是从我之前的一个问题中提取的,但这并不能完全解决我的问题,所以我请求任何人解决这些问题。 函数 searchByKeyword(nextPageToken) { var 结果 = YouTube.Search.list('id,sn-p', { 问:“狗”, 最大结果:1, pageToken:下一个PageToken }); Logger.log(结果) var item = results.items; var res = searchByKeyword( results.nextPageToken ); 记录器.log(res) // for (var i = 0; i

   // var nextPageToken = '';
    while (nextPageToken != null) {
    var results
    Logger.log('[%s] Title: %s', item.id.videoId, item.snippet.title);
  }
}}

上面的代码打印的结果比我需要在每次执行中传递的结果要多。

/**
 * @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;
}

此代码打印结果,但每次执行的结果相同。

【问题讨论】:

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


    【解决方案1】:

    这是分页脚本的脚本。我们需要包含一个数据库,因此请选择工作表作为您的数据库,该数据库由 CodeRevolution 的 Kisded Szabi 编码。

    function doGet() {
      return HtmlService.createHtmlOutputFromFile('v5')
            .setSandboxMode(HtmlService.SandboxMode.IFRAME);
    }
    
    
    
    
    
    function userActionRun(myForm) {
      
      var ss = SpreadsheetApp.openById(''); 
      
      
      
      var CLIENT_ID = ""
    var CLIENT_SECRET = ""  
    
      
      
        var sheet = ss.getSheetByName('Sheet1');
    
      var data = [];
      var nextPageData = sheet.getRange(sheet.getLastRow(), 1, 1,3).getValues();
      if(nextPageData[0][0] !== undefined)
      {
        var res = searchByKeyword_(values1, nextPageData[0][0]);
      }
      else 
      {
        var res = searchByKeyword_(values1);
      }
      
      for(var i in res.items)
      {
        var item = res.items[i];
        getFullDescr_(item.id.videoId);
      }
      if(typeof res.nextPageToken !== 'undefined')
      {
        sheet.getRange(sheet.getLastRow(), 1, 1,3).setValues([[res.nextPageToken, '1', '2']]);
      }
      data = data.concat(res.items);
      Logger.log("We got this after initial call: " + data.length);
      var maximumItems = 1;
      while (typeof res.nextPageToken !== 'undefined' && res.items.length) {
        sheet.getRange(sheet.getLastRow(), 1, 1,3).setValues([[res.nextPageToken, '1', '2']]);  
        if(data.length >= maximumItems)
        {
          Logger.log("Max number reached, bye! " + data.length);
          break;
        }
        res = searchByKeyword_(values1, res.nextPageToken);
        for(var i in res.items)
        {
          var item = res.items[i];
          getFullDescr_(item.id.videoId);
        }
        data = data.concat(res.items);
      }
      for (i = 0; i < data.length; i++) { 
        Logger.log("Our result: " + data[i].snippet.title);
      }
      }
    
    function getFullDescr_(videoId)
    {
      var results = YouTube.Videos.list("id,snippet",{'id': videoId }); // here passing that id for a full description //
      for(var i in results.items) {
        var item = results.items[i];
        Logger.log('%s Description: %s',item.snippet.title,  item.snippet.description);
        }
        
     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;
    
    }   
        
        
        
        
        
        

    【讨论】:

      猜你喜欢
      • 2019-07-09
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2020-06-25
      • 1970-01-01
      • 2021-08-02
      相关资源
      最近更新 更多