2013-06-25 2 views
4

Привет всем,Сбор геотегами твиты с Twitter4j

public static void main(String[] args) { 
    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setDebugEnabled(true); 
    cb.setOAuthConsumerKey("xxxxxx"); 
    cb.setOAuthConsumerSecret("xxxx"); 
    cb.setOAuthAccessToken("xxxx"); 
    b.setOAuthAccessTokenSecret("xxxxxxx"); 

    TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance(); 

    StatusListener listener = new StatusListener() { 

     @Override 
     public void onException(Exception arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onDeletionNotice(StatusDeletionNotice arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
      public void onScrubGeo(long arg0, long arg1) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onStatus(Status status) { 
      User user = status.getUser(); 

      // gets Username 
      String username = status.getUser().getScreenName(); 
      System.out.println(username); 
      String profileLocation = user.getLocation(); 
      System.out.println(profileLocation); 
      long tweetId = status.getId(); 
      System.out.println(tweetId); 
      String content = status.getText(); 
      System.out.println(content +"\n"); 
      GeoLocation geolocation = status.getGeoLocation(); 

      System.out.println(geolocation +"\n"); 


     } 

     @Override 
     public void onTrackLimitationNotice(int arg0) { 
      // TODO Auto-generated method stub 
      System.out.println("onTrackLimitationNotice" +"\n"); 

     } 

     @Override 
     public void onStallWarning(StallWarning arg0) { 
      // TODO Auto-generated method stub 
      System.out.println("onStallWarning" +"\n"); 

     } 

    }; 
    FilterQuery fq = new FilterQuery(); 
    double lat = 53.186288; 
    double longitude = -8.043709; 
    double lat1 = lat - 4; 
    double longitude1 = longitude - 8; 
    double lat2 = lat + 4; 
    double longitude2 = longitude + 8; 
    twitterStream.addListener(listener); 
    double[][] bb= {{lat1,longitude1}, {lat2 ,longitude2}}; 

    // fq.track(keywords); 
    fq.locations(bb); 


    twitterStream.filter(fq); 

} 

Этот код является сбор твитов в общем Великобритании & Ирландии место, но не собирает твиты или иногда (редко) собирает твиты из районов за пределами ограничительной рамки ,

Если я расширяю ограничительную рамку, я получаю твиты, но иногда они находятся за пределами ограничивающей рамки.

Я работаю от логики, что 1-я точка ограничительной рамки - это SW-угол, а следующая точка - NE-угол.

Любые идеи в чем проблема? Я использую Twitter4j 3.0.3

Спасибо,

Дэвид

+0

Например, при выполнении этого кода я получил чириканье от -4.65842064, 55.40764413, который на Сейшельских островах .... поэтому, очевидно, моя логика не так-то, как мой ограничивающей поле должно быть {{49.186288, -16.043709}, {57.186288, 0.043709}}? и этот твит должен быть вне его –

ответ

3

Я думаю, что вы отправляете координаты в неправильном порядке. Согласно Filter Spec, Twitter ожидает разделенный запятой список долготы, широту, но вы отправляете пары (широта, долгота).

Правильная версия должна быть:

double lat = 53.186288; 
double longitude = -8.043709; 
double lat1 = lat - 4; 
double longitude1 = longitude - 8; 
double lat2 = lat + 4; 
double longitude2 = longitude + 8; 

double[][] bb = {{longitude1, lat1}, {longitude2, lat2}}; 

FilterQuery fq = new FilterQuery(); 
fq.locations(bb); 
twitterStream.filter(fq); 
+0

Да - это работает спасибо. Извините, думал, как я бы сказал, что это «широта и долгота» –

+0

Я также заметил, что все еще получаю твиты, которые возвращают геолокацию как «нуль» - интересно, почему API дает мне эти твиты? –

+1

Просто сделал тот же запрос с curl и возвратил действительное поле координат для каждого твита: ... «координат»: {«type»: «Point», «maps»: [- 1.27016675,52.99986186]} ... Похож на ответ ожидается, и каждый твит соответствует фильтру местоположения. – edrabc