Почему мой код получает твиты только за последние 1 или 2 минуты в Twitter4j

Сказал, что 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();
        }

    }

1 ответ

У вас есть популярный запрос, поэтому вы получаете только последние 10 твитов. Вы можете вернуться к частям по 100. Используйте "& max_id =ID& count = 100"

Поэтому добавьте внешний цикл и запомните минимальный идентификатор, который вы видели на предыдущих итерациях. Для первой итерации не устанавливайте 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

Более общие документы https://dev.twitter.com/rest/reference/get/search/tweets

Другие вопросы по тегам