【问题标题】:Twitter4J: How do I return the tweets printed by sample/filter methods?Twitter4J:如何返回通过采样/过滤方法打印的推文?
【发布时间】:2014-07-14 13:28:24
【问题描述】:

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

【问题讨论】:

    标签: java twitter twitter4j


    【解决方案1】:

    这个程序实现了流式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:

    这不是一个 rest api 搜索。当您跟踪特定关键字或关注用户时,只要推文(实时)发布,您就会收到推文。这与搜索不同。您无法知道 Twitter 用户何时使用您正在跟踪的关键字发布推文。因为这是直播。

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

    【讨论】:

    • 所以我的理解是,我可以跟踪多个关键字以在不同的时间由不同的用户跟踪,这对于 Streaming API 是不可行的
    • 不,您可以跟踪多个关键字,在单个流连接本身中关注多个用户。
    猜你喜欢
    • 2018-10-04
    • 2014-12-19
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多