使用主题标签查找推特状态

Find twitter status using a hashtag

我一直在尝试使用此方法在我的推特客户端中获取一些推特状态:

Query query = new Query("#something");
    QueryResult result = twitter.search(query);

    for (Status status : result.getTweets()) {
        System.out.println("@" + status.getUser().getScreenName() + ": " + status.getText());
       // arrayList.add( "@" + status.getUser().getScreenName() + ": " + status.getText());
    }

这很好用,但我也在尝试将其添加到数组列表中,此数组列表将在查询后初始化,然后显示在 UI 中的列表中。

这也能正常工作,但如果我在客户端 运行 时在此主题标签上添加另一条推文,应用程序不会将其添加到我在 UI 中的视图中。

我做了一些研究,发现我可以改用 Steam,这就是我的发现:

    ConfigurationBuilder cb = new ConfigurationBuilder();
                    cb.setDebugEnabled(true)
                            .setOAuthConsumerKey("*********************")
                            .setOAuthConsumerSecret("*********************")
                            .setOAuthAccessToken("*********************")
                            .setOAuthAccessTokenSecret("*********************");
                    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 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");

                        }


                      .........
                    FilterQuery fq = new FilterQuery("#something");

                    String keywords[] = {"ireland"};

                    fq.track(keywords);

                    twitterStream.addListener(listener);
                    twitterStream.filter(fq);

                }

}

这就是出现问题的地方,所以当我将第二种解决方案与流一起使用时,它不会提取主题标签,但关键字会起作用。那么如何让流与流一起工作标签?

经过一段时间的研究,我找到了解决方案。

使用 TwitterFactory 而不是 TwitterStreamFactory 我能够使用如下所示的特定 hastags。

 public static void startTweets() {
    ConfigurationBuilder cb = new ConfigurationBuilder();

                         cb.setOAuthConsumerKey("*********************")
                        .setOAuthConsumerSecret("*********************")
                        .setOAuthAccessToken("*********************")
                        .setOAuthAccessTokenSecret("*********************");
    Twitter twitter = new TwitterFactory(cb.build()).getInstance();


}

    public static void getFeed(String hash)  throws TwitterException  {

        Query query = new Query("#"+hash);

        QueryResult result = twitter.search(query);

        for (Status status : result.getTweets()) {
            System.out.println("@" + status.getUser().getScreenName() + ": " + status.getText());
            String username =status.getUser().getScreenName() ;

            String message = status.getText();
            twitter.showUser(username).getLocation();
            int Followers = twitter.showUser(username).getFollowersCount();

            main.AddtoList(username,message, Followers);

}