从API获取电影数据's在javascript中

fetch movie data from API's in javascript

本文关键字:javascript API 获取 电影 数据      更新时间:2024-03-04

我有一个>15k电影的json对象,其中包含类似的IMDb ID

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

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

  • 海报,运行时,流派,导演。。。可以在这里找到http://www.omdbapi.com/?i=tt0111161&plot=short&r=json

我的问题是:用这个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;
        } 
    });
}

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

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时,将显示警报。