首页 > 解决方案 > 来自 YouTube 数据 API v3 的意外 pageInfo

问题描述

我尝试使用 YouTube Data API v3 ( https://developers.google.com/youtube/v3/docs/search/list ) 搜索视频。
我成功地获得了一些信息,但我发现结果pageInfo不是我所期望的。

这是我得到的查询和回复:

https://www.googleapis.com/youtube/v3/search?part=id&channelId=UC5fslQUCCo3OE1EaA1n5ZmQ&key=...&publishedAfter=2019-01-15T08:09:38Z&publishedBefore=2019-01-15T10:09:38Z&order=date .

{
  "kind": "youtube#searchListResponse",
  "etag": "iLvO2LgGDksqADNU-_xPwG4QMCU",
  "nextPageToken": "CAUQAA",
  "regionCode": "JP",
  "pageInfo": {
    "totalResults": 49,
    "resultsPerPage": 5
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "Adtll-9lbQDiKGJEkBb2IEjPfjw",
      "id": {
        "kind": "youtube#video",
        "videoId": "d4Z7MZo3-Ac"
      }
    }
  ]
}

我指定了日期字符串publishAfterpublishBefore以便结果仅包含单个视频信息。
我猜两者pageInfo.totalResult都是pageInfo.resultPerPage1。
与我的预期相反,pageInfo.totalResult是 49 和pageInfo.resultsPerPage5。

描述pageInfo什么?我的理解不正确吗?

标签: youtube-data-api

解决方案


以下是您的两个问题的答案:

1. 为什么pageInfo.resultsPerPage5

该属性的规范如下:

pageInfo.resultsPerPage(整数)
API 响应中包含的结果数。

可以将本规范理解为(我改写上面的文字):从 API 获得的结果集中的项目数,即 JSON 数组的元素数items

不幸的是,这与现实不符。以我的经验,pageInfo.resultsPerPage只是请求参数的值maxResults

maxResults(无符号整数)
maxResults参数指定结果集中应返回的最大项目数。可接受的值为0to 50(含)。默认值为5

由于您上面的API调用URL没有指定maxResults,所以该参数被视为具有默认值;因此pageInfo.resultsPerPage变为 5。

再说一句:这个属性的官方规范确实具有误导性;此问题很可能会作为文档错误报告给 Google(通过其自己的问题跟踪器站点)。

2. 为什么pageInfo.totalResults49和不是1

该属性的规范如下(以下重点是我的):

pageInfo.totalResults(整数)
结果集中的结果总数。请注意,该值是近似值,可能不代表精确值。此外,最大值为 1,000,000。

您不应使用此值来创建分页链接。相反,使用nextPageTokenprevPageToken属性值来确定是否显示分页链接。

根据本说明书,pageInfo.totalResults不应将其视为用户可以依赖的精确量。谷歌的工作人员也正式确认了这一特性。

此外,如果对您的 URL 进行一些试验,消除两个日期请求参数publishedAfterpublishedBefore,您会发现 的值pageInfo.totalResults变得不稳定:连续多次重复相同的 API 调用(彼此之间只有几秒钟的时间),我从来没有从 API 中得到相同的值,但是,交替13741375.


推荐阅读