【问题标题】:YouTube Data API: How unique is PlaylistItem ID?YouTube 数据 API:PlaylistItem ID 的唯一性如何?
【发布时间】:2020-12-13 13:00:34
【问题描述】:

YouTube 播放列表中的视频是否有真正的唯一 ID? YouTube 提供了一个playlistItem.id 并告诉我们这个 ID 是...

YouTube 用于唯一标识播放列表项的 ID

我发现这个 ID 是 PlaylistItem 在播放列表中的位置 ID。如果您删除播放列表中的唯一一个视频并将另一个视频放入播放列表,则此新视频将具有相同的 PlaylistItem.id。

关于如何伪造一个真实的唯一 ID 有什么建议吗?

【问题讨论】:

  • 抱歉,顺便问了一个问题:这样一个全球唯一的播放列表项 ID 有什么用?视频 ID 和播放列表 ID 在其各自的资源类别内外是全球唯一的。
  • 用例是跟踪播放列表的变化。如果唯一的 playlistItemId 至少在其播放列表范围内是唯一的,这将有所帮助。
  • 我明白了。一般来说,计算任何资源类别的集合理论差异是非常棘手的——比如上传的视频(它本身就是一个播放列表)、播放列表等等。那就是能够准确且高效地计算哪些元素被删除,哪些元素被添加。然而,使用 API 更容易判断何时添加了新项目。例如,请参阅我的 this answer
  • 只有在本地存储完整列表并且从 API 获取整个播放列表时,才能计算播放列表的理论集差异。这效率不高,因为播放列表可能很大。
  • 我不得不解决一些问题,比如保持跟踪播放列表中的变化,因为我自己确实经常监控我感兴趣的某些频道。对于有数千或数十万次上传的频道,在本地获取整个列表以正确计算集合理论差异是不可行的。

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


【解决方案1】:

我认为元组

<playlistId, playlistItemId, videoId>

可以作为一个全球唯一的播放列表项 ID。当然,对于t1 := <p1, i1, v1>t2 := <p2, i2, v2>,根据定义t1 == t2 当且仅当:

  • p1 == p2,和
  • i1 == i2,和
  • v1 == v2

由于这种元组的每个组成部分都是一个不包含逗号的字符串,因此元组本身可以简单地用逗号分隔的这三个字符串的串联来表示。

如前所述对 ID 元组进行编码意味着组件级 ID 元组相等(如上定义)变成了字符串相等。

将这样的 ID 解码为其组件也很简单。任何现代语言都有现成的标准函数来精确地进行这种操作。例如,在 Python 中,该函数是 str.split;在 PHP 中是 explode

【讨论】:

  • 是的,touple 似乎是解决这个问题的最后手段。我认为您的 touple 无法跟踪您多次添加和删除的同一视频。但是如stackoverflow.com/a/50321595/830006 所述,publishAt 日期可能很有用
  • 确实你是对的;那么元组将是<playlistId, playlistItemId, videoId, publishedAt>。我的其余断言仍然有效,因为 publishedAt 可以表示为不包含逗号(例如,自纪元以来的秒数,或 ISO-8601、%Y-%m-%dT%H:%M:%S.%NZ 等)
猜你喜欢
  • 2010-11-07
  • 2012-10-11
  • 2012-08-25
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
相关资源
最近更新 更多