使用主题标签查找推特状态
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);
}
我一直在尝试使用此方法在我的推特客户端中获取一些推特状态:
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);
}