巴基斯坦Twitter Stream Latitude and Longitude盒子

时间:2014-08-29 06:10:05

标签: java twitter location latitude-longitude

我想按位置和语言过滤推特流。但面临错误。

我使用了链接中提到的位置参数 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"}));


     .

请帮我,我哪里错了?

1 个答案:

答案 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}};