在javascript中从API获取电影数据

时间:2015-02-21 14:35:12

标签: javascript ajax json api imdb

我有一个包含IMDb ID的> 15k电影的json对象

0: ObjectID: "1."
   IdIMDb: "tt2322441"
   Title: "Fifty Shades of Grey"
   Year: 2015
1: ObjectID: "2."
   IdIMDb: "tt1617661"
   (...)

我希望用其他api的数据来完成这些数据

我的问题是:使用此API中的数据完成数据的最有效方式是什么? 我计划只运行一次这个程序并存储结果,以便它可以尊重api限制。

我的第一个想法是做这样的事情

data.forEach(function (d, i) {
    d.Poster = OMDbApi(d.IdIMDb);
    ...
}

function OMDbApi(i) {
    $.ajax({
        url:"http://www.omdbapi.com/?i="+i+"&plot=short&r=json",
        crossDomain: true,
        dataType: "jsonp",
        success: function (response) {
            return response.Poster;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
            error = 1;
        } 
    });
}

感谢您提供的任何帮助: - )

1 个答案:

答案 0 :(得分:2)

var totalCalls = 15000;
    var calls = 0;
    data.forEach(function (d, i) {
    OMDbApi(I, d.IdIMDb); //posterCall
}

function OMDbApi(index, id) {
    $.ajax({
        url:"http://www.omdbapi.com/?i="+id+"&plot=short&r=json",
        crossDomain: true,
        dataType: "jsonp",
                    dataObj : index,
        success: function (response) {
            window.data[this.dataObj].Poster = response.poster;
                            calls++;
                            if (calls == totalCalls)
                            {
                               alert("We're done");
                            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
            error = 1;
        } 
    });
}

这项工作具有Ajax的异步性质。

  

您可能希望跟踪所有请求,并在完成所有请求后显示消息。我添加了一个如何跟踪的简单示例。重要的是你知道要打多少次电话。因此,您需要计算ID的数量,并将该数量乘以完成日期所需的调用。例如:每个对象必须进行三次调用才能完成数据; 海报,导演和运行时。有14500个对象。这将导致总共3*14500 = 43500次呼叫。调用完成后,脚本会向变量调用添加1。当呼叫等于totalCalls时,会显示一个警报。