2016-04-04 6 views
1

Ich versuche, ein Programm zu erstellen, das eine Abfrage von Twitter durchsucht. Das Problem, das ich habe, ist, dass die API nur 100 Ergebnisabfragen zurückgibt, und wenn ich versuche, mehr abzurufen, gibt es mir die gleichen Ergebnisse wieder.Verwenden von twitter4j zum Durchsuchen von mehr als 100 Abfragen

 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++; 

       } 

    } 

Das Programm wird die Abfrage „Fußball“ in Bezug Ergebnisse drucken mir 200, sondern mir 200 verschiedene Ergebnisse gibt zweimal es druckt ein 100 Ergebnisse. Meine Endergebnisse sollten sein, dass ich so viele verschiedene Ergebnisse drucken kann, wie das Ratenlimit erlaubt. Ich habe Programme gesehen, die mehr als 100 Antworten für einen bestimmten Benutzer zurückgeben, aber ich habe nichts gesehen, das mehr als 100 Antworten für eine einzigartige Suchanfrage wie "Fußball" zurückgeben kann.

+0

@timrau die Antwort für diese Stelle war ziemlich verwirrend, wenn sie meinen Code zu beziehen versucht und wollte, ob es eine andere Möglichkeit wissen, war das Problem in Zusammenhang mit meinem Code zu adressieren. – shah

Antwort

1

Um mehr als 100 Ergebnisse zu einer Suchabfrage zu erhalten, müssen Sie die nächste Iteration der Abfrage aufrufen.

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); 

ich es getestet und 275 Tweets bekam, halten diese von der documentation im Sinn:

Die Search API nicht vollständiges Verzeichnis aller Tweets ist, sondern ein Index der neuesten Tweets. Im Moment umfasst dieser Index zwischen 6-9 Tweet-Tagen.

Und:

Vor einzulassen, ist es wichtig zu wissen, dass der Such-API auf Relevanz fokussiert und Vollständigkeit nicht. Dies bedeutet, dass einige Tweets und Nutzer möglicherweise in den Suchergebnissen fehlen. Wenn Sie der Vollständigkeit halber übereinstimmen möchten, sollten Sie stattdessen eine Streaming-API verwenden.

+0

ist es normal, dass sich die Ergebnisse ändern? Manchmal bekomme ich 108 Tweets und manchmal 12. – shah

+0

Ja, es ist normal: "Bevor man sich einmischt, ist es wichtig zu wissen, dass die Such-API auf Relevanz und nicht auf Vollständigkeit ausgerichtet ist. Das bedeutet, dass einige Tweets und Benutzer fehlen Wenn Sie der Vollständigkeit halber übereinstimmen möchten, sollten Sie stattdessen eine Streaming-API verwenden. " – FeanDoe

+0

Ich versuche, das Programm mehrmals in einem Anruf auszuführen, aber es druckt die gleichen Ergebnisse. Im Wesentlichen möchte ich in der Lage sein, Anrufe an die API zu machen, bis ich die Ratelimit treffe. Im Moment wird es jedoch die Ratelimit erreichen, aber immer wieder die gleichen Ergebnisse ausdrucken. Ist das da weg? – shah

Verwandte Themen