【发布时间】:2017-07-03 03:21:00
【问题描述】:
我正在构建一个应用程序来下载特定数量的推文。我在 server.js 中使用 node.js 和 express()。
我创建了一个路由 app.get('/api/tweets'...) 来保存来自 Twitter API 的数据。如果我返回 200 条推文,我的代码运行良好。但是,如果我想要超过 300 个左右,res.send(data) 只会返回一些。
我根据我用 python 编写的代码创建了我的代码,它返回 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)
...没有成功。
使用 Twitter API 迭代 client.get 以下载 200 多条推文的最佳方法是什么?
【问题讨论】:
-
我看不到你可以在哪里将
standardCount更新为 200 以外的任何值。 -
@ExplosionPills
countclient.get(statuses/user_timeline)中的参数指定要尝试和检索的推文数量,每个不同请求最多 200 个。
标签: javascript node.js loops express twitter