代码之家  ›  专栏  ›  技术社区  ›  user3461851

Twitter-查询特定地理位置半径范围内的推文

  •  0
  • user3461851  · 技术社区  · 10 年前

    我正在尝试形成对Twitter REST API的查询。有没有方法将gps坐标传递到查询中,并返回位于该位置特定半径内的推文。

    3 回复  |  直到 10 年前
        1
  •  1
  •   Jeff Lesser    10 年前

    使用 GET search/tweets 端点,您可以指定地理编码和半径以从该区域中获取一组推特。参数值如下:纬度、经度、半径。

    例如:37.781157,-122.398720,1mi

        2
  •  0
  •   Seohyun Choi    10 年前

    请尝试下面的代码。在尝试之前,您必须将一些值 keyword , latitude , longitude radius . 关键字 是你搜索的内容,我认为你可以理解其他价值观的含义。

    try {
            Query query = new Query(keyword); //
    
            GeoLocation location = new GeoLocation(latitude, longitude);
            String unit = Query.KILOMETERS; // or Query.MILES;
            query.setGeoCode(location, radius, unit);
    
            QueryResult result; 
    
            do {
                result = twitter.search(query);
                List<Status> tweets = result.getTweets();
    
                for (Status tweet : tweets) {
                    System.out.println("@" + tweet.getUser().getScreenName() + " - " + tweet.getText());
                }
    
            } while ((query = result.nextQuery()) != null);
    
        } catch (TwitterException te) {
            System.out.println("Failed to search tweets: " + te.getMessage());
            System.exit(-1);
        }
    
        3
  •  0
  •   Mentya    8 年前

    基于@Seohyun Choi的回答,这是一个完整的带有身份验证的java代码。 在编译此代码之前,请添加 twitter4j-core-3.0.5.jar 在路径中。

    import java.util.List;
    import twitter4j.GeoLocation;
    import twitter4j.Query;
    import twitter4j.QueryResult;
    import twitter4j.Status;
    import twitter4j.Twitter;
    import twitter4j.TwitterException;
    import twitter4j.TwitterFactory;
    import twitter4j.conf.ConfigurationBuilder;
    
    public class TweetsInParticularLocation {
        private static final String TWITTER_CONSUMER_KEY = "****";
        private static final String TWITTER_SECRET_KEY = "*****";
        private static final String TWITTER_ACCESS_TOKEN = "****";
        private static final String TWITTER_ACCESS_TOKEN_SECRET = "***";
    public static void main(String arg[])
    {
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
            .setOAuthConsumerKey(TWITTER_CONSUMER_KEY)
            .setOAuthConsumerSecret(TWITTER_SECRET_KEY)
            .setOAuthAccessToken(TWITTER_ACCESS_TOKEN)
            .setOAuthAccessTokenSecret(TWITTER_ACCESS_TOKEN_SECRET);
        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();
    
        try {
            Query query = new Query("India"); //
    
            GeoLocation location = new GeoLocation(20.593684, 78.962880); //latitude, longitude
            String unit = Query.KILOMETERS; // or Query.MILES;
            query.setGeoCode(location, 1, unit); //location, radius, unit
    
            QueryResult result; 
    
            do {
                result = twitter.search(query);
                List<Status> tweets = result.getTweets();
    
                for (Status tweet : tweets) {
                    System.out.println("@" + tweet.getUser().getScreenName() + " - " + tweet.getText());
                }
    
            } while ((query = result.nextQuery()) != null);
    
        } catch (TwitterException te) {
            System.out.println("Failed to search tweets: " + te.getMessage());
            System.exit(-1);
        }
    
    }}