Twitter4j获取推文

时间:2016-07-18 09:51:08

标签: twitter twitter4j sentiment-analysis

我已经编写了这个简单的代码,用于从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条推文。我不知道该怎么做。请帮帮我

2 个答案:

答案 0 :(得分:0)

使用该代码,您只能从注册用户的时间轴获取来自Twitter4j的推文:

  

ResponseList getHomeTimeline()返回最近的20个   状态,包括转发,由身份验证用户发布   该用户的朋友。这相当于/ timeline / home   。卷筒纸&#34;

如果你想在乌尔都语中获得至少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条推文。

答案 1 :(得分:0)

您可以使用Twitter搜索,而不仅仅是获取特定用户的推文。我用土耳其语发送推文的工作就是使用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

查看您的语言的搜索结果