【问题标题】:Unexpected pageInfo from YouTube Data API v3来自 YouTube 数据 API v3 的意外 pageInfo
【发布时间】:2020-12-02 02:59:10
【问题描述】:

我尝试使用 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.totalResultpageInfo.resultPerPage 都是 1。
与我的预期相反,pageInfo.totalResult 是 49,pageInfo.resultsPerPage 是 5。

什么描述了pageInfo?我的理解有误吗?

【问题讨论】:

    标签: youtube-data-api


    【解决方案1】:

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

    1.为什么pageInfo.resultsPerPage5

    该属性的说明如下:

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

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

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

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

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

    还有一点:这个属性的官方规范确实具有误导性;这个问题很可能会作为文档错误报告给 Google(通过其own issue tracker site)。

    2。为什么pageInfo.totalResults49 而不是1

    这个属性的说明如下(以下重点是我的):

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

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

    根据本规范,pageInfo.totalResults 不应被视为用户可以依赖的精确数量。谷歌员工is also confirmed officially 的这种特殊性。

    此外,如果对您的 URL 进行一些试验,消除两个日期请求参数 publishedAfterpublishedBefore,您会看到 pageInfo.totalResults 的值变得不稳定:在一个行(彼此之间只有几秒钟的距离),我从来没有从 API 中得到相同的值,而是交替使用 13741375

    【讨论】:

    • 我明白了。第一个问题的答案和我之前猜到的差不多。我对第二个感到惊讶。简而言之, pageInfo.totalResult 完全没用,对吧?令人惊讶的是,本文档的日文版并未提及该部分。这就是为什么我没有注意到这个缺陷的原因。感谢您的回复!
    • @Akumachan:在语义不变之前,pageInfo.totalResults确实没用;我自己在使用 API 时从不考虑这个属性。
    • @Akumachan:那么请通过其own issue tracker site 向 Google 报告日本文档 w.r.t. Search.list API 端点的 pageInfo.totalResults 属性是伪造的。他们应该解决这个问题,这样你的同胞就不会像你一样失败。
    • 谢谢,我报告了这个here
    • @Akumachan:感谢您的报告!但是,我希望您在该报告中提及罪魁祸首 API 端点文档——Search.list 端点的文档——也提供指向该页面的链接。您也可以向 Google 工作人员(他们可能不懂日语)指出日语翻译缺少英文页面上的内容:请注意,该值是近似值,可能不代表精确值。这正是那个日本文档的错误。
    猜你喜欢
    • 2021-08-10
    • 2017-04-05
    • 2016-10-04
    • 2021-12-25
    • 1970-01-01
    • 2015-10-26
    • 2014-03-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多