JavaTwitter4j:如何返回通过示例/过滤器方法打印的tweet?
我在做什么
我正在尝试构建一个具有用户界面的应用程序。用户将输入搜索词,然后使用websocket连接,我将开始将过滤后的推文返回到UI
我做了什么
我有一个TwitterFilter
类
public TwitterFilter(String searchTerm) {
final ConfigurationBuilder configurationBuilder = getConfigurationBuilder();
twitterStream = new TwitterStreamFactory(configurationBuilder.build()).getInstance();
final StatusListener statusListener = getStatusListener();
filterQuery = new FilterQuery();
filterQuery.track(new String[] { searchTerm });
filterQuery.language(new String[] { "en" });
twitterStream.addListener(statusListener);
}
public void getFilteredTweets() {
twitterStream.filter(filterQuery);
}
private static StatusListener getStatusListener() {
return new StatusListener() {
@Override
public void onStatus(final Status status) {
System.out.println(status.getText());
}
@Override
public void onDeletionNotice(final StatusDeletionNotice statusDeletionNotice) {
}
@Override
public void onTrackLimitationNotice(final int i) {
}
@Override
public void onScrubGeo(final long userId, final long upToStatusId) {
}
@Override
public void onStallWarning(final StallWarning stallWarning) {
}
@Override
public void onException(final Exception e) {
e.printStackTrace();
}
};
}
private static ConfigurationBuilder getConfigurationBuilder() {
final ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setDebugEnabled(true);
configurationBuilder.setOAuthConsumerKey(CONSUMER_KEY);
configurationBuilder.setOAuthConsumerSecret(CONSUMER_SECRET);
configurationBuilder.setOAuthAccessToken(ACCESS_TOKEN);
configurationBuilder.setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET);
return configurationBuilder;
}
一个包含websocket代码的类,需要返回Twitter过滤的tweets,如下所示
@ServerEndpoint("/tweets")
public class TweetStreamServer {
@OnMessage
public void tweets(final String message, final Session client) throws IOException, InterruptedException {
final TwitterFilter twitterFilter = new TwitterFilter("india");
for (final Session peer: client.getOpenSessions()) {
peer.getBasicRemote().sendText(twitterFilter.getFilteredTweets()); // compilation error
}
}
}
问题
既然filter()
或sample()
方法都不返回任何内容(void
),我该如何返回tweet?(documentation)
# 1 楼答案
这个程序实现了流式api。您的用例要求用户输入搜索词,您必须返回带有该搜索词的推文
可能的实施方式:
1。使用RESTAPI:
使用oauth并使用用户凭据登录,然后返回您收到的推文
https://github.com/yusuke/twitter4j/blob/master/twitter4j-examples/src/main/java/twitter4j/examples/search/SearchTweets.java
速率限制:https://dev.twitter.com/docs/rate-limiting/1.1/limits 您每15分钟只能收到180条推文(每个用户)
2。流媒体api:
这不是RESTAPI搜索。当你跟踪某个关键词或跟踪某个用户时,你会在推特(实时)时收到推特。这与搜索不同。您无法知道twitter用户何时使用您正在跟踪的关键字进行推文。因为这是一条实时流
使用可能的关键字启动流。将结果保存在数据库中,并在收到用户请求时搜索数据库。当用户输入新关键字时,停止流,将新关键字添加到已跟踪的关键字列表中,然后启动流。[您只能从一个IP地址连接到流式api]