0

我有一个特定的要求,我想根据以下参数收集所有推文

1)我使用搜索 API,例如我想搜索“Iphone6”

2)区域明智,即如果我根据城市指定纬度和经度我得到结果,是否可以在国家/地区明智地获取所有结果(如代码中当我指定印度的纬度和经度时它不起作用!)

3)我应该在什么时间间隔运行我的应用程序,这样我才能获得新更新的推文,而不会获得以前获取的推文。

This is the code that I have written 


  public final class twitterdate {


    public static void main(String[] args)throws Exception {

        double res;
        double lat,lon;

        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey("MyKEY")
                .setOAuthConsumerSecret("MySecret")
                .setOAuthAccessToken("MyAccesstoken")

                .setOAuthAccessTokenSecret("MyTokenSecret").setHttpConnectionTimeout(100000);




        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();

        lat=18.9750;  // THis works , but it doenst work when I specify latitude and longitude of India
        lon=72.8258;
        res=1;

        try {





           QueryResult result=twitter.search(new Query("iphone").since("2014-11-19").until("2014-11-22").geoCode(new GeoLocation(lat, lon), res,"1mi"));
           // Since and untill doesnt work as expected sometimes it fetches the date tweets specified on "since" method sometimes fetches the tweets specified on the date of until method
           // Also since and until doesnt work when i specify a time stamp.
           List<Status> qrTweets = result.getTweets();
              System.out.println("hi");

            for (Status tweet : qrTweets )  
            {   
                 System.out.println( tweet.getId() + " " + "@" + tweet.getUser().getScreenName()  + " : " + tweet.getText() + " :::" + tweet.getCreatedAt() );  
            }

        } catch (TwitterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


}

如果有人可以帮助我满足我的要求,我会非常感激,因为我已经用谷歌搜索了很多但找不到任何合适的解决方案。提前致谢 !

4

1 回答 1

0

您是否尝试过使用 FilterQuery?下面的代码片段将为您提供连续的推文流。据我了解,您想从印度获取与 iphone6 相关的推文。使用搜索查询,您最终可能会一遍又一遍地获得相同的推文集。

你可以在下面尝试这样的事情,我不确定你用什么坐标从印度获取推文!你必须做一些试验和错误并微调你想要定位你的推文的坐标。

    StatusListener listener = new StatusListener(){
        public void onStatus(Status status) {
            //if (status.getText().contains)
            if(status.getUser().getLang().equalsIgnoreCase("en")
                    || status.getUser().getLang().equalsIgnoreCase("en_US")) {
                System.out.println(status.getUser().getName() + " :: " + status.getText() + " :: " + status.getGeoLocation());
            }
        }
        public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {}
        public void onTrackLimitationNotice(int numberOfLimitedStatuses) {}
        public void onException(Exception ex) {
            ex.printStackTrace();
        }
        public void onScrubGeo(long arg0, long arg1) {

        }
        public void onStallWarning(StallWarning arg0) {

        }
    };

    ConfigurationBuilder config = new ConfigurationBuilder();
    config.setOAuthConsumerKey("");
    config.setOAuthConsumerSecret("");
    config.setOAuthAccessToken("");
    config.setOAuthAccessTokenSecret("");

    TwitterStream twitterStream = new TwitterStreamFactory(config.build()).getInstance();
    twitterStream.addListener(listener);
    FilterQuery query = new FilterQuery();
    // New Delhi India
    double lat = 28.6;
    double lon = 77.2;

    double lon1 = lon - .5;
    double lon2 = lon + .5;
    double lat1 = lat - .5;
    double lat2 = lat + .5;

    double box[][] = {{lon1, lat1}, {lon2, lat2}};

    query.locations(box);

    String[] trackArray = {"iphone"}; 
    query.track(trackArray);
    twitterStream.filter(query);

然而,FilterQuery 有一个警告,它使用 location OR trackList 来获取数据。为了解决这个问题,您可以将内容过滤器逻辑放在 onStatus() 方法中。

希望这对您有所帮助。

于 2014-11-27T08:04:11.193 回答