【问题标题】:Retrieving list of video information for an auto-generated YouTube playlist using v3 API使用 v3 API 检索自动生成的 YouTube 播放列表的视频信息列表
【发布时间】:2013-08-26 19:20:25
【问题描述】:
//  This is a first attempt at using YouTube's v3 API. It doesn't require authentication.
getAutoGeneratedPlaylistData: function() {

    gapi.client.setApiKey('{API_KEY}');
    gapi.client.load('youtube', 'v3', function () {

        var request = gapi.client.youtube.playlistItems.list({
            part: 'contentDetails',
            maxResults: 50,
            playlistId: 'ALYL4kY05133rTMhTulSaXKj_Y6el9q0JH',
            fields: 'items/contentDetails'
        });

        request.execute(function (response) {
            console.log("Response:", response);
        });

    });

}

此代码采用自动生成的 YouTube 播放列表的 playlistId 并从中检索前 50 个项目。

提供的响应的 contentDetails 包含每个视频的 ID。

如果我想检索自动生成的播放列表的所有视频信息,我似乎需要向 youtube 发出 2N 次请求? N 个请求从播放列表中检索所有视频 ID,每组不超过 50 个。一旦我拥有了所有视频 ID……然后我需要向 YouTube 询问所有视频的视频信息。我可以在一个请求中获取 50 个视频的数据...所以这是另一个 N 请求 YouTube 检索所有视频?

这似乎是一个糟糕的设计决定。以前,如果我使用 v2 API 检索播放列表的所有信息,则可以在初始请求中向我发送视频的所有必要信息。

这是否不再可能使用 V3 API?我是否应该承担 O(2N) 网络成本...?真的吗?

【问题讨论】:

  • 可能我理解错了,不就是2n个请求吗?每个视频 2 个?
  • 啊,是的,你是对的。显然生锈了,我想这还不错.. 只是震惊我无法同时获取视频信息。

标签: youtube-api youtube-javascript-api


【解决方案1】:

您还需要哪些额外的视频信息?如果您需要发布日期、标题、描述、缩略图、播放列表中的位置等,那是在 playlistItem 的 sn-p 中,而不是 contentDetails。事实上,sn-p 还包含一个 resourceId,它又包含 videoId,因此您无论如何都可以忽略 contentDetails 并执行以下操作:

var request = gapi.client.youtube.playlistItems.list({
    part: 'snippet',
    maxResults: 50,
    playlistId: 'ALYL4kY05133rTMhTulSaXKj_Y6el9q0JH'
});

(可能使用 fields 参数仅选择您所追求的 sn-p 的那些部分)。

如果除了 sn-p 中的字段之外,您还需要视频信息,那么您必须拨打另一组电话(每批 50 个)是正确的。这实际上是一个非常好的设计决策。几乎所有播放列表项请求的用例都只需要 sn-p 中的信息,因此它们可以显着减少将一大堆数据发送到一大堆忽略它的应用程序。它确实要求,在那些需要额外数据的用例中,必须进行额外的调用,但整个系统的效率会变得更好(一个非常实用的工程选择)。

【讨论】:

  • 很公平。我需要视频的时长、作者、标题和 ID。看来我需要提出额外的请求。
  • 我也坐过那条船!
猜你喜欢
  • 2013-09-19
  • 2018-06-11
  • 2015-08-19
  • 2015-11-24
  • 2017-06-25
  • 1970-01-01
  • 2011-12-11
  • 2014-01-06
  • 2014-06-04
相关资源
最近更新 更多