【问题标题】:trouble with "statistics" property when using with YouTube.Search.list in Google App Script在 Google App Script 中与 YouTube.Search.list 一起使用时出现“统计”属性的问题
【发布时间】:2018-12-29 04:22:02
【问题描述】:

我似乎无法让这个脚本用于“统计”:

function searchByKeyword2() {
  var results = YouTube.Search.list('statistics', {q: 'dogs', maxResults: 5, });
  for(var i in results.items) {
    var item = results.items[i];
    Logger.log(item);
  }
}

我可以使用 'id'、'sn-p' 或 'id, sn-p',但我无法让它与 'statistics' 一起使用。我一直在寻找答案几个小时,但我没有找到任何东西。有什么线索吗?

【问题讨论】:

  • 这是因为statistics 不是YouTube.Search Resource 的有效参数,而idsnippet 是。也许您打算使用YouTube.Videos.list
  • 我现在明白了。那么解决方案是使用 YouTube.Search.list 收集所有 id 值,然后将它们放入 YouTube.Videos.list 中吗?

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


【解决方案1】:

根据 API 文档,YouTube.Search 包括 Videos、Channels 和 Playlists 的结果。并非所有这些资源都有统计节点,因此YouTube.Search 端点不允许查询statistics 节点 - 仅idsnippet

对于跟踪statistics 的集合,例如Videos,您可以直接查询它们以访问statistics。由于Videos.list 不搜索,您需要先搜索然后提供相关视频ID。请注意,您可以更改搜索顺序(以及许多其他搜索属性) - API 参考中提供了完整的详细信息 - 但默认排序为“相关性”。

举个例子:

function getVideoStatistics(videoIds) {
  const options = {
    id: videoIds.join(","),
    fields: "nextPageToken,items(id,statistics)"
  };

  const results = [];
  do {
    var search = YouTube.Videos.list('statistics', options);
    if (search.items && search.items.length)
      Array.prototype.push.apply(results, search.items);
    options.pageToken = search.nextPageToken;
  } while (options.pageToken);

  return results;
}

function getVideosFromQuery(query, maxResults) {
  const options = {
    q: query,
    maxResults: maxResults,
    type: 'video',
    fields: "nextPageToken,pageInfo/totalResults,items(id/videoId,snippet(title,channelTitle))"
  };
  const results = [];
  do {
    var search = YouTube.Search.list('snippet', options);
    if (search.items && search.items.length)
      Array.prototype.push.apply(results, search.items);
    options.pageToken = search.nextPageToken;
  } while (options.pageToken && results.length < search.pageInfo.totalResults && results.length < maxResults);

  return results;
}

function foo() {
  var someQuery = "something";
  var searchResults = getVideosFromQuery(someQuery, 50);
  var ids = searchResults.map(function (videoSearchResult) {
    return videoSearchResult.id.videoId;
  });
  var stats = getVideoStatistics(ids);
  console.log({message:"query video statistics", searchResults: searchResults, statistics: stats});
}

【讨论】:

  • 感谢您的帮助。我会尽快解决这个问题。
  • @gg-edu 啊,channelTitle 在 sn-p 下 - 需要使用 snippet(title,channelTitle)snippet/title,snippet/channelTitle。好收获!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多