15

是否可以使用 Twitter4j API 获得超过 100 条推文?
如果是这样,任何人都可以指出这样做的方法吗?

4

7 回答 7

26

需要查看您的代码以提供特定于您的案例的代码示例,但您可以通过since_id或来执行此操作max_id

此信息适用于 Twitter API。

要获取100 条推文:

  1. 找到您刚刚通过查询检索到的集合中的最低id
  2. max_id使用设置为您刚刚找到的 id的选项执行相同的查询。

要获取接下来的100 条推文:

  1. 找到您刚刚通过查询检索到的集合中的最高id
  2. since_id使用设置为您刚刚找到的 id的选项执行相同的查询。

在 Twitter4j 中,您的Query对象有两个表示上述 API 选项的字段:sinceIdmaxId.

于 2013-07-26T18:06:30.163 回答
4

每个请求您不能加载超过 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);
}

等等。

于 2013-10-08T07:37:58.543 回答
4

一些使用最低 id 迭代到旧页面的 Java 代码可能如下所示:

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);
于 2014-04-18T20:59:06.943 回答
4

以下是如何获取用户的所有推文(或至少高达 ~3200):

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());
于 2014-11-23T06:27:56.257 回答
2

添加到 Luke 的方法中,Twitter4j 确实为查询提供了分页。您可以尝试为您的查询获取多个页面。设置每页结果和页码。

但我建议先尝试since_id,然后再尝试分页。

于 2013-07-27T13:39:00.637 回答
1

当您收到包含前 100 个结果的响应时,您还将获得包含响应的下一个 id。此 id 可用作查询参数 "next"= {您从上一次通话中收到的 id} 再次拨打电话时,它将为您提供接下来的 100 条推文。

于 2019-04-03T21:20:16.327 回答
0

对于给定的查询,可以提取超过 100 条推文。如需快速演示,您可以在http://preciselyconcise.com/apis_and_installations/tweets_extraction_from_twitter.php下载用于推文提取的推特 GUI 应用程序。

通过从该查询的所有可用页面中提取查询结果,如果在该查询下可用,您将能够提取超过 100 条推文。我下载了该网站上提供的 GUI 应用程序,并且能够提取 1000 多条推文用于查询 #happy。

于 2014-01-29T15:04:43.127 回答