【问题标题】:Listen tweets in real-time实时收听推文
【发布时间】:2016-08-06 22:21:39
【问题描述】:

我想实时收听推文,这意味着当有人发推文时我想看到该推文。

但是,我能够使用 twitter4j 库从我的新闻提要中获取推文。 这是代码。

 package twitteroperation;

import java.util.List;
import twitter4j.Status;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;

public class TwitterOperation {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws TwitterException {


          ConfigurationBuilder cb = new ConfigurationBuilder();

           cb.setDebugEnabled(true)
                .setOAuthConsumerKey("")
                .setOAuthConsumerSecret("")
                .setOAuthAccessToken("")
                .setOAuthAccessTokenSecret("");

     TwitterFactory tf=new TwitterFactory(cb.build());  

     twitter4j.Twitter tw=tf.getInstance();

      List<Status> statuses=  tw.getHomeTimeline();

         for (Status status1 : statuses) {
            System.out.println(status1.getUser().getName() + ":" + status1.getText());

        }   
    }
}

我发现我必须使用 Streaming API 来实时访问推文。但我在 java 中找不到任何示例代码来访问实时推文。

【问题讨论】:

    标签: java twitter twitter-oauth twitter4j


    【解决方案1】:

    Twitter4j 提供了示例,其中一个是exactly what you are looking for,但是你需要换行

    TwitterStream twitterStream = new TwitterStreamFactory().getInstance();
    

    与

         ConfigurationBuilder cb = new ConfigurationBuilder();
          cb.setDebugEnabled(true).setOAuthConsumerKey("")
                  .setOAuthConsumerSecret("")
                  .setOAuthAccessToken("")
                  .setOAuthAccessTokenSecret("");
    
          TwitterStream twitterStream = new TwitterStreamFactory(cb.build())
                  .getInstance();
    

    如果不这样做,则必须配置属性文件。之后你会得到这个代码

    import twitter4j.*;
    import twitter4j.conf.ConfigurationBuilder;
    
    public final class PrintSampleStream {
    
        public static void main(String[] args) throws TwitterException {
             ConfigurationBuilder cb = new ConfigurationBuilder();
              cb.setDebugEnabled(true).setOAuthConsumerKey("")
                      .setOAuthConsumerSecret("")
                      .setOAuthAccessToken("")
                      .setOAuthAccessTokenSecret("");
              TwitterStream twitterStream = new TwitterStreamFactory(cb.build())
                      .getInstance();
            StatusListener listener = new StatusListener() {
                @Override
                public void onStatus(Status status) {
                    System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
                }
    
                @Override
                public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
                    System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
                }
    
                @Override
                public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
                    System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
                }
    
                @Override
                public void onScrubGeo(long userId, long upToStatusId) {
                    System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
                }
    
                @Override
                public void onStallWarning(StallWarning warning) {
                    System.out.println("Got stall warning:" + warning);
                }
    
                @Override
                public void onException(Exception ex) {
                    ex.printStackTrace();
                }
            };
            twitterStream.addListener(listener);
            twitterStream.sample();
        }
    }
    

    您将开始接收示例公共流。如果您想获得特定的推文,您将需要使用一些过滤器。例如,如果您想要特定查询的推文,则需要更改此行

    twitterStream.sample();
    

    用你想要的词

    FilterQuery filtre = new FilterQuery();
    String[] keywordsArray = { "obama" };
    filtre.track(keywordsArray);
    twitterStream.filter(filtre);
    

    如果您想从特定配置文件中流式传输推文,您将需要使用关注过滤器。 twitterStream.sample(); 这行你需要更改它

              long[] users = new long[]{someid,someotherid,otherid};
              twitterStream.addListener(listener);
              FilterQuery filtre = new FilterQuery();
              filtre.follow(users);
              twitterStream.filter(filtre);
    

    数组的 id 是 Twitter 用于每个用户的 id。如果您不知道某个用户的 id,您可以使用 Twitter4j 获得它:

    User user = tw.showUser("barackobama"); //tw is your Twitter variable from twitter4j.Twitter tw=tf.getInstance();
    long id = user.getId();
    

    还有更多从流中检索推文的方法,您只需要阅读文档或在本网站上搜索即可。祝你好运!

    【讨论】:

    • 这是什么'ConfigurationBuilder'?我在这里遇到错误。 'ConfigurationBuilder 无法解析'
    • 找到上述评论的解决方案。我必须导入这个。 '导入 twitter4j.conf.*;'仍在处理您的答案:)
    • 这就是我需要的。谢谢
    • 我的“主页”时间线(不是我的个人资料)中的推文怎么样?
    【解决方案2】:

    我建议您试试Twitter HBC project。它在首页上有一些很好的示例,说明如何设置 BlockingQueue 来消费事件。

    【讨论】:

    • 我浏览了您提供的链接。如何在我的 Eclipse IDE 上设置这个项目?
    • 我发现了一些有趣的东西。谢谢@EmilForslund
    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 2021-09-20
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多