我在做什么?
我正在尝试使用用户界面构建应用程序。用户将输入搜索词然后使用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过滤的推文,看起来像
@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
),我该如何返回推文? (documentation)?
答案 0 :(得分:0)
该程序实现流式api。您的使用案例要求用户输入搜索字词,您必须使用该搜索字词返回推文。
可能的实施:
<强> 1。使用rest api:
使用oauth并使用用户凭据登录,然后返回您获得的推文。
费率限制:https://dev.twitter.com/docs/rate-limiting/1.1/limits 每15分钟(每位用户)只能获得180条推文。
<强> 2。流式api:
这不是一个休息api搜索。当您跟踪特定关键字或关注用户时,您可以在推文(直播)时收到推文。这与搜索不同。您无法知道Twitter用户何时使用您要跟踪的关键字进行推文。由于这是一个直播流。
使用可能的关键字启动流。将结果保存在数据库中,并在收到用户请求时搜索数据库。当用户输入新关键字时,请停止该流,将新关键字添加到已跟踪的关键字列表中并启动该流。 [您只能从一个IP地址连接一个流api连接]。