使用v3 API检索自动生成的YouTube播放列表的视频信息列表

时间:2013-08-23 16:45:20

标签: youtube-api youtube-javascript-api

//  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播放列表的播放列表ID,并从中检索前50个项目。

提供的回复的contentDetails包含每个视频的ID。

似乎我想要检索自动生成的播放列表的所有视频信息,我需要向youtube发出2N个请求? N要求从不超过50的集合中检索播放列表中的所有视频ID。一旦我拥有所有视频ID ...那么我需要向YouTube询问所有视频的视频信息。我可以在一个请求中获取50个视频的数据...这是另外N个要求YouTube检索所有视频的内容吗?

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

使用V3 API不再可能吗?我应该承担O(2N)网络费用吗?真的?

1 个答案:

答案 0 :(得分:1)

您还有哪些其他视频信息?如果您需要发布日期,标题,说明,缩略图,播放列表中的位置等,那么这是在playlistItem的片段中,而不是contentDetails。实际上,代码片段还包含一个resourceId,而resourceId又包含videoId,所以你可以忽略contentDetails而只是这样做:

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

(可能使用fields参数仅选择您所追踪的片段部分。)

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