2013-06-27 15 views
5

mówi error Stream zamknięteStream Closed błąd w twitter4j jak rozwiązać

public class StreamAPI { 

    public static void main(String[] args) { 


     ConfigurationBuilder cb = new ConfigurationBuilder(); 
     cb.setDebugEnabled(true); 
     cb.setOAuthConsumerKey("xxxx"); 
     cb.setOAuthConsumerSecret("xxx"); 
     cb.setOAuthAccessToken("xx-xx"); 
     cb.setOAuthAccessTokenSecret("xxx"); 
     cb.setUseSSL(true); 
     cb.setUserStreamRepliesAllEnabled(true); 


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

     AccessToken accestoken = new AccessToken("xx-xx", "xxx"); 

     twitterStream.setOAuthAccessToken(accestoken); 
     StatusListener listener = new StatusListener() { 

      public void onStatus(Status status) { 
       System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
      } 

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

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

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

      @Override 
      public void onStallWarning(StallWarning stallWarning) { 
       //To change body of implemented methods use File | Settings | File Templates. 
      } 

      public void onException(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 

     FilterQuery fq = new FilterQuery(); 
     String keywords[] = {"France", "Germany"}; 

     fq.track(keywords); 

     twitterStream.addListener(listener); 
     twitterStream.filter(fq); 

    } 

} 

otrzymuję error

Stream closed. 
Relevant discussions can be found on the Internet at: 
    http://www.google.co.jp/search?q=a8fd061d or 
    http://www.google.co.jp/search?q=00070a0c 
TwitterException{exceptionCode=[a8fd061d-00070a0c a8fd061d-0007099d], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3} 
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:199) 
    at twitter4j.StatusStreamImpl.next(StatusStreamImpl.java:57) 
    at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.run(TwitterStreamImpl.java:478) 
Caused by: java.io.IOException: the end of the stream has been reached 
    at twitter4j.StatusStreamBase.handleNextElement(StatusStreamBase.java:88) 
    ... 2 more 

Ale sama konfiguracja działa dla TwitterAPI

Odpowiedz

4

Twitter daje following reasons why you may be disconnected:

  • Klient ustanawia zbyt wiele połączeń z tymi samymi danymi uwierzytelniającymi. W takim przypadku najstarsze połączenie zostanie zakończone. Oznacza to, że należy zachować ostrożność, aby nie uruchamiać dwóch ponownych połączeń klientów równolegle z tymi samymi danymi uwierzytelniającymi, ponieważ w przeciwnym razie będą się wzajemnie rozłączać, rozłączając między sobą .
  • Klient nagle zatrzymuje czytanie danych. Jeśli szybkość odczytu Tweets ze strumienia spadnie nagle, połączenie zostanie zamknięte.
  • Klient czyta dane zbyt wolno. Każde połączenie transmisji strumieniowej jest wspierane przez kolejkę wiadomości, które mają zostać wysłane do klienta. Jeśli kolejka ta będzie zbyt duża w czasie, połączenie zostanie zamknięte.
  • Serwer przesyłania strumieniowego jest restartowany. Jest to zwykle związane z wdrożeniem kodu i nie jest zbyt częste.
  • Zmiany w konfiguracji sieci na Twitterze. Zdarzenia te są niezwykle rzadkie i na przykład reprezentowałyby ponowne uruchomienie systemu równoważenia obciążenia lub rekonfigurację sieci.

powinien otrzymać informację na dlaczego zostałeś odłączony, but not always:

Strumienie mogą być zamknięte z różnych powodów. Strumieniowy interfejs API podejmie próbę dostarczenia komunikatu wskazującego, dlaczego strumień został zamknięty. Pamiętaj, że jeśli rozłączenie było spowodowane zbyt dużymi problemami z siecią lub zbyt wolnym odczytywaniem klienta, możliwe, że ten komunikat nie zostanie odebrany.

Moja myśl polega na tym, że być może nie czytasz wystarczająco szybko danych - chociaż nie mogę powiedzieć na pewno. Spróbuj wdrożyć onStallWarning, aby sprawdzić, czy otrzymujesz ostrzeżenia o przeciągnięciu, np .:

@Override 
public void onStallWarning(StallWarning stallWarning) { 
    System.out.println(stallWarning); 
} 
Powiązane problemy