Javascript 如何使用node.js和express从Twitter API迭代client.get

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

我正在开发一个应用程序来下载特定数量的推文。我正在server.js中使用
node.js
express()

我创建了一个rout
app.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(0,但它只返回几条tweet。我试过:

do {
   // 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以外的任何内容。@ExplosionPills
count
参数位于
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)
})