发布了YouTube播放列表项API,但需进行字段澄清



我测试了YouTube的PlaylistItems.listAPI,以获取频道的默认播放列表。

在响应有效载荷中,2020-10-14T20:22:24Z发布的视频在第一个对象中,然后2020-10-21T17:54:05Z发布的下一个视频在第二个对象中。

在这个答案中提到:

从播放列表查询返回的publishedAt是视频已添加到播放列表中,而不是视频的日期发布在YouTube 上

我的情况可能是什么原因?

是否为该API维护了任何特定的排序顺序?

您看到您示例的排序的原因有两个(尽管您没有提到您的播放列表ID,以便其他人验证您的声明(。

1.视频的发布时间很可能与其上传时间不同

首先是以下内容:根据视频资源的publishedAt属性的官方文档(以下重点是我的(:

snippet.publishedAt(日期时间(

视频发布的日期和时间请注意,这个时间可能与上传视频的时间不同例如,如果视频作为私人视频上传,然后在以后公开,则此属性将指定视频公开的时间。

有几个特殊情况:

  • 如果视频作为私人视频上传,并且视频元数据由频道所有者检索,则属性值指定视频上传的日期和时间
  • 如果视频是作为未列出的视频上载的,则属性值还会指定上载视频的日期和时间。在这种情况下,任何知道视频的唯一视频ID的人都可以检索视频元数据

该值以ISO 8601格式指定。

因此,在某些情况下,给定的视频很可能具有不同的上传时间和发布时间。

此外,PlaylistItems资源的官方文档显示以下w.r.t.两个相关属性:

snippet.publishedAt(日期时间(

项目添加到播放列表的日期和时间。该值以ISO 8601格式指定。

contentDetails.videoPublishedAt(日期时间(

视频发布到YouTube的日期和时间。该值以ISO 8601格式指定。

根据snippet.publishedAt的规范,在播放列表是给定频道的上传播放列表的情况下(即ID形式为UU...的播放列表;注意,通常频道ID及其相应的上传播放表ID通过s/^UC([0-9a-zA-Z_-]{22})$/UU1/相关,尽管没有正式记录(,snippet.publishedAt的值是该视频的上传日期。

第二个规范指示contentDetails.videoPublishedAt的值是相应视频资源的snippet.publishedAt的值,即该视频的发布时间。

2.对于频道的上传播放列表,PlaylistItems.listAPI端点返回的项目(必须(按contentDetails.videoPublishedAt的逆时间顺序排列

事实上,排序条件似乎是真的。这个特性没有正式记录,但根据我的经验,上面的语句适用于从PlaylistItems.list端点获得的每个结果集。

我可以在这里提出以下论点来证明调用PlaylistItems.list端点时产生的项目由contentDetails.videoPublishedAt按逆时间顺序(最新的第一个(排序的必要性:

这个论点是一种务实的论点:如果PlaylistItems.list的结果集没有按照前面提到的那样排序,那么这个端点就变得无用了。

这是因为,在这种情况下,要获得最近发布的视频,必须在本地获取所有上传的项目(其数量根据设计限制为20000(,然后扫描该结果集以查找最近的项目。为了获得最新的项目而被迫获取所有上传的项目实际上是无稽之谈。如果给定频道的上传次数超过20000的限制,那么最新的视频可能会超出这一界限;因此,对于此类频道,根本无法从API获得最近发布的视频。

因此,通过矛盾的方式,结果集必须按照contentDetails.videoPublishedAt的逆时间顺序进行排序。

最新更新