与Google App脚本中的YouTube.Search.list一起使用时,“统计信息”属性出现问题

时间:2018-07-20 20:01:15

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

我似乎无法使该脚本适用于“统计信息”:

C_Leaf -> ...

我可以使用'id','snippet'或'id,snippet',但是我无法使其与'statistics'一起使用。我一直在寻找答案几个小时,但没有发现任何东西。有任何线索吗?

1 个答案:

答案 0 :(得分:0)

根据API文档,YouTube.Search包含VideoChannelPlaylist的结果。并非所有这些资源都具有统计信息节点,因此YouTube.Search端点不允许查询statistics节点-仅查询idsnippet

对于跟踪statistics的集合(例如Video),您可以直接查询它们以访问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});
}