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

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

我创build了一个app.get('/api/tweets'...)来保存来自Twitter API的数据。 如果我返回200条推文,我的代码运行良好。 但是,如果我想要300多个, res.send(data)只返回一些。

我使用python编写的代码创build了我的代码,该代码返回Twitter API允许的所有推文(3,200):

 allTweets = [] statuses = t.statuses.user_timeline(screen_name = 'user', count=100, include_rts=False) allTweets.extend(statuses) oldest = allTweets[-1]['id'] - 1 while len(statuses) > 0: statuses = t.statuses.user_timeline(screen_name = 'user', count=100, max_id=oldest, include_rts=False) allTweets.extend(statuses) oldest = allTweets[-1]['id'] - 1 

基于这一点,我在JavaScript写了这个代码在server.js中:

 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))); }); } }); }); 

我第一次尝试while (0 < data.length) ,但它没有返回任何东西。 我把它改为if (0 < data.length) ,但是它只返回一些推文。 我试过了:

 do { // download tweets } while (0 < data.length) 

没有成功

迭代client.get使用Twitter API下载超过200条推文的最佳方法是什么?

听起来就像你想要一个recursion函数来获取你的数据集:

 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) }) } 

在这里,我们定义了一个方法:获取params的方法,包括params对象,你想获得的推文的numberoffsetId是否存在,当前datasetcallback ,以便在迭代完成后返回数据集。

每次迭代完成后,我们从给定的数字中减去最大值200 ,直到达到0并且除非发生错误,否则调用callback

它会像这样使用:

 obtainTweets({ user: 'some_user' }, 600, null, null, (error, data) => { console.log(error, data) })