簡體   English   中英

Twitter4J:如何返回通過樣本/過濾器方法打印的推文?

[英]Twitter4J: How do I return the tweets printed by sample/filter methods?

我在做什么?
我正在嘗試使用用戶界面構建應用程序。 用戶將輸入搜索詞,然后使用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 ),我該如何返回推文? 文檔 )?

該程序實現流式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的一個連接]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM