0

YouTubeビデオのURLのリストがあります。YouTube APIを使用して、それぞれのユーザー評価と評価数を見つけたいと思います。APIは、URLを使用してこの情報を検索する方法を提供しますが、単一のビデオのみを対象としています:https ://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries 。

たくさんの同期AJAXリクエストを送信できましたが、それは遅すぎます。私はそれらを非同期で送信し、すべてが次のように終了するのを待ってみました:

MyObj.prototype.getYTData = function (urls) {

    var self = this,
        requests = 0,
        vids = [];

    $.each(urls, function (i, vidUrl) {

        var id = self.getURLParameter(vidUrl, 'v');
        requests += 1;
        $.ajax({
            type: 'GET',
            url: 'https://gdata.youtube.com/feeds/api/videos/' + id + '?v=2',
            data: { alt: 'jsonc' },
            success: function (data) {

                self.isGood(data.data) && vids.push(data.data);
            },
            complete: function () {
                requests -= 1;
            }
        });
    });

    while (requests) {};
};

関数が永久にハングするようです。私の推測では、サーバーにリクエストが多すぎるためです。リクエストの間に少し遅延を設定することもできますが、これを行うにはもっと良い方法があるはずです。

すべてのURLの評価情報を取得するための良い方法は何ですか?

4

1 に答える 1

0

私のソリューションは、setTimeoutオブジェクトとjQuery Deferredオブジェクトを使用することになったため、リクエストがすべて終了したらコードを実行できました。幸いなことに、Stack Overflowには、単一のリクエストを使用するはるかに単純なソリューションがすでにありました。

私はこれをすることになった:

MyObj.prototype.getYTData = function (vidIDs) {

    var IDGroup = $.map(vidIDs, function (id) {
            if (id.indexOf('-') == -1) {
                return id;
            }
            return '"' + id + '"';
        }).join('|');

    $.ajax({
        type: 'GET',
        url: 'https://gdata.youtube.com/feeds/api/videos?v=2&q=' + IDGroup,
        data: { alt: 'jsonc' },
        success: function (data) {

            // Process data
        }
    });
};
于 2012-05-21T21:34:42.900 に答える