有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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]