【问题标题】:Processing twitter4j query with only Geolocation仅使用地理位置处理 twitter4j 查询
【发布时间】:2014-08-01 03:58:01
【问题描述】:

好的。每次我们只收到 100 条推文。我想在基于地理位置的地图上显示它们。有什么方法可以让我获得 100 条推文,所有推文都具有地理定位功能。因为现在 100 人中只有 3-4 人拥有地理位置。

我阅读了一些使用 FilterQuery 的示例,但处理过程中出现错误,因为未知。

【问题讨论】:

标签: geolocation processing twitter4j


【解决方案1】:

这是一个工作示例。这是使用 twitter4j 4.0.2 测试的

StatusListener 接口是你可以对你的推文做任何你想做的事情的地方……他们到达那里了吗

使用流 API:

import twitter4j.util.*;
import twitter4j.*;
import twitter4j.management.*;
import twitter4j.api.*;
import twitter4j.conf.*;
import twitter4j.json.*;
import twitter4j.auth.*;


TwitterStream twitterStream;


double[][] boundingBox= {
  {
    -180, -90
  }
  , {
    180, 90
  }
}; /// whole world;

void setup() {     
  size(100, 100);    
  background(0); 
  openTwitterStream();
}  


void draw() {     
  background(0);
}  



// Stream it
void openTwitterStream() {  

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setOAuthConsumerKey(FILL_IN);
  cb.setOAuthConsumerSecret(FILL_IN);
  cb.setOAuthAccessToken(FILL_IN);
  cb.setOAuthAccessTokenSecret(FILL_IN);


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

  FilterQuery filter = new FilterQuery();
  filter.locations(boundingBox);


  twitterStream.filter(filter);

  println("connected");
} 


// Implementing StatusListener interface
StatusListener listener = new StatusListener() {

  //@Override
  public void onStatus(Status status) {
    GeoLocation loc = status.getGeoLocation();
    System.out.println("@" + status.getUser().getScreenName() + " - " + loc);
  }

  //@Override
  public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
    System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
  }

  //@Override
  public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
    System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
  }

  //@Override
  public void onScrubGeo(long userId, long upToStatusId) {
    System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
  }

  //@Override
  public void onStallWarning(StallWarning warning) {
    System.out.println("Got stall warning:" + warning);
  }

  //@Override
  public void onException(Exception ex) {
    ex.printStackTrace();
  }
};

【讨论】:

    【解决方案2】:
    import twitter4j.conf.*;
    import twitter4j.*;
    import twitter4j.auth.*;
    import twitter4j.api.*;
    //import twitter4j.FilterQuery;
    import java.util.*;
    
    
    Twitter twitter;
    String searchString = "shopping";
    
    
    Query query; 
    
    
    ArrayList tweets,tweets2;
    
    void setup()
    {
      frameRate(0.2);
      tweets = new ArrayList();
    
      ConfigurationBuilder cb = new ConfigurationBuilder();
      cb.setOAuthConsumerKey("*");
      cb.setOAuthConsumerSecret("*");
      cb.setOAuthAccessToken("*");
      cb.setOAuthAccessTokenSecret("*");
    
      twitter = new TwitterFactory(cb.build()).getInstance();
      query = new Query(searchString);
      getNewTweets();
    }
    
    void draw()
    {
    
    
      try{
    
        if (current >= tweets.size()) //if u read all the received tweets make a new query 
        {  
           tweets.clear();
           tweets2.clear();
          getNewTweets();
            current = 0;
        }
    
    
    
          Status currentTweet = (Status) tweets.get(current);
          GeoLocation loc = currentTweet.getGeoLocation();
          User currentUser=(User) currentTweet.getUser(); //Get User info
    
    
    
            double latitude = currentTweet.getGeoLocation().getLatitude();
            double longitude = currentTweet.getGeoLocation().getLongitude();
    
    
            println( "Longtitude: "+longitude);
            println( "Latitude:  "+latitude);
    
    
    
    
            String user = currentUser.getScreenName();
            String msg = currentTweet.getText();
    
            println( "User: "+user);
            println("Message: "+ msg);
    
    
    
    }
    
     catch (Exception te) {
          println(te);
      }
    
    
    
    
       }
    
       void getNewTweets()
    {
    
    
        try 
        {
    
    
    //     FilterQuery filtro = new FilterQuery();
       /* filtro.locations(boundingBox);
        twitter.addListener(listener);
        twitter.filter(filtro);
          */
    
    
        query.setCount(100); //sets the number of tweets to return per page
        QueryResult result = twitter.search(query); 
        tweets2 = (ArrayList) result.getTweets(); 
    
        for (int i = 0; i < tweets2.size(); i++) { 
         Status currentTweet = (Status) tweets2.get(i);
         GeoLocation loc = currentTweet.getGeoLocation();
    
          if(loc!=null){ //add to list only tweets with geo location
            tweets.add(tweets2.get(i));         
           }
    
        }
        } 
        catch (TwitterException te) 
        {
            System.out.println("Failed to search tweets: " + te.getMessage());
            System.exit(-1);
        } 
    }
    

    【讨论】:

    • 我相信通过这种方式,您可以获取所有推文,并且只添加带有 GeoLocation 数据的推文,因此无论有无 GeoLocation 数据,您仍然可以获得 100 个结果。我不知道是否可以使用搜索 API 仅获取具有 GeoLocation 的那些。仅通过使用上面指出的流 API。我的尝试没有成功...
    • 是的,你是对的。我正在获取所有推文,然后添加带有 GeoLocation 数据的推文。我这样做是因为我可以找到一种方法来获取包含 GeoLocation 数据的 100 条推文。我认为这是一个好方法,但不幸的是,没有多少推文有 GeoLocation 数据。比方说 5/100 。所以这就是为什么我要问如何使用 GeoLocation 数据获取 100 条推文。
    【解决方案3】:

    不是答案,而是简单的解决方法

    我知道大多数人在发推文时都没有启用 GPS,其他人也不想分享他们的位置!

    但他们仍在分享他们的位置!!你猜怎么着?在他们的个人资料上!他们的家乡,他们的国家大多是可见的,这可以为您提供推文来自的大致位置!您可以使用 Rest API 查询用户的个人资料,从而查询他/她的位置

    twitter.showUser(userScreenName).getLocation();

    【讨论】:

      【解决方案4】:

      我认为如果你在搜索之前设置地理编码,那么大部分结果都会有地理定位(高达 90%)。但我不知道为什么不是地理定位的全部结果。也许它会有点帮助?​​

         GeoLocation obj = new GeoLocation(35.8007019, -97.3383211);
         query.setGeoCode(obj, 2000, Unit.valueOf("km"));
         result = twitter.search(query);
      

      【讨论】:

        猜你喜欢
        • 2014-01-18
        • 1970-01-01
        • 2014-07-02
        • 1970-01-01
        • 2018-09-28
        • 2013-05-27
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多