Javascript 如何使用node.js和express从Twitter API迭代client.get
我正在开发一个应用程序来下载特定数量的推文。我正在server.js中使用Javascript 如何使用node.js和express从Twitter API迭代client.get,javascript,node.js,loops,express,twitter,Javascript,Node.js,Loops,Express,Twitter,我正在开发一个应用程序来下载特定数量的推文。我正在server.js中使用node.js和express() 我创建了一个routapp.get('/api/tweets'…)来保存来自twitterapi的数据。如果我返回200条tweet,我的代码运行良好。但是,如果我想要超过300个,则res.send(data)只返回几个 我根据用python编写的代码创建了代码,该代码返回Twitter API(3200)允许的所有推文: 基于这行代码,我在server.js中编写了JavaScrip
node.js
和express()
我创建了一个routapp.get('/api/tweets'…)
来保存来自twitterapi的数据。如果我返回200条tweet,我的代码运行良好。但是,如果我想要超过300个,则res.send(data)只返回几个
我根据用python编写的代码创建了代码,该代码返回Twitter API(3200)允许的所有推文:
基于这行代码,我在server.js中编写了JavaScript
这段代码:
app.get('/api/tweets', function (req, res) {
var standardCount = 200;
var params = {
screen_name: 'user',
count: standardCount,
include_rts: false
};
var statuses = client.get('statuses/user_timeline', params, function getTweets(error, data) {
if (error) {
console.log(error)
}
var tweets = data;
var oldest = parseInt((tweets.slice(-1)[0].id_str) - 1);
// This attempt works fine using if
if (0 < data.length) {
params = {
screen_name: 'user',
count: standardCount,
max_id: oldest,
include_rts: false
}
client.get('statuses/user_timeline', params, function getTweets(error, data) {
if (error) {
console.log(error);
}
tweets = tweets.concat(data);
oldest = parseInt((tweets.slice(-1)[0].id_str) - 1);
return res.send(tweets.slice(0, 500)));
});
}
});
});
app.get('/api/tweets',函数(req,res){
var标准计数=200;
变量参数={
屏幕名称:“用户”,
计数:标准计数,
包括:false
};
var statuses=client.get('statuses/user_timeline',参数,函数getTweets(错误,数据){
如果(错误){
console.log(错误)
}
var tweets=数据;
var oldest=parseInt((tweets.slice(-1)[0].id_str)-1);
//使用if进行此尝试效果良好
if(0<数据长度){
参数={
屏幕名称:“用户”,
计数:标准计数,
max_id:最老的,
包括:false
}
client.get('status/user_timeline',参数,函数getTweets(错误,数据){
如果(错误){
console.log(错误);
}
tweets=tweets.concat(数据);
最早的=parseInt((tweets.slice(-1)[0].id_str)-1);
返回res.send(tweets.slice(0500));
});
}
});
});
我的第一次尝试是while(0
,但它没有返回任何结果。我将其更改为if(0do {
// download tweets
}
while (0 < data.length)
do{
//下载推文
}
而(0<数据长度)
…没有成功
迭代
客户端的最佳方式是什么。使用Twitter API获取以下载200多条推文?听起来您需要一个递归函数来获取数据集:
function obtainTweets (params, number, offsetId, dataset, callback) {
dataset = dataset || []
if (number < 0) return callback(null, dataset)
// ... update params
return client.get('...', params, (error, data) => {
if (error) return callback(error)
// .. logic to get new offsetId
dataset = dataset.concat(data)
return obtainTweets(params, number-200, offsetId, dataset, callback)
})
}
我看不出哪里可以将standardCount
更新为200以外的任何内容。@ExplosionPillscount
参数位于client.get(status/user\u timeline)
指定尝试和检索的推文数量,每个不同的请求最多200条。我缩短并删除了示例,我想敦促你仔细研究一下承诺,因为它们可以防止你在想要获取的大量推文中遇到堆栈溢出,你也可以使用nextTick
,但这更像是一种黑客行为,而不是一种解决方案。Thnaks。我会核对你的推荐。我需要实现你的答案。最好的。
function obtainTweets (params, number, offsetId, dataset, callback) {
dataset = dataset || []
if (number < 0) return callback(null, dataset)
// ... update params
return client.get('...', params, (error, data) => {
if (error) return callback(error)
// .. logic to get new offsetId
dataset = dataset.concat(data)
return obtainTweets(params, number-200, offsetId, dataset, callback)
})
}
obtainTweets({ user: 'some_user' }, 600, null, null, (error, data) => {
console.log(error, data)
})