Как получить разные результаты в каждом исполнении в YouTube API, используя нумерацию страниц? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь получить новые результаты с помощью функции поиска в API данных YouTube.Что мне нужно, так это получать новые результаты в виде выходных данных при каждом выполнении, т.е. без дублирования результатов.Я знаю, что это сделает разбиение на страницы, но я не знаю, как избежать дублирования результатов при каждом выполнении.

Я использую скрипт Google Apps для сценариев cron на стороне сервера, поэтому при каждом выполнении требуетсячтобы кэшировать результаты или не публиковать результаты, уже опубликованные.

Это мои два типа кода, один взят из одного из моих предыдущих вопросов, но это не решает мою проблему полностью, поэтому я прошу кого-нибудь решитьПроблемы.function searchByKeyword (nextPageToken) {var results = YouTube.Search.list ('id, snippet', {q: 'dogs', maxResults: 1, pageToken: nextPageToken});Logger.log (результаты) var item = results.items;var res = searchByKeyword (results.nextPageToken);Logger.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;
}

Этот код печатает результаты, но в каждом выполнении такие же результаты.

1 Ответ

0 голосов
/ 11 марта 2019

Вот сценарий для сценария разбивки на страницы. Нам нужно включить БД, поэтому выберите лист в качестве вашей БД, закодированной Kisded Szabi из CodeRevolution.

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;

}   
    
    
    
    
    
    
...