java - 为什么我的代码只在 Twitter4j 中获取最近 1 或 2 分钟的推文

标签 java api twitter mapreduce tweets

说 Twitter API 将在 7 天内提供推文,但是当我尝试使用 java 实现我的代码时,我得到的推文结果还不够。它仅在 1 到 2 分钟内涵盖了推文。数据或推文的数量远远满足不了我的需要。我的代码有什么错误吗? 这是我的代码:

public class TweetPublic {

    public static void main(String[] args) {
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true).setOAuthConsumerKey("key")
                .setOAuthConsumerSecret("key")
                .setOAuthAccessToken("key")
                .setOAuthAccessTokenSecret("key");
        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();
        FileOutputStream fos;
        DataOutputStream dos;
        try {
            File file = new File("C:/Users/Charlie Siagian/Desktop/data.doc");
            fos = new FileOutputStream(file);
            dos = new DataOutputStream(fos);

            try {

                Query query = new Query("(#hadoop) OR (#bigdata) OR (#data) OR (#datamining) "
                        + "OR (#mapreduce) OR (#flume) OR (#semanticanalytic) OR (#dataset) OR (#rdbms)"
                        + "OR (#database) OR (#mysql)");
                QueryResult result;
                result = twitter.search(query);
                List<Status> tweets = result.getTweets();
                for (Status tweet : tweets) {
                    System.out.println("@" + tweet.getUser().getScreenName() + " - " + tweet.getText() + "\n=======\n"
                            + tweet.getCreatedAt());
                    dos.writeBytes("@" + tweet.getUser().getScreenName() + " - " + tweet.getText() + "\n"
                            + tweet.getCreatedAt() + "\n=======\n");
                }

                System.exit(0);
            } catch (TwitterException te) {
                te.printStackTrace();
                System.out.println("Failed to search tweets: " + te.getMessage());
                System.exit(-1);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

最佳答案

您有一个热门查询,因此您只能获取最后 10 条推文。您可以以 100 为一组返回。使用“&max_id=ID&count=100”

因此添加一个外循环并记住您在之前的迭代中看到的最小 id。对于第一次迭代,不要设置 max_id,然后在后续迭代中不断将 max_id 更新为新的最小值

https://api.twitter.com/1.1/search/tweets.json?q=%23hadoop+OR+%23bigdata+OR+%23data+OR+%23datamining+OR+%23mapreduce+OR+%23flume+OR+%23semanticanalytic+OR+%23dataset+OR+%23rdbms+OR+%23database+OR+%23mysql&max_id=758939297495982100&count=100

看起来可以在这里找到 http://twitter4j.org/javadoc/twitter4j/Query.html#setMaxId-long-

更一般的文档 https://dev.twitter.com/rest/reference/get/search/tweets

关于java - 为什么我的代码只在 Twitter4j 中获取最近 1 或 2 分钟的推文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652250/

相关文章:

Java Class.cast() 和重载

java - 扩展 RequestMappingHandlerMapping 以注册备用 URL 模式

ios - 使用 STTwitter 更改用户关注/取消关注

java - 通过 IMDB API 对电影进行评级

php - 推特分析 API

javascript - Twitter 社交框延迟页面加载 - 如何异步?

java - ORMlite,如果我*删除*注释会更快吗?

java - 使用数组绘制 jFreechart 时出现问题

node.js - Node js express请求天气API

java - 我看到错误 : A message body writer for Java class java. util.ArrayList 和 Java 类型 java.util.List<java.lang.String>