我需要帮助从一个帐户收集多达3200条推文,但我只得到相同的一组重复推文。代码如下。
public static void main(String[] a) throws TwitterException, InterruptedException, IOException{
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("XXXXX");
cb.setOAuthConsumerSecret("XXXXX");
cb.setOAuthAccessToken("XXXXX");
cb.setOAuthAccessTokenSecret("XX").setHttpConnectionTimeout(100000);
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
String user = "elonmusk";
List<Status> statuses = twitter.getUserTimeline(user);
FileWriter fw = new FileWriter("file.dat");
int pageno = 1;
int size = statuses.size();
do {
Paging page = new Paging(1, 100);
statuses.addAll(twitter.getUserTimeline(user, page));
for (Status status : statuses) {
fw.write(status.getText());
}
page.setPage(pageno);
System.out.println(pageno);
pageno++;
}while(statuses.size()<3200);
if (statuses.size()==3200) {
fw.close();
System.out.println(statuses.size());
}
}
}
答案 0 :(得分:0)
每次do...while
循环开始时,您都会为第1页创建另一个Paging
实例。请注意,您调用Paging(int, int)
constructor的第一个参数是索引您要接收的内容页面。所以你每次都要检索第1页。
而不是将其硬编码为1,在实例化新的pageno
对象时使用Paging
索引。这将允许您获取该变量指示的页面,该变量在每次循环时都会更改。还没有必要在旧实例上调用setPage
,因为您每次都创建一个新对象:
do {
Paging page = new Paging(pageno, 100);
List<Status> newStatuses = twitter.getUserTimeline(user, page);
for (Status status : newStatuses) {
fw.write(status.getText());
statuses.add(status);
}
System.out.println(pageno);
pageno++;
} while (statuses.size() < 3200);