我试图通过IMDB检索OMDB API中所有电影的数据。为了实现这一点,我制作了一个简单的NodeJS脚本,该脚本运行所有可用的IMDB电影ID,为每个ID进行API调用。此ID的格式为ttXXXXXXX
,其中X
为整数。
问题在于,如果for循环的迭代次数大于~2500,则脚本会停留在最后3到8个查询中。
可能会发生什么?考虑到迭代次数,这是一个内存问题吗?
脚本本身如下:
const http = require('http');
var asyncsLeft = 0; // This is used to track when the final http.request callback is done
var movieCount = 0; // Count the number of movies retrieved
var N = 10000 // Number of iterations
// Callback for the OMBD API call
function callback(res) {
var movieRawData = '';
res.setEncoding('utf8');
// Getting the chunks of data from the API response
res.on('data', (chunk) => {
movieRawData += chunk;
});
res.on('end', function() {
var movieData = JSON.parse(movieRawData)
if(movieData.Type == 'movie') {
console.log(++movieCount + "\t" + movieData.Title);
}
});
res.on('error', function(err) { console.log(err); });
};
for(var i = 0; i <= N; i++) {
// Options for the API call
var options = {
host: 'www.omdbapi.com',
path: '/?i=tt' + idGenerator(i),
method: 'GET',
};
// Making the API call itself and increment the async calls counter
var req = http.request(options, callback);
asyncsLeft++;
req.on('error', function(e){ console.log(e) });
req.end();
};
// Function to generate valid seven digits IMDB's movie ID
function idGenerator(index) {
if (index >= 1000000){ return '' + index; }
else if (index >= 100000) { return '0' + index; }
else if (index >= 10000) { return '00' + index; }
else if (index >= 1000) { return '000' + index; }
else if (index >= 100) { return '0000' + index; }
else if (index >= 10) { return '00000' + index; }
else if (index >= 0) { return '000000' + index; }
}