【问题标题】:Twitter4j for getting tweets用于获取推文的 Twitter4j
【发布时间】:2016-07-18 09:51:07
【问题描述】:

我已经编写了这个简单的代码来从 twitter 获取推文

public static void main(String[] args) throws TwitterException {
        // TODO code application logic here
        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());

        }

但我想获得大约 4000 条乌尔都语推文。我不知道该怎么做。请帮帮我

【问题讨论】:

    标签: twitter twitter4j sentiment-analysis


    【解决方案1】:

    使用该代码,您将只能从注册用户的时间线(Twitter4j)获得推文:

    ResponseList getHomeTimeline() 返回最近的 20 个 身份验证用户发布的状态,包括转发,以及 该用户的朋友。这相当于 /timeline/home 网络。”

    如果您想获得至少 4000 条乌尔都语推文,您可以做几件事,例如您可以从 Twitter 获取示例流:

      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());
                      // HERE YOU STORE YOUR TWEETS
                  }
    
                  @Override
                  public void onException(Exception ex) {
                      ex.printStackTrace();
                  }
    
                  @Override
                  public void onDeletionNotice(StatusDeletionNotice arg0) {
                      // TODO Auto-generated method stub
                  }
    
                  @Override
                  public void onScrubGeo(long arg0, long arg1) {
    
                  }
    
                  @Override
                  public void onStallWarning(StallWarning arg0) {
                      // TODO Auto-generated method stub
                      System.out.println(arg0);
                  }
    
                  @Override
                  public void onTrackLimitationNotice(int arg0) {
                      // TODO Auto-generated method stub
                      System.out.println(arg0);
                  }
              };
          twitterStream.addListener(listener);
          twitterStream.sample("ur");
    

    直到你得到你想要的 4000 条推文。

    【讨论】:

    • 非常感谢先生。这很有趣。实际上先生,我对此并不陌生,我想为我正在制作数据集的情绪分析做我的 MS 研究。我的问题是我可以访问已经发布的推文或产品上的 cmets 等。
    • 您可以使用 Twitter4j 搜索推文 (stackoverflow.com/questions/13545936/…),但请记住,您只能检索最近几天的推文。您还可以从特定用户 (stackoverflow.com/questions/2449724/…) 那里获取最后的推文。做你觉得更适合你的事!
    • #FeanDoe 先生,我能得到所有乌尔都语推文的回复吗?
    【解决方案2】:

    您可以使用推特搜索,而不仅仅是获取特定用户的推文。我为获取土耳其语推文所做的只是使用 twitter 的高级搜索功能。在我的情况下,在指定的搜索短语后添加lang:tr 会向我返回土耳其语推文。您可以使用 lang:ur 而不是 lang:tr 来获取乌尔都语的推文。

    这是我的代码:

    public class TwitterDataGetter implements Runnable {
        private Thread twitterDataGetterThread;
    
        final static Logger logger = Logger.getLogger(TwitterDataGetter.class);
    
        public TwitterDataGetter() {
            try {
                ConfigurationBuilder cb = new ConfigurationBuilder();
                cb.setDebugEnabled(true);
                cb.setOAuthConsumerKey("your consumer key");
                cb.setOAuthConsumerSecret("your consumer secret");
                cb.setOAuthAccessToken("your access token");
                cb.setOAuthAccessTokenSecret("your access token secret");
                cb.setIncludeEntitiesEnabled(true);
    
                this.twitter = new TwitterFactory(cb.build()).getInstance();
    
                logger.info("Twitter API Configuration Successful");
            } catch (Exception e) {
                logger.error("Twitter API Configuration Error", e);
            }
        }
    
        public void getTweet(String keyword){
            List<Status> statuses = null;
            Query query;
            QueryResult result;
    
            try {
                query = new Query(keyword + " lang:tr");
                query.setCount(100);
                do {
                    final long startTime = System.nanoTime();
                    result = twitter.search(query);
                    statuses = result.getTweets();
                    for (Status status : statuses) {
                        System.out.println(status.getText());
                    }
    
                    final long duration = System.nanoTime() - startTime;
                    if((5500 - duration/1000000) > 0){
                        Thread.sleep((5500 - duration/1000000));
                    }
                } while ((query = result.nextQuery()) != null);
            } catch (TwitterException e) {
                logger.error("TwitterException", e);
            } catch (InterruptedException e) {
                logger.error("InterruptedException", e);
                throw new RuntimeException(e);
            }
        }
    
        @Override
        public void run() {
            while(true){
                this.getTweet("");
            }
        }
    
        public void start(){
            if(twitterDataGetterThread == null){
                twitterDataGetterThread = new Thread(this, "Twitter Thread");
            }
            twitterDataGetterThread.start();
            logger.info("Twitter Thread started");
        }
    
    }
    

    使用空字符串调用 getTweet(String keyword) 方法会返回您的语言的最新推文,而不用任何关键字过滤它们。

    希望对你有帮助。

    PS:您也可以通过此链接https://twitter.com/search?f=tweets&vertical=default&q=lang%3Aur查看您的语言的搜索结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2014-08-03
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多