Twitter4J:如何返回样本/过滤方法打印的推文?

时间:2014-07-12 04:42:28

标签: java twitter twitter4j

我在做什么?
我正在尝试使用用户界面构建应用程序。用户将输入搜索词然后使用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)?

1 个答案:

答案 0 :(得分:0)

该程序实现流式api。您的使用案例要求用户输入搜索字词,您必须使用该搜索字词返回推文。

可能的实施:

<强> 1。使用rest api:

使用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:

这不是一个休息api搜索。当您跟踪特定关键字或关注用户时,您可以在推文(直播)时收到推文。这与搜索不同。您无法知道Twitter用户何时使用您要跟踪的关键字进行推文。由于这是一个直播流。

使用可能的关键字启动流。将结果保存在数据库中,并在收到用户请求时搜索数据库。当用户输入新关键字时,请停止该流,将新关键字添加到已跟踪的关键字列表中并启动该流。 [您只能从一个IP地址连接一个流api连接]。