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

时间:2018-12-11 13:59:20

标签: youtube youtube-api youtube-data-api

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

我想复制频道的上传视频列表,使其显示在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网站列出视频的方式。

2 个答案:

答案 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 )。
  • id :此请求中使用的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 )。
  • 播放列表ID :是此请求中使用的videoPublishedAt-(即 playlistId 值)
  • maxResults :设置为 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
视频缩略图

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

看到我的工作示例