【问题标题】:Is it possible to get more than 100 tweets?是否有可能获得超过 100 条推文?
【发布时间】:2019-04-04 05:20:16
【问题描述】:

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

【问题讨论】:

  • @NarendraPathai 我是..默认计数为 100。我尝试使用循环并多次查询,但我反复收到同一组 100 条推文..这就是为什么我问是否有居然是一种方式?

标签: java twitter4j


【解决方案1】:

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

此信息适用于 Twitter API。

要获得上一个 100 条推文:

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

要获得下一个 100 条推文:

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

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

【讨论】:

  • 设置max_id为max_id-1,否则你会得到最后一条推文两次
【解决方案2】:

You can't load more than 100 tweet per request 但我不知道你为什么想要这个,而不是 您可以在“无尽页面”中加载所有推文,即每次用户滚动列表时加载 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);
}

等等。

【讨论】:

  • 这个解决方案是最方便的。不幸的是,这个解决方案似乎不适用于每个查询。如果您的查询有特殊字符,例如Query query = new Query("*"); 然后 result.nextQuery() 没有正确编码它们导致来自 twitter api 的错误“无法验证你”。
【解决方案3】:

一些使用最低 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);

【讨论】:

    【解决方案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());
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        当您收到包含前 100 个结果的响应时,您还会获得包含响应的下一个 id。这个id可以作为查询参数“next”= {the id you received from the previous call} 再次拨打电话时,它将为您提供接下来的 100 条推文。

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            猜你喜欢
            • 2015-06-14
            • 2014-11-22
            • 1970-01-01
            • 2021-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-22
            • 1970-01-01
            相关资源
            最近更新 更多