我知道之前有人问过类似的问题,但不是这个确切的问题,所以请耐心等待...
我想复制频道的上传视频列表,使其显示在YouTube的网页上(分成页面并按发布日期排序)。
为此,我尝试从YouTube频道中获取按发布日期排序的VideoID列表(按YouTube,而不是我的代码),因为播放列表中可能有1000个视频,而且YouTube每次查询最多只能搜索50个结果当我只想向用户显示前25个条目时,可以加起来。
最初,我使用的是YouTube Data 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 Search not returning all videos)一样,此方法不能保证返回所有视频,实际上,结果中缺少一些视频,这使该查询成为问题。 / p>
然后我在一些帖子中看到了这个Google视频:
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网站列出视频的方式。
答案 0 :(得分:2)
进行了一些测试并感谢this answer (还有下一个答案) ,我能够使用YouTube数据API v3检索您所需的信息,这就是我的做法它:
首先,在您的问题中,您使用的是"search" API-由于我不知道您在搜索请求中使用的标准,因此我省略了它,以直接获取“ {{1} }”来自给定upload
的播放列表ID。
我使用channel_id
= channel_id
(属于“ Microsoft HoloLens”),使用"channels" API来检索UCT2rZIAL-zNqeK1OmLLUa6g
播放列表ID。
这是从先前提到的uploads
中检索“ upload
”播放列表ID的URL请求:
channel_id
说明:
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>
和 snippet
部分以检索以下内容:contentDetails
部分:( snippet
, localized
和 description
),并从 title
部分:( contentDetails
和< strong> relatedPlayLists
)。uploads
。以下是此请求的结果:
channel_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
部分。此值将在下一个API请求中使用。
您也可以在我准备提出此请求的Google API Explorer demo中检查这些结果。
一旦检索到 contentDetails
值(如前几行所述) ,现在该使用"playlistItems" API来构建以下URL :
uploads
说明:
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>
和 snippet
部分以检索以下内容:contentDetails
部分:( snippet
和 title
),并从 status
部分:( contentDetails
和 videoId
)。 videoPublishedAt
-(即 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"
}
}
]
}
值(从新到旧)排序。
您还可以在YouTube数据API v3-官方文档的try-it funcionality中查看这些结果。 1
1 对于这种情况,我无法使用Google API资源管理器(就像我在第一个请求中使用的那样),因为我总是遇到“后端错误”。
videoPublishedAt
我认为这是因为Google API资源管理器已过时。
如果有人想签出,这里是demo。
答案 1 :(得分:0)
我也在使用播放列表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响应:
视频标题
发布日期
影片说明
视频的YouTube URL
影片唯一ID
视频缩略图