gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:03:13 24 4
gpt4 key购买 nike

我创建了一个 Twitter 爬虫,用于获取属于某些主题标签的推文及其相关数据。运行一天多后,它开始提供已存储在数据库中的旧数据。现在我有 216,874 strip 有 #jesuischarlie 标签的推文。当然我用过 QueryResult 结果=twitter.search(new Query("#jesuischarlie"));
当然,我有一个 do-while 循环永远不会退出,直到 result.nextQuery()==null

我的问题是为什么函数 nextQuery() 不只是给我一个 null,这意味着 Twitter 不会为此搜索提供更多推文?怎么又从头开始了!?

这是我正在使用的完整功能

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);
}

最佳答案

看起来您在 while 循环中使用了错误的退出条件。我的代码正在运行(对我来说)。

do {
try {
result = twitter.search(query);
List<Status> tweets = result.getTweets();
List<MyObject> myObjects = tweets.parallelStream()
.map(tweet -> myTweetFunction(tweet))
.collect(Collectors.toList());

query = result.nextQuery();
checkRateLimit(result)

} catch (TwitterException e){
// do what ever you want
}
} 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);
}
}
}

希望有帮助。

关于java - twitter4j result.nextquery() 再次给出第一页的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28048130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com