使用Twitter4j API获取超过100条推文是否可能?
如果可能,有人能指出如何做吗?
要提供针对您情况的代码示例,需要查看您的代码,但是您可以通过since_id
或max_id
来实现。
此信息适用于Twitter API。
max_id
选项执行相同的查询。since_id
选项执行相同的查询。在Twitter4j中,您的Query
对象有两个字段,表示上述API选项:sinceId
和maxId
。
import java.util.*;
import twitter4j.*;
import twitter4j.conf.*;
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("");
cb.setOAuthConsumerSecret("");
cb.setOAuthAccessToken("");
cb.setOAuthAccessTokenSecret("");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
int pageno = 1;
String user = "cnn";
List statuses = new ArrayList();
while (true) {
try {
int size = statuses.size();
Paging page = new Paging(pageno++, 100);
statuses.addAll(twitter.getUserTimeline(user, page));
if (statuses.size() == size)
break;
}
catch(TwitterException e) {
e.printStackTrace();
}
}
System.out.println("Total: "+statuses.size());
您无法一次请求加载超过100条推文,但我不知道您为什么需要这样做,相反,您可以在“无限页面”中加载所有推文,即每次用户滚动列表时加载10个项目。
例如
Query query = new Query("stackoverflow");
query.setCount(10);// sets the number of tweets to return per page, up to a max of 100
QueryResult result = twitter.search(query);
if(result.hasNext())//there is more pages to load
{
query = result.nextQuery();
result = twitter.search(query);
}
等等。
Query query = new Query("*");
,那么 result.nextQuery()
就无法正确编码它们,从而导致 Twitter API 返回一个错误信息 "could not authenticate you"。 - asmaier一些Java代码通过使用最低ID迭代到旧页面可能是这样的:
Query query = new Query("test");
query.setCount(100);
int searchResultCount;
long lowestTweetId = Long.MAX_VALUE;
do {
QueryResult queryResult = twitterInstance.search(query);
searchResultCount = queryResult.getTweets().size();
for (Status tweet : queryResult.getTweets()) {
// do whatever with the tweet
if (tweet.getId() < lowestTweetId) {
lowestTweetId = tweet.getId();
query.setMaxId(lowestTweetId);
}
}
} while (searchResultCount != 0 && searchResultCount % 100 == 0);
除了Luke的方法之外,Twitter4j提供了对查询结果进行分页的功能。您可以尝试为查询获取多个页面。设置每页结果数量和页面号码。
但我建议先尝试since_id
,然后再尝试分页。
对于给定的查询,可以提取超过100条推文。您可以下载一个Twitter GUI应用程序进行快速演示,以从http://preciselyconcise.com/apis_and_installations/tweets_extraction_from_twitter.php中提取推文。
通过从该查询的所有可用页面提取查询结果,如果在该查询下可用,则可以提取超过100条推文。我下载了该网站上提供的GUI应用程序,并能够为查询#happy提取超过1000条推文。