2016-04-15 16 views
1

Ich möchte in Echtzeit einen Tweet hören, was bedeutet, wenn jemand Tweets macht, möchte ich diesen Tweet sehen.Tweets in Echtzeit anhören

Allerdings konnte ich Tweets von meinem News Feed mit twitter4j Bibliothek bekommen. Hier ist der Code.

package twitteroperation; 

import java.util.List; 
import twitter4j.Status; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.conf.ConfigurationBuilder; 

public class TwitterOperation { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws TwitterException { 


      ConfigurationBuilder cb = new ConfigurationBuilder(); 

      cb.setDebugEnabled(true) 
       .setOAuthConsumerKey("") 
       .setOAuthConsumerSecret("") 
       .setOAuthAccessToken("") 
       .setOAuthAccessTokenSecret(""); 

    TwitterFactory tf=new TwitterFactory(cb.build()); 

    twitter4j.Twitter tw=tf.getInstance(); 

     List<Status> statuses= tw.getHomeTimeline(); 

     for (Status status1 : statuses) { 
      System.out.println(status1.getUser().getName() + ":" + status1.getText()); 

     } 
    } 
} 

Ich habe festgestellt, dass ich Streaming-APIs verwenden müssen, um auf Tweets in Echtzeit zuzugreifen. Aber ich konnte in Java keinen Beispielcode finden, um auf Tweets zu zugreifen.

Antwort

2

Twitter4J enthält Beispiele, und einer von ihnen ist exactly what you are looking for, jedoch müssen Sie die Zeile

TwitterStream twitterStream = new TwitterStreamFactory().getInstance(); 

mit

 ConfigurationBuilder cb = new ConfigurationBuilder(); 
     cb.setDebugEnabled(true).setOAuthConsumerKey("") 
       .setOAuthConsumerSecret("") 
       .setOAuthAccessToken("") 
       .setOAuthAccessTokenSecret(""); 

     TwitterStream twitterStream = new TwitterStreamFactory(cb.build()) 
       .getInstance(); 

Wenn Sie das nicht tun, werden Sie die Eigenschaften konfigurieren müssen Datei. Danach erhalten Sie diesen Code

import twitter4j.*; 
import twitter4j.conf.ConfigurationBuilder; 

public final class PrintSampleStream { 

    public static void main(String[] args) throws TwitterException { 
     ConfigurationBuilder cb = new ConfigurationBuilder(); 
      cb.setDebugEnabled(true).setOAuthConsumerKey("") 
        .setOAuthConsumerSecret("") 
        .setOAuthAccessToken("") 
        .setOAuthAccessTokenSecret(""); 
      TwitterStream twitterStream = new TwitterStreamFactory(cb.build()) 
        .getInstance(); 
     StatusListener listener = new StatusListener() { 
      @Override 
      public void onStatus(Status status) { 
       System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
      } 

      @Override 
      public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
       System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
      } 

      @Override 
      public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
       System.out.println("Got track limitation notice:" + numberOfLimitedStatuses); 
      } 

      @Override 
      public void onScrubGeo(long userId, long upToStatusId) { 
       System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
      } 

      @Override 
      public void onStallWarning(StallWarning warning) { 
       System.out.println("Got stall warning:" + warning); 
      } 

      @Override 
      public void onException(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 
     twitterStream.addListener(listener); 
     twitterStream.sample(); 
    } 
} 

Mit diesem erhalten Sie den öffentlichen Beispielstream zu erhalten. Wenn Sie bestimmte Tweets erhalten möchten, müssen Sie einige Filter verwenden. Wenn Sie zum Beispiel die Tweets für eine bestimmte Abfrage wollen, müssen Sie diese Zeile

twitterStream.sample(); 

mit dem Wort ändern, die Sie

FilterQuery filtre = new FilterQuery(); 
String[] keywordsArray = { "obama" }; 
filtre.track(keywordsArray); 
twitterStream.filter(filtre); 

möchten Wenn Sie Tweets von Spezifika streamen möchten Profile müssen Sie Verwenden Sie den folgenden Filter. Die Linie twitterStream.sample(); Sie benötigen es ändern zu diesem

  long[] users = new long[]{someid,someotherid,otherid}; 
      twitterStream.addListener(listener); 
      FilterQuery filtre = new FilterQuery(); 
      filtre.follow(users); 
      twitterStream.filter(filtre); 

die IDs für die Anordnung sind die IDs, dass Twitter für jeden Benutzer verwenden. Wenn Sie nicht die ID für einen bestimmten Benutzer wissen, dass Sie es mit Twitter4J bekommen konnte:

User user = tw.showUser("barackobama"); //tw is your Twitter variable from twitter4j.Twitter tw=tf.getInstance(); 
long id = user.getId(); 

Es gibt mehr Möglichkeiten, um Tweets aus dem Stream abzurufen, müssen Sie nur die Dokumentation lesen oder auf dieser Seite suchen. Viel Glück!

+0

Was ist dieser 'ConfigurationBuilder'? Ich bekomme hier einen Fehler. 'ConfigurationBuilder kann nicht aufgelöst werden' –

+0

Die Lösung für den obigen Kommentar gefunden. Ich muss das importieren. 'import twitter4j.conf. *;' Immer noch deine Antwort :) –

+0

Wow, ich habe diesen Import vergessen, danke! – FeanDoe

1

Ich würde Ihnen empfehlen, die Twitter HBC project auszuprobieren. Es gibt einige gute Beispiele auf der Startseite, wie Sie eine BlockingQueue für die Aufnahme von Ereignissen einrichten können.

+0

Ich ging durch den Link, den Sie angegeben haben. Wie setze ich dieses Projekt auf meiner Eclipse-IDE? –

+0

Ich habe einige interessante Dinge gefunden. Danke @EmilForslund –