0

I have write this simple code for getting tweets from 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());

        }

But I want to get about 4000 tweets in urdu language. I don't know how to do. please help me

FeanDoe
  • 1,608
  • 1
  • 18
  • 30

2 Answers2

0

With that code you will only get Tweets from the Timeline of the register user, from Twitter4j:

ResponseList getHomeTimeline() Returns the 20 most recent statuses, including retweets, posted by the authenticating user and that user's friends. This is the equivalent of /timeline/home on the Web."

If you want to get at least 4000 tweets in urdu you could do several things, for example you could get the sample stream from 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");

Until you get the 4000 tweets that you want.

FeanDoe
  • 1,608
  • 1
  • 18
  • 30
  • Thank you sir so much. this is quite interesting. actually sir I am new to this, I want to do my MS research on sentiment analysis for that I am making dataset. my Question is can I access the tweets that are already tweeted or comments on a product etc. – Rahim Ullah Rudbari Jul 19 '16 at 08:53
  • You could use Twitter4j to search tweets (http://stackoverflow.com/questions/13545936/twitter4j-search-for-public-tweets) but keep in mind that you can only retrieve tweets from the last few days. You could also get the last tweets from an specific user (http://stackoverflow.com/questions/2449724/twitter4j-get-all-statuses-from-twitter-account). Do whatever you feel is more suitable for you! – FeanDoe Jul 19 '16 at 14:14
  • #FeanDoe sir can i get all the replies to tweets in urdu language. – Rahim Ullah Rudbari Jul 23 '16 at 07:22
0

You can use twitter search instead of just getting specific user's tweets. What I have done for getting tweets in Turkish language is just using twitter's advanced search feature. In my situation adding lang:tr after specified search phrase returned tweets in Turkish language to me. You can use lang:ur instead of lang:tr for getting tweets in Urdu Language.

Here is my code:

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");
    }

}

Calling getTweet(String keyword) method with empty string returns latest tweets in your language without filtering them with any keyword.

Hope it helps.

PS: you can also check search results for your language from this link https://twitter.com/search?f=tweets&vertical=default&q=lang%3Aur

kadir
  • 589
  • 1
  • 7
  • 29