Я хочу фильтровать твиттер-потоки по местоположению и языку. Но перед ошибкой.
Я использовал параметр местоположения, упомянутый в ссылке Passing Longitude and Latitude в Twitter Streaming API Пакистана
Ошибка: 7924 [Twitter Stream consumer-1 [Установление соединения]] WARN twitter4j.TwitterStreamImpl - Параметр не принимается с ролью. 406: Возврат API поиска, когда в запросе указан недопустимый формат.
Возвращается потоковым API, когда один или несколько параметров не подходят для ресурса. Например, параметр трека будет вызывать эту ошибку, если:
Ключевое слово трека слишком длинное или слишком короткое.
Указанная ограничивающая рамка недействительна.
Никакие предикаты, определенные для фильтрованного ресурса, например, не отслеживаются и не следуют указанному параметру.
Невозможно прочитать следующую команду.
Параметры фильтра не найдены. Ожидайте хотя бы один параметр: следуйте за местоположениями дорожек
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"}));
.
Пожалуйста, помогите мне, где я ошибаюсь?
Попробуйте снова прочитать " Передача долготы и широты" в Twitter Streaming API Пакистана.
Он четко говорит, что для правильной установки координат коробки необходимо иметь их в формате нижний левый-долгота, нижний-левый-широтный, верхний-право-долгота, верх-правая широта.
Это означает запад, юг, восток север.
У тебя есть:
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}};
Вы смешиваете Восток/Запад влево/вправо.
Ваши комментарии показывают это, поскольку у вас есть " Восточная/левая долгота". Отмечает границы слева.
Восток - это правая сторона. Точно так же Запад - это левая сторона. Запад должен быть <Восток.
Так сделайте так:
double northLatitude = 35.2;
double southLatitude = 25.2;
double westLongitude = 62.9;
double eastLongitude = 73.3;
double bb[][] = {{westLongitude, southLatitude},{eastLongitude, northLatitude}};