它说Stream Closed错误
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
答案 0 :(得分:4)
Twitter提供following reasons why you may be disconnected:
- 客户端使用相同的凭据建立太多连接。发生这种情况时,将终止最旧的连接。这意味着 你必须小心不要并行运行两个重新连接的客户端 使用相同的凭据,否则他们将轮流断开连接 彼此。
- 客户端突然停止读取数据。如果从流中读取的推文的速率突然下降,则连接将被关闭。
- 客户端读取数据的速度太慢。每个流连接都支持 通过要发送给客户端的消息队列。如果此队列增长 随着时间的推移太大,连接将被关闭。
- 重新启动流媒体服务器。这通常与代码部署有关,并且不常见。
- Twitter的网络配置发生了变化。这些事件非常罕见,代表负载均衡器重启或网络 例如,重新配置。
您应该会收到为什么断开连接的信息,but not always:
Streams可能因各种原因而关闭。流API将尝试传递一条消息,指示流已关闭的原因。请注意,如果断开连接是由于网络问题或客户端读取速度太慢,则可能无法收到此消息。
我的想法是,也许你没有足够快地读取数据 - 尽管我不能肯定地说。尝试实施onStallWarning
以查看是否有任何失速警告,例如:
@Override
public void onStallWarning(StallWarning stallWarning) {
System.out.println(stallWarning);
}