2016-04-04 2 views
1

Я пытаюсь создать программу, которая ищет запрос из твиттера. Проблема, с которой я сталкиваюсь, заключается в том, что API возвращает только 100 запросов результата, и когда я пытаюсь получить больше, он снова дает мне те же результаты.Использование twitter4j для поиска более 100 запросов

 User user = twitter.showUser("johnny"); 
     Query query = new Query("football"); 
     query.setCount(100); 
     query.lang("en"); 


     int i=0; 

    try {  

       QueryResult result = twitter.search(query); 
       for(int z = 0;z<2;z++){ 
       for(Status status : result.getTweets()){ 

        System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText()); 



         i++; 

       } 

    } 

Программа напечатает мне 200 результаты, относящиеся к запросу «футбол», но вместо того, чтобы дать мне 200 различных результатов он печатает 100 результатов дважды. Мои конечные результаты должны состоять в том, что я могу печатать столько разных результатов, сколько позволяет ограничение скорости. Я видел программы, которые возвращают более 100 ответов для конкретного пользователя, но я не видел ничего, что могло бы вернуть более 100 ответов на уникальный запрос, например «футбол».

+0

@timrau ответ для этого сообщения был довольно запутанным при попытке связать мой код и хотел узнать, есть ли другой способ решить проблему, связанную с моим кодом. – shah

ответ

1

Чтобы получить более 100 результатов поиска, вам необходимо вызвать следующую итерацию запроса.

Query query = new Query("football"); 
    QueryResult result; 
    int Count=0; 
    do { 
     result = twitter.search(query); 
     List<Status> tweets = result.getTweets(); 
     for (Status tweet : tweets) { 
      System.out.println("@" + tweet.getUser().getScreenName() + ":" + tweet.getText()); 
      Count++; 
     } 
     try { 
      Thread.sleep(500); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    while ((query = result.nextQuery()) != null); 
    System.out.println(Count); 
    System.exit(0); 

Я просто проверил его и получил 275 твитов, иметь в виду, что это из documentation:

The Search API не полный индекс всех твитов, но вместо того, чтобы индекс последних твитов. В настоящий момент этот индекс включает в себя 6-9 дней твитов.

И:

Перед вовлекаются, это важно знать, что Search API ориентирован на актуальность и не законченность. Это означает, что некоторые твиты и пользователи могут отсутствовать в результатах поиска. Если вы хотите соответствовать полноте, вам следует вместо этого использовать Streaming API.

+0

Это нормально, что результаты меняются? Иногда я получаю 108 твитов, а иногда получаю 12. – shah

+0

Да, это нормально: «Прежде чем принимать участие, важно знать, что API поиска ориентирован на релевантность, а не на полноту. Это означает, что некоторые твиты и пользователи могут отсутствовать в результаты поиска. Если вы хотите соответствовать полноте, вы должны использовать вместо этого Streaming API ». – FeanDoe

+0

Я пытаюсь запустить программу несколько раз за один вызов, но он сохраняет печать тех же результатов. В сущности, я хочу иметь возможность продолжать звонить в API до тех пор, пока я не удалю ratelimit. Тем не менее, прямо сейчас он попадает в ratelimit, но продолжает печатать один и тот же набор результатов снова и снова. Есть ли способ обойти это? – shah