Java twitter4j result.nextquery()再次给出第一页的结果

Java twitter4j result.nextquery()再次给出第一页的结果,java,twitter,twitter4j,Java,Twitter,Twitter4j,我已经创建了一个twitter爬虫程序,它可以获取tweet及其属于某些hashtag的相关数据。在运行了一天多之后,它开始提供已经存储在数据库中的旧数据。现在我有216874条推特,上面有“jesuischarlie”标签。我当然用过 QueryResult result=twitter.search(新查询(“#jesuischarlie”) 然后,确保在result.nextQuery()==null 我的问题是为什么函数nextQuery()不只是给我一个空值,这意味着Twitter不会

我已经创建了一个twitter爬虫程序,它可以获取tweet及其属于某些hashtag的相关数据。在运行了一天多之后,它开始提供已经存储在数据库中的旧数据。现在我有216874条推特,上面有“jesuischarlie”标签。我当然用过
QueryResult result=twitter.search(新查询(“#jesuischarlie”)
然后,确保在
result.nextQuery()==null

我的问题是为什么函数
nextQuery()
不只是给我一个空值,这意味着Twitter不会为这个搜索提供更多的tweet?为什么要从头再来

这是我正在使用的全部函数

try {
             Query query = new Query("#jesuischarlie");
             query.setSince("2015-01-08");
             query.setCount(100);
             QueryResult result;
             do {
                 result = twitter.search(query);
                 List<Status> tweets = result.getTweets();
                 for (Status tweet : tweets) {
                     Twitter_loop_dao dao = new Twitter_loop_dao();
                    try {

                        dao.insertTwet(tweet);
                    } catch (SQLException e) {

                        e.printStackTrace();
                    }
                 }
                 Thread.sleep(15 * 1000);
             } while ((query = result.nextQuery()) != null);
             System.exit(0);
         } catch (TwitterException te) {
             te.printStackTrace();
             System.out.println("Failed to search tweets: " + te.getMessage());
             System.exit(-1);
         }
试试看{
Query Query=新查询(“#jesuischarlie”);
查询设置自(“2015-01-08”);
query.setCount(100);
查询结果;
做{
结果=twitter.search(查询);
List tweets=result.getTweets();
用于(状态推文:推文){
Twitter_loop_dao=新Twitter_loop_dao();
试一试{
插入tweet(tweet);
}捕获(SQLE异常){
e、 printStackTrace();
}
}
线程。睡眠(15*1000);
}while((query=result.nextQuery())!=null);
系统出口(0);
}捕获(twitter异常){
te.printStackTrace();
System.out.println(“未能搜索tweets:+te.getMessage());
系统退出(-1);
}

看起来您在while循环中使用了错误的退出条件。我的代码正在(为我)工作

do{
试一试{
结果=twitter.search(查询);
List tweets=result.getTweets();
List myObjects=tweets.parallelStream()
.map(tweet->mytweet函数(tweet))
.collect(Collectors.toList());
query=result.nextQuery();
检查比率限制(结果)
}捕获(twitter异常){
//你想干什么就干什么
}
}while(result==null | | result.hasNext());
checkRateLimit函数:

private void checkRateLimit(QueryResult result) {

    if (result.getRateLimitStatus().getRemaining() <= 0){
        try {
          Thread.sleep(result.getRateLimitStatus().getSecondsUntilReset() * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}
private void checkrate limit(查询结果){

如果(result.getRateLimitStatus().getLeving())在(result.hasNext());
作为循环的退出条件时尝试了
(result.getRateLimitStatus().getLeving()
您可以通过
线程.sleep(result.getRateLimitStatus().getSecondsUntilReset()*1000)获得窗口内剩余请求的数量;
您可以等到您的窗口被重置。我非常感谢您的解释。那是我的错误,而不是Twitter的限制政策。@mmx73
private void checkRateLimit(QueryResult result) {

    if (result.getRateLimitStatus().getRemaining() <= 0){
        try {
          Thread.sleep(result.getRateLimitStatus().getSecondsUntilReset() * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}