我正在创建一个仪表板,可以在制作时在地图上绘制支持地理位置的推文。最大的问题是,为了让我模拟它真正的现场,新的请求永远是第二个。
根据Twitter的API限制,对于unAuth / OAth(分别),REST API调用限制为每小时150/350,因此每秒拨打一次电话是行不通的。也许我不得不满足于刷新延迟,但我很好奇是否有解决方法。
有没有办法让我有一个真正的实时Feed,只要用户发推,就会在地图上添加一个点?
以下是我的代码的一部分,用于宽松参考:
// url is set above with the search query
function firstQuery(terms, oldestTweet, page, pic) {
getLimiter++;
var encodedTerms = encodeURIComponent(terms);
$.getJSON(url + '&page=' + page + '&max_id=' + oldestTweet + '&include_entities=1&result_type=recent&rpp=100&callback=?', function(tweets) {
if ($(tweets.results).length) {
if (storedLatestTweet < tweets.results[0].id) {
storedLatestTweet = tweets.results[0].id;
}
page++;
tweetCount = tweetCount + tweets.results.length;
storedOldestTweet = tweets.results[tweets.results.length - 1].id;
harvest(tweets, pic);
firstQuery(terms, oldestTweet, page, pic);
} else {
// continue to loop if more need to be plotted with the oldest tweet id known
if (getLimiter < 65 && tweetNumber < 10) {
page = 1;
firstQuery(terms, storedOldestTweet, page, pic);
}
return latestLoop(); // loops the request
}
});
}
function latestLoop() {
latest(terms, storedLatestTweet, page, pic);
// use queryLoop so that the timeout can be killed on new search
queryLoop = setTimeout(function() {
latestLoop();
}, 1000); // the loop rate of the request...1 second isn't gonna work
}
答案 0 :(得分:2)
您可以通过Twitter Stream API在Twitter上进行实时处理。但是流api并不会向您发送所有推文,您必须指定任一关键字来过滤包含给定关键字的推文,或者使用userIds来关注来自特定用户或地理位置的推文来过滤来自特定地点的推文。此外,关键字数量,用户ID也有限制等等。最后,twitter会在全球流量中为您提供最多1%的推文。因此,例如,如果您想出一个跟踪全球流量不到1%的过滤器,您将获得所有推文(理论上),否则您将错过一些推文,因为Twitter不会与您分享。
还有公共样本流,它可以从twitter提供一些示例数据。如果您只是为实验做这件事,它可以帮助您。 https://dev.twitter.com/docs/api/1.1/get/statuses/sample
我建议您确定要在Twitter上关注什么,并为流式api提供一个聪明的过滤器并跟踪地图上的结果。您还可以通过再次定期调用搜索API来填充应用程序中的缺失数据来提高您的结果(有时由于实时流式传输中的多种原因而不会发送推文,并且通过搜索API可以检索它们)