5

ストリームクローズエラーと表示されます

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

    }

}

エラーが発生しています

   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

ただし、同じ構成が TwitterAPI でも機能します。

4

1 に答える 1

5

Twitter は、切断される可能性がある理由を次のように示しています。

  • クライアントが同じ資格情報で確立する接続が多すぎます。これが発生すると、最も古い接続が終了します。これは、再接続する 2 つのクライアントを同じ資格情報で並行して実行しないように注意する必要があることを意味します。
  • クライアントがデータの読み取りを突然停止します。ストリームから読み取られるツイートのレートが突然低下した場合、接続は閉じられます。
  • クライアントのデータ読み取りが遅すぎる。すべてのストリーミング接続は、クライアントに送信されるメッセージのキューによって支えられています。このキューが時間の経過とともに大きくなりすぎると、接続が閉じられます。
  • ストリーミング サーバーが再起動されます。これは通常、コードのデプロイに関連しており、あまり頻繁ではありません。
  • Twitter のネットワーク構成が変更されました。これらのイベントは非常にまれであり、ロード バランサーの再起動やネットワークの再構成などを表します。

切断された理由に関する情報を受け取る必要がありますが、常にではありません。

ストリームは、さまざまな理由でシャットダウンされる場合があります。ストリーミング API は、ストリームが閉じられた理由を示すメッセージを配信しようとします。切断の原因がネットワークの問題またはクライアントの読み込みが遅すぎる場合、このメッセージが受信されない可能性があることに注意してください。

私の考えでは、データを十分にすばやく読み取っていない可能性がありますが、確かなことは言えません。実装onStallWarningしてみて、ストールの警告が表示されるかどうかを確認してください。

@Override
public void onStallWarning(StallWarning stallWarning) {
    System.out.println(stallWarning);
}
于 2013-06-27T08:13:14.773 に答える