簡體   English   中英

從Twitter HBC API獲取推文

[英]Get Tweets from Twitter hbc API

public class TwitterStreamImpl implements TwitterStream {

    public void setUpStream() throws InterruptedException {
        final String consumerKey = getTwitterCredentials().get(0).toString();
        final String consumerSecret = getTwitterCredentials().get(1).toString();
        final String token = getTwitterCredentials().get(2).toString();
        final String secret = getTwitterCredentials().get(3).toString();

        BlockingQueue<String> queue = new LinkedBlockingQueue<String>(10000);
        StatusesFilterEndpoint endpoint = new StatusesFilterEndpoint();
        // add some track terms
        endpoint.trackTerms(Lists.newArrayList("twitterapi", "#yolo", "trump", "donald", "lol"));

        Authentication auth = new OAuth1(consumerKey, consumerSecret, token, secret);
        // Authentication auth = new BasicAuth(username, password);

        // Create a new BasicClient. By default gzip is enabled.
        BasicClient client = new ClientBuilder()
                .hosts(Constants.STREAM_HOST)
                .endpoint(endpoint)
                .authentication(auth)
                .processor(new StringDelimitedProcessor(queue))
                .build();

        // Establish a connection
        client.connect();

        // Do whatever needs to be done with messages
        for (int msgRead = 0; msgRead < 1000; msgRead++) {
          if (client.isDone()) {
            System.out.println("Client connection closed unexpectedly: " + client.getExitEvent().getMessage());
            break;
          }

          String msg = queue.poll(5, TimeUnit.SECONDS);
          if (msg == null) {
            System.out.println("Did not receive a message in 5 seconds");
          } else {
            System.out.println(msg);
          }
        }

        client.stop();
    }

    /**
     * Reads twitterStup.txt from C:/Users/"user"/documents/ and returns them as
     * an array
     * 
     * @return Twitter Api Credentials
     */
    private ArrayList getTwitterCredentials() {
        BufferedReader in;
        String str;
        ArrayList<String> list = new ArrayList<String>();
        try {
            in = new BufferedReader(new FileReader("*******"));

            while ((str = in.readLine()) != null) {
                list.add(str);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list;
    }

控制台日志顯示:

Did not receive a message in 5 seconds

它說,每五秒鍾一次。 我想“ sysout”(實時)每條推文,其中包含端點trackTerms之一。 但是沒有錯誤或類似的東西。 代理可能有問題嗎?

該代碼正在運行,就像當時一樣。 問題是代理。 因為我去過辦公室網絡,所以無法連接到流。 因此,我用自己的筆記本電腦嘗試了一下,猜猜它起作用了。

暫無
暫無

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

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