youtube-data-api - 来自 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"
}
}
]
}
我指定了日期字符串publishAfter
,publishBefore
以便结果仅包含单个视频信息。
我猜两者pageInfo.totalResult
都是pageInfo.resultPerPage
1。
与我的预期相反,pageInfo.totalResult
是 49 和pageInfo.resultsPerPage
5。
描述pageInfo
什么?我的理解不正确吗?
解决方案
以下是您的两个问题的答案:
1. 为什么pageInfo.resultsPerPage
是5
?
该属性的规范如下:
pageInfo.resultsPerPage
(整数)
API 响应中包含的结果数。
可以将本规范理解为(我改写上面的文字):从 API 获得的结果集中的项目数,即 JSON 数组的元素数items
。
不幸的是,这与现实不符。以我的经验,pageInfo.resultsPerPage
只是请求参数的值maxResults
:
maxResults
(无符号整数)
该maxResults
参数指定结果集中应返回的最大项目数。可接受的值为0
to50
(含)。默认值为5
。
由于您上面的API调用URL没有指定maxResults
,所以该参数被视为具有默认值;因此pageInfo.resultsPerPage
变为 5。
再说一句:这个属性的官方规范确实具有误导性;此问题很可能会作为文档错误报告给 Google(通过其自己的问题跟踪器站点)。
2. 为什么pageInfo.totalResults
是49
和不是1
?
该属性的规范如下(以下重点是我的):
pageInfo.totalResults
(整数)
结果集中的结果总数。请注意,该值是近似值,可能不代表精确值。此外,最大值为 1,000,000。您不应使用此值来创建分页链接。相反,使用
nextPageToken
和prevPageToken
属性值来确定是否显示分页链接。
根据本说明书,pageInfo.totalResults
不应将其视为用户可以依赖的精确量。谷歌的工作人员也正式确认了这一特性。
此外,如果对您的 URL 进行一些试验,消除两个日期请求参数publishedAfter
和publishedBefore
,您会发现 的值pageInfo.totalResults
变得不稳定:连续多次重复相同的 API 调用(彼此之间只有几秒钟的时间),我从来没有从 API 中得到相同的值,但是,交替1374
和1375
.
推荐阅读
- google-apps-script - 无法将数组中的数据写入选定范围
- c# - 如何修改 C# 中特定路径的 IIS FTP 授权规则?
- excel - 如何复制和粘贴单元格,然后使用 excel VBA 以特定方式删除某些行?
- html - 如何使用 CSS 中另一个文件夹中的其他文件?
- c# - Open XML SDK 在我的 Excel 电子表格中读取连续整数而不是实际值
- r - 时间或内存使用情况能否说明循环中增长对象的危险?
- c# - Unity 中移动平台的奇怪输出
- javascript - Vue 使用来自 Vue() 的模板和脚本定义组件
- html - 使用变量的 ADA 可访问性错误空标题
- rest - 在 REST 中使用“createModel”是一个好习惯吗?