我想按位置和语言过滤推特流。但面临错误。
我使用了链接中提到的位置参数 Passing Longitude and Latitude in Twitter Streaming API of Pakistan
错误: 7924 [Twitter Stream consumer-1 [建立连接]] WARN twitter4j.TwitterStreamImpl - 角色不接受参数。 406:当请求中指定了无效格式时,由Search API返回。
当一个或多个参数不适合资源时,由Streaming API返回。例如,track参数会在以下情况下抛出此错误:
跟踪关键字太长或太短。
指定的边界框无效。
没有为过滤后的资源定义谓词,例如,既不跟踪也不遵循 参数定义。
无法读取跟踪用户ID。
未找到过滤器参数。预计至少有一个参数:跟踪轨道位置
LinkedBlockingQueue<Status> queue = new LinkedBlockingQueue<Status>(1000);
SpoutOutputCollector _collector = collector;
StatusListener listener = new StatusListener() {
@Override
public void onStatus(Status status) {
System.out.println(status.getLang());
System.out.println(status.getPlace());
System.out.print(status.getText());
}
@Override
public void onDeletionNotice(StatusDeletionNotice sdn) {
}
@Override
public void onTrackLimitationNotice(int i) {
}
@Override
public void onScrubGeo(long l, long l1) {
}
@Override
public void onException(Exception e) {
}
@Override
public void onStallWarning(StallWarning arg0) {
// TODO Auto-generated method stub
}
};
TwitterStreamFactory fact = new TwitterStreamFactory(new ConfigurationBuilder().setUser(_username).setPassword(_pwd).build());
TwitterStream _twitterStream = fact.getInstance();
_twitterStream.addListener(listener);
ArrayList<Long> follow = new ArrayList<Long>();
ArrayList<String> track = new ArrayList<String>();
long[] followArray = new long[follow.size()];
String[] trackArray = track.toArray(new String[track.size()]);
/**
* Upper/northern latitude that marks the
* upper bounds of the geographical area
* for which tweets need to be analysed.
*/
double northLatitude = 35.2;
/**
* Lower/southern latitude. Marks the lower bound.
*/
double southLatitude = 25.2;
/**
* Eastern/left longitude. Marks the left-side bounds.
*/
double eastLongitude = 62.9;
/**
* Western/right longitude. Marks the right-side bounds.
*/
double westLongitude = 73.3;
double bb[][] = {{eastLongitude, southLatitude}
,{westLongitude, northLatitude}};
_twitterStream.filter(new FilterQuery(0, followArray,trackArray,bb,new String[]{"en-US"}));
.
请帮我,我哪里错了?
答案 0 :(得分:2)
再次尝试阅读Passing Longitude and Latitude in Twitter Streaming API of Pakistan。
它清楚地说明为了正确地给出方框坐标,你需要以左下 - 经度,左下 - 纬度,右上 - 右,右 - 右 - 纬度的格式显示它们强>
这意味着西,南,东北。
你有:
double locationsPakistan[][] = {{eastLongitude, southLatitude}
,{westLongitude, northLatitude}};
尝试:
double locationsPakistan[][] = {{westLongitude, southLatitude}
,{eastLongitude, northLatitude}};
<强>更新强>
根据您的代码编辑后的评论,您现在拥有:
double northLatitude = 35.2;
double southLatitude = 25.2;
double eastLongitude = 62.9;
double westLongitude = 73.3;
double bb[][] = {{eastLongitude, southLatitude},{westLongitude, northLatitude}};
你正在混合东/西左/右。
您的评论显示为“东/左经度。标记左侧边界。”
East是正确的边界。 同样West是左侧边界。 西应该&lt;东
这样做:
double northLatitude = 35.2;
double southLatitude = 25.2;
double westLongitude = 62.9;
double eastLongitude = 73.3;
double bb[][] = {{westLongitude, southLatitude},{eastLongitude, northLatitude}};