Yelp API - Node.js 中每秒请求过多
Yelp API - Too Many Request Per Second in Node.js
专家们,
似乎 yelp 最近更改了他们的 REST API 以限制您每秒可以发出的请求量。我试过使用 setTimeout 和各种睡眠功能但没有成功。我相信这与 setTimeout 有关。我只收到一些回复和一大堆 TOO_Many_Requests_Per_Second。另外,我正在使用 Node.js Fusion API 客户端。任何帮助,将不胜感激。提前致谢。
下面是我从我的解析服务器获取 Yelp URL 的代码,我想获取 Yelp 企业名称响应:
'use strict';
var Parse = require('parse/node');
Parse.initialize("ServerName");
Parse.serverURL = 'ParseServerURL';
const yelp = require('yelp-fusion');
const client = yelp.client('Key');
var object;
var Business = Parse.Object.extend("Business");
var query = new Parse.Query(Business);
query.notEqualTo("YelpURL", "Bus");
query.find({
success: function(results) {
for (var i = 0; i < results.length; i++) {
object = results[i];
//I belive a setTimeout block needs to come somewhere in here. Tried many places but with no success.
client.business(object.get('YelpURL')).then(response => {
console.log(response.jsonBody.name);
}).catch(e => {
console.log(e);
});
}
},
error: function(error) {
alert("Error" + error.code + " " + error.message);
}
});
我不太确定这是否是您要查找的内容,但您可以在每个请求中检索最多 50 条记录,在下面的示例中,该邮政编码内将 return 20 个公司名称,或者您可以调整return 这些企业的所有数据,这有帮助吗:
app.get('/:id', (req, res) => {
let zipcode = req.params.id;
let names = [];
let searchRequest = {
term: 'Business', // or for ex. food
limit: 20, //set the number of responses you want up to 50
radius: 20000, // 20 miles
location: zipcode
};
client.search(searchRequest)
.then(response => {
response.jsonBody.businesses.map(elem => {
names.push(elem.name);
})
res.json(names); // business names only
//or
//res.json(response.jsonBody.businesses) //all details included with business name
}).catch(e => {
res.json('error');
});
})
使用每个查询,它将遍历每个对象并按顺序执行请求,而不是一次或多或少地执行所有请求:
query.each(
function(object) {
return client.business(object.get('YelpURL')).then(response => {
console.log(response.jsonBody.name);
});
}
).catch( e => {
res.json('error');
});
关于此的一个很酷的事情是,如果底部的 catch 块存在错误,它会自动传播来自 client.bussiness()
调用的错误。它将一次迭代一个对象,并且由于我们 "return" 调用 client.business()
的结果,因此在您获得响应之前它不会移动到下一个对象。 query.each()
还将遍历集合中满足您的查询条件的每个对象,因此您不必担心限制。
专家们,
似乎 yelp 最近更改了他们的 REST API 以限制您每秒可以发出的请求量。我试过使用 setTimeout 和各种睡眠功能但没有成功。我相信这与 setTimeout 有关。我只收到一些回复和一大堆 TOO_Many_Requests_Per_Second。另外,我正在使用 Node.js Fusion API 客户端。任何帮助,将不胜感激。提前致谢。
下面是我从我的解析服务器获取 Yelp URL 的代码,我想获取 Yelp 企业名称响应:
'use strict';
var Parse = require('parse/node');
Parse.initialize("ServerName");
Parse.serverURL = 'ParseServerURL';
const yelp = require('yelp-fusion');
const client = yelp.client('Key');
var object;
var Business = Parse.Object.extend("Business");
var query = new Parse.Query(Business);
query.notEqualTo("YelpURL", "Bus");
query.find({
success: function(results) {
for (var i = 0; i < results.length; i++) {
object = results[i];
//I belive a setTimeout block needs to come somewhere in here. Tried many places but with no success.
client.business(object.get('YelpURL')).then(response => {
console.log(response.jsonBody.name);
}).catch(e => {
console.log(e);
});
}
},
error: function(error) {
alert("Error" + error.code + " " + error.message);
}
});
我不太确定这是否是您要查找的内容,但您可以在每个请求中检索最多 50 条记录,在下面的示例中,该邮政编码内将 return 20 个公司名称,或者您可以调整return 这些企业的所有数据,这有帮助吗:
app.get('/:id', (req, res) => {
let zipcode = req.params.id;
let names = [];
let searchRequest = {
term: 'Business', // or for ex. food
limit: 20, //set the number of responses you want up to 50
radius: 20000, // 20 miles
location: zipcode
};
client.search(searchRequest)
.then(response => {
response.jsonBody.businesses.map(elem => {
names.push(elem.name);
})
res.json(names); // business names only
//or
//res.json(response.jsonBody.businesses) //all details included with business name
}).catch(e => {
res.json('error');
});
})
使用每个查询,它将遍历每个对象并按顺序执行请求,而不是一次或多或少地执行所有请求:
query.each(
function(object) {
return client.business(object.get('YelpURL')).then(response => {
console.log(response.jsonBody.name);
});
}
).catch( e => {
res.json('error');
});
关于此的一个很酷的事情是,如果底部的 catch 块存在错误,它会自动传播来自 client.bussiness()
调用的错误。它将一次迭代一个对象,并且由于我们 "return" 调用 client.business()
的结果,因此在您获得响应之前它不会移动到下一个对象。 query.each()
还将遍历集合中满足您的查询条件的每个对象,因此您不必担心限制。