按发布日期获取 YouTube 频道上传的视频列表



我知道以前有人问过类似的问题,但不是这个确切的问题,所以请耐心等待......

我想重现频道上传的视频列表,因为它们出现在 YouTube 的网页上(分成页面并按发布日期排序)。

为此,我正在尝试从按发布日期(按 YouTube,而不是我的代码)排序的 YouTube 频道获取 VideoID 列表,因为播放列表中可能有 1000 个视频,并且 YouTube 限制为每个查询 50 个结果,当我只想向用户显示前 25 个条目时,可以加起来)。

最初,我使用的是以下 YouTube 数据 API v3 搜索查询:

https://www.googleapis.com/youtube/v3/search?key=[APIKey]&channelId=[ChannelID]&part=snippet,id&order=date&type=video&maxResults=25

但是,正如之前关于stackoverflow的一些帖子所提到的(YouTube API v3搜索不返回所有视频),此方法不能保证返回所有视频,实际上,结果中缺少一些视频,因此使用此查询存在问题。

然后我在一些帖子中看到了这个谷歌视频:
https://www.youtube.com/watch?v=RjUlmco7v2M

在视频中,解释说您必须首先获取频道的"上传"播放列表(在此查询中我还抓取频道的标题和缩略图),我使用:

https://www.googleapis.com/youtube/v3/channels?key=[APIKEY]&part=snippet,contentDetails&id=[ChannelID]

一旦我有了"上传"播放列表 ID,我就会查询:

https://www.googleapis.com/youtube/v3/playlistItems?key=[APIKey]&playlistId=[PlaylistID]&part=snippet,id&order=date&type=video&maxResults=25

但是,返回的条目不按发布日期排序,并且根据文档 (https://developers.google.com/youtube/v3/docs/playlistItems/list),没有与此查询关联的可选"order"参数。

考虑到所有这些问题,如何在不下载整个播放列表的情况下按发布日期对"上传"播放列表的前 25 个条目进行排序,以便我可以忠实地重现 YouTube 网站如何列出视频。

在进行了一些测试并感谢这个答案(以及下一个答案)之后,我能够使用 YouTube 数据 API v3 检索您需要的信息,这是我制作方法的:

首先,在您的问题中,您使用的是"搜索"API - 由于我不知道您在搜索请求中使用了哪些条件,因此我省略了它以直接获取来自给定channel_id的"upload"播放列表 ID。

使用

channel_id=UCT2rZIAL-zNqeK1OmLLUa6g(属于"Microsoft HoloLens"),我使用"通道"API 来检索uploads播放列表 ID。

以下是从前面提到的channel_id中检索"upload"播放列表ID的URL请求:

https://www.googleapis.com/youtube/v3/channels?part=id%2Csnippet%2CcontentDetails&fields=items(contentDetails%2FrelatedPlaylists%2Fuploads%2Csnippet%2Flocalized)&id=UCT2rZIAL-zNqeK1OmLLUa6g&key=<YOUR_API_KEY>

解释:

  • 部件:设置用于检索以下内容的snippetcontentDetails部件:
  • 字段:从snippet部分:(localizeddescriptiontitle)和从contentDetails部分:(relatedPlayListsuploads)。
  • IDchannel_id此请求中使用。

以下是此请求的结果:

{
"items": [
{
"snippet": {
"localized": {
"title": "Microsoft HoloLens",
"description": "The official YouTube channel of Microsoft HoloLens. Transform your world with holograms. Visit HoloLens.com for more info."
}
},
"contentDetails": {
"relatedPlaylists": {
"uploads": "UUT2rZIAL-zNqeK1OmLLUa6g"
}
}
}
]
}

检查uploads属性的值contentDetails部分。此值将在下一个 API 请求中使用。

您还可以在我准备的Google API Explorer演示中检查这些结果。


检索uploads(如前面几行中指定)后,现在是时候使用"playlistItems"API 来构建以下 URL:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&playlistId=UUT2rZIAL-zNqeK1OmLLUa6g&fields=items(contentDetails(videoId%2CvideoPublishedAt)%2Csnippet%2Ftitle%2Cstatus)&maxResults=25&key=<YOUR_API_KEY>

解释:

  • 部件:设置用于检索以下内容的snippetcontentDetails部件:
  • 字段:从snippet部分:(titlestatus)和从contentDetails部分:(videoIdvideoPublishedAt)。
  • 播放列表 ID:是此请求中使用的playlistId-(即uploads值)。
  • 最大结果:设置为25

以下是此请求的结果:

{
"items": [
{
"snippet": {
"title": "Microsoft Windows Mixed Reality update | October 2018"
},
"contentDetails": {
"videoId": "00vnln25HBg",
"videoPublishedAt": "2019-01-04T17:43:47.000Z"
}
},
{
"snippet": {
"title": "How to use Spectator View for mobile devices"
},
"contentDetails": {
"videoId": "3fXlPw_FGLg",
"videoPublishedAt": "2018-10-15T17:13:42.000Z"
}
},
{
"snippet": {
"title": "Microsoft HoloLens: Visualizing the next mission to Mars."
},
"contentDetails": {
"videoId": "XVBbJ4EtAQY",
"videoPublishedAt": "2018-07-02T16:30:26.000Z"
}
},
{
"snippet": {
"title": "Microsoft HoloLens: Making mixed reality plug and play."
},
"contentDetails": {
"videoId": "QwXcSekZKWE",
"videoPublishedAt": "2018-06-25T23:25:55.000Z"
}
},
{
"snippet": {
"title": "Microsoft HoloLens | Windows Mixed Reality HMD Exerciser"
},
"contentDetails": {
"videoId": "RU3OMjq_Yic",
"videoPublishedAt": "2018-05-14T16:58:43.000Z"
}
}
]
}

我检查项目的顺序,它们按videoPublishedAt(从新到旧)排序。

您还可以在 YouTube 数据 API v3 - 官方文档中的试用功能中查看这些结果。1


1在这种情况下,我无法使用 Google API 资源管理器(就像我在第一个请求中使用的那样),因为我总是收到"后端错误"。

{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error"
}
],
"code": 500,
"message": "Backend Error"
}
}

我认为这是因为Google API浏览器已经过时了。

如果有人想看看,这里是演示。

我还使用播放列表 ID 来获取视频列表,但是我的似乎确实按日期从最新到最旧排序。请注意,Youtube 返回一个页面令牌,您可以使用该令牌获取接下来的 25 个(或在我的情况下为 50 个)视频。我以这种方式查询 API:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken= not_used_for_first_query&fields=nextPageToken,items(snippet(publishedAt,title,desc ription,thumbnails(default(url)),resourceId(videoId)))&playlistId=uploads_playlist_id&maxResults=50&order=date&key=your_api_key

这又回到了 JSON 响应中:

视频标题
发布日期
视频说明
视频的优酷网址 视频
唯一 ID
视频缩略图

您可以在 https://www.scriptbarrel.com

最新更新