获取超过同一组推文

时间:2018-02-03 05:41:18

标签: java twitter4j

我需要帮助从一个帐户收集多达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());
    }
}
}

1 个答案:

答案 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);