首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只使用地理位置处理twitter4j查询

只使用地理位置处理twitter4j查询
EN

Stack Overflow用户
提问于 2014-08-01 03:58:01
回答 4查看 3.2K关注 0票数 1

好的。每次我们只有100条推特。我想根据地理位置在地图上显示。有没有办法让我得到100条推特都有地理位置。因为现在100个中只有3-4有地理定位。

我用FilterQuery阅读了一些示例,但是处理会给我带来一个错误,因为它是未知的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-01 16:38:15

下面是一个有用的例子。这是用twitter4j 4.0.2测试的。

界面StatusListener是你可以用你的推特做任何你想做的.他们到了吗?

使用流API:

代码语言:javascript
复制
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();
  }
};
票数 3
EN

Stack Overflow用户

发布于 2014-08-01 16:13:29

代码语言:javascript
复制
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);
    } 
}
票数 0
EN

Stack Overflow用户

发布于 2015-02-16 02:57:51

不是一个答案,而是一个简单的解决办法

我知道大多数人在推特上没有启用GPS,其他人也不愿意分享他们的位置!

但是他们仍然在分享他们的位置!!猜猜怎么回事?在他们的档案上!他们的家乡,他们的国家大部分是可见的,这可以给你一个大概的位置,从哪里来的推特!可以使用Rest查询用户的配置文件,从而查询他/她的位置

twitter.showUser(userScreenName).getLocation();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25072661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档