Example usage for twitter4j RateLimitStatus getRemaining

List of usage examples for twitter4j RateLimitStatus getRemaining

Introduction

In this page you can find the example usage for twitter4j RateLimitStatus getRemaining.

Prototype

int getRemaining();

Source Link

Document

Returns the remaining number of API requests available.
This value is identical to the "X-Rate-Limit-Remaining" response header.

Usage

From source file:account.GetRateLimitStatus.java

License:Apache License

public static ConstVars getRateLimit(String[] args) {

    ConstVars StaticVars = new ConstVars();

    try {/* ww w . j  a  va  2 s .c o  m*/

        // init Twitter OAuth
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true).setOAuthConsumerKey(args[1]).setOAuthConsumerSecret(args[2])
                .setOAuthAccessToken(args[3]).setOAuthAccessTokenSecret(args[4]);

        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = tf.getInstance();

        // it returns RateLimits of all end-points
        Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus();

        // get RateLimit of required end-point
        RateLimitStatus status = rateLimitStatus.get(args[0]);
        String Endpoint = args[0];
        int Limit = status.getLimit();

        int Remaining = status.getRemaining();
        int ResetTimeInSeconds = status.getResetTimeInSeconds();
        int SecondsUntilReset = status.getSecondsUntilReset();

        // set and return rate limit info to ConstVars's variables
        StaticVars.Endpoint = Endpoint;
        StaticVars.Limit = Limit;
        StaticVars.Remaining = Remaining;
        StaticVars.ResetTimeInSeconds = ResetTimeInSeconds;
        StaticVars.SecondsUntilReset = SecondsUntilReset;

    } catch (TwitterException te) {
        if (args.length == 6) {
            System.err
                    .println("Failed to get rate limit status of " + args[5] + " because: " + te.getMessage());
        } else {
            System.err.println("Failed to get rate limit status because: " + te.getMessage());
        }
    }
    return StaticVars;
}

From source file:Beans.Crawler.java

public String teste() {
    String result = "";
    int totalTweets = 0;
    long maxID = -1;

    GeoLocation geo = new GeoLocation(Double.parseDouble("-19.9225"), Double.parseDouble("-43.9450"));
    result += geo.getLatitude() + " " + geo.getLongitude() + "<br><br>";

    Twitter twitter = getTwitter();/*from   ww w  .j av  a2  s  .c  o m*/

    try {
        Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search");
        RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets");

        result += "You have " + searchTweetsRateLimit.getRemaining() + " calls remaining out of "
                + searchTweetsRateLimit.getLimit() + ", Limit resets in "
                + searchTweetsRateLimit.getSecondsUntilReset() + " seconds<br/><br/>";

        for (int queryNumber = 0; queryNumber < MAX_QUERIES; queryNumber++) {
            //   Do we need to delay because we've already hit our rate limits?
            if (searchTweetsRateLimit.getRemaining() == 0) {
                //   Yes we do, unfortunately ...
                //                        System.out.printf("!!! Sleeping for %d seconds due to rate limits\n", searchTweetsRateLimit.getSecondsUntilReset());

                //   If you sleep exactly the number of seconds, you can make your query a bit too early
                //   and still get an error for exceeding rate limitations
                //
                //    Adding two seconds seems to do the trick. Sadly, even just adding one second still triggers a
                //   rate limit exception more often than not.  I have no idea why, and I know from a Comp Sci
                //   standpoint this is really bad, but just add in 2 seconds and go about your business.  Or else.
                //               Thread.sleep((searchTweetsRateLimit.getSecondsUntilReset()+2) * 1000l);
            }

            Query q = new Query(SEARCH_TERM); //.geoCode((geo), 100, "mi");         // Search for tweets that contains this term
            q.setCount(TWEETS_PER_QUERY); // How many tweets, max, to retrieve
            //                    q.setGeoCode(geo, 100, Query.Unit.mi);
            //                    q.setSince("2012-02-20");
            //                                
            //            q.resultType("recent");                  // Get all tweets
            //            q.setLang("en");                     // English language tweets, please

            //   If maxID is -1, then this is our first call and we do not want to tell Twitter what the maximum
            //   tweet id is we want to retrieve.  But if it is not -1, then it represents the lowest tweet ID
            //   we've seen, so we want to start at it-1 (if we start at maxID, we would see the lowest tweet
            //   a second time...
            if (maxID != -1) {
                q.setMaxId(maxID - 1);
            }

            //   This actually does the search on Twitter and makes the call across the network
            QueryResult r = twitter.search(q);

            //   If there are NO tweets in the result set, it is Twitter's way of telling us that there are no
            //   more tweets to be retrieved.  Remember that Twitter's search index only contains about a week's
            //   worth of tweets, and uncommon search terms can run out of week before they run out of tweets
            if (r.getTweets().size() == 0) {
                break; // Nothing? We must be done
            }

            //   loop through all the tweets and process them.  In this sample program, we just print them
            //   out, but in a real application you might save them to a database, a CSV file, do some
            //   analysis on them, whatever...
            for (Status s : r.getTweets()) // Loop through all the tweets...
            {
                //   Increment our count of tweets retrieved
                totalTweets++;

                //   Keep track of the lowest tweet ID.  If you do not do this, you cannot retrieve multiple
                //   blocks of tweets...
                if (maxID == -1 || s.getId() < maxID) {
                    maxID = s.getId();
                }
                //   Do something with the tweet....
                result += "ID: " + s.getId() + " Data " + s.getCreatedAt().toString() + " user "
                        + s.getUser().getScreenName() + " texto: " + cleanText(s.getText()) + "  <br/>";

            }

            //   As part of what gets returned from Twitter when we make the search API call, we get an updated
            //   status on rate limits.  We save this now so at the top of the loop we can decide whether we need
            //   to sleep or not before making the next call.
            searchTweetsRateLimit = r.getRateLimitStatus();
        }

    } catch (Exception e) {
        //   Catch all -- you're going to read the stack trace and figure out what needs to be done to fix it
    }
    result += "<br><br>" + totalTweets + "<br>";
    return result;
}

From source file:Beans.Crawler.java

public List search(Categoria categoria, Localizacao localizacao) throws Exception {
    long maxID = -1;

    List<Tweet> list = new ArrayList<Tweet>();
    Twitter twitter = getTwitter();//from  w  w  w .  ja v a  2s. com
    try {
        Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search");
        RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets");
        for (int queryNumber = 0; queryNumber < MAX_QUERIES; queryNumber++) {
            if (searchTweetsRateLimit.getRemaining() == 0) {
            }

            String works = localizacao.getPalavrasChaves();
            String[] arrWorks = works.split(",");
            String keywork = "", or = "OR";

            for (int i = 0; i < arrWorks.length; i++) {
                if ((i + 1) >= arrWorks.length) {
                    or = "";
                }
                keywork += " \"" + arrWorks[i] + "\" " + or;
            }
            System.out.println("exclude:retweets " + categoria.getDescricao() + keywork);
            Query q = new Query("exclude:retweets " + categoria.getDescricao() + keywork);
            q.setCount(TWEETS_PER_QUERY);
            if (maxID != -1) {
                q.setMaxId(maxID - 1);
            }
            QueryResult r = twitter.search(q);
            if (r.getTweets().size() == 0) {
                break;
            }
            for (Status s : r.getTweets()) {
                if (maxID == -1 || s.getId() < maxID) {
                    maxID = s.getId();
                }
                Tweet t = new Tweet();
                t.setUsuario(s.getUser().getId());
                String dataPostagem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(s.getCreatedAt());
                t.setDataPostagem(dataPostagem);
                t.setTweet(s.getText());
                t.setTweetId(s.getId());
                t.setCategoriaId(categoria.getId());
                t.setLocalizacaoId(localizacao.getId());
                list.add(t);
            }
            searchTweetsRateLimit = r.getRateLimitStatus();
        }
    } catch (Exception e) {
        throw e;
    }

    return list;
}

From source file:br.com.controller.TweetController.java

public String search() {
    Categoria c = new CategoriaDAO().find(Integer.parseInt(categoria));
    Localizacao l = new LocalizacaoDAO().find(Integer.parseInt(localizacao));
    long maxID = -1;

    Twitter twitter = getTwitter();//w ww.j a v a2 s . c o  m
    try {
        Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search");
        RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets");
        for (int queryNumber = 0; queryNumber < MAX_QUERIES; queryNumber++) {
            if (searchTweetsRateLimit.getRemaining() == 0) {
            }

            String works = c.getPalavrasChaves();
            String[] arrWorks = works.split(",");
            String keywork = "", or = "OR", query = "";

            for (int i = 0; i < arrWorks.length; i++) {
                if ((i + 1) >= arrWorks.length) {
                    or = "";
                }
                keywork += " \"" + arrWorks[i] + "\" " + or;
            }

            query = "exclude:retweets " + keywork;

            works = l.getPalavrasChaves();
            arrWorks = works.split(",");
            keywork = "";
            or = "OR";

            for (int i = 0; i < arrWorks.length; i++) {
                if ((i + 1) >= arrWorks.length) {
                    or = "";
                }
                keywork += " \"" + arrWorks[i] + "\" " + or;
            }

            query += keywork;

            Query q = new Query(query);
            q.setCount(TWEETS_PER_QUERY);
            if (maxID != -1) {
                q.setMaxId(maxID - 1);
            }
            QueryResult r = twitter.search(q);
            if (r.getTweets().size() == 0) {
                break;
            }
            for (Status s : r.getTweets()) {
                if (maxID == -1 || s.getId() < maxID) {
                    maxID = s.getId();
                }

                Tweet t = new Tweet();
                t.setUsuario(s.getUser().getId());
                t.setDataPostagem(s.getCreatedAt());
                t.setTweet(s.getText());
                if (!new DAO.TweetDAO().hastTweet(s.getId())) {
                    t.setTweetId(s.getId());
                    t.setCategoria(c);
                    t.setLocalizacao(l);
                    jpa.saveOrUpdate(t);
                }
            }
            searchTweetsRateLimit = r.getRateLimitStatus();
        }
    } catch (Exception e) {
    }

    return "index";
}

From source file:Collector.TweetCollector.java

public static List<Status> getTweets(final String q) {
    Timer timer = new Timer();
    TimerTask hourlyTask = new TimerTask() {

        @Override// w ww. j a v  a2 s . c  o m
        public void run() {

            long amountOfTweets = 0;

            try {

                long maxID = -1;

                Query query = new Query(q);
                //printTimeLine(query);
                Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search");
                RateLimitStatus searchLimit = rateLimitStatus.get("/search/tweets");
                for (int batchNumber = 0; MAX_QUERIES < 10; batchNumber++) {

                    System.out.printf("\n\n!!! batch %d\n\n", batchNumber);

                    if (searchLimit.getRemaining() == 0) {
                        // so as to not get blocked by twitter
                        Thread.sleep(searchLimit.getSecondsUntilReset() + 3 * 1001);
                    }

                    query.setCount(TWEETS_PER_QUERY);// constant value of 100
                    query.setResultType(Query.ResultType.recent);
                    query.setLang("en");// only english tweets

                    if (maxID != -1) {
                        query.setMaxId(maxID - 1);// so the first querys not set to previous max
                    }
                    QueryResult result = twitter.search(query);
                    if (result.getTweets().size() == 0) {
                        break;
                    }

                    for (Status s : result.getTweets()) {
                        amountOfTweets++;
                        if (maxID == -1 || s.getId() < maxID) {
                            maxID = s.getId();
                        }
                        storeTweet(s);// where stored in db

                        System.out.printf("At%s : %s\n", // debugging purposes
                                s.getCreatedAt().toString(), s.getText());
                        searchLimit = result.getRateLimitStatus(); //resets
                        System.out.printf("\n\nA total of %d tweet retrieved\n", amountOfTweets);

                    }

                }

            } catch (TwitterException te) {

                System.out.println("Error Code :" + te.getErrorCode());
                System.out.println("Exception Code " + te.getExceptionCode());
                System.out.println("Status Code " + te.getStatusCode());

                if (te.getStatusCode() == 401) {
                    System.out.println("Twitter Error :\nAuthentication "
                            + "credentials (https://dev.twitter.com/auth) "
                            + " are either missing of incorrect, " + "\nplease check consumer key /secret");
                }
            } catch (InterruptedException ex) {

            }

        }
    };

    // schedule the task to run starting now and then every hour...
    timer.schedule(hourlyTask, 0l, 1000 * 60 * 60);
    return statuses;

}

From source file:com.appdynamics.alerts.twitter.TwitterAlert.java

License:Apache License

public static void main(String[] args) {
    twitter = TwitterFactory.getSingleton();
    twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
    twitter.addRateLimitStatusListener(new RateLimitStatusListener() {
        @Override// ww w  .j  a v  a 2s.  c om
        public void onRateLimitStatus(RateLimitStatusEvent rateLimitStatusEvent) {
            RateLimitStatus status = rateLimitStatusEvent.getRateLimitStatus();
            if (status.getRemaining() <= 0) {
                logger.warn("Rate limit reached");
                storeRateLimitStatus(status);
            }
        }

        @Override
        public void onRateLimitReached(RateLimitStatusEvent rateLimitStatusEvent) {
            //never called by API
        }
    });

    if (args.length == 1 && args[0].equals("auth")) {
        try {
            getAuthorization();

            System.out.println("Authenticated for user @" + twitter.getScreenName());
        } catch (TwitterException e) {
            if (e.getStatusCode() == 401) {
                logger.error("Missing or incorrect authentication credentials");
            } else {
                logger.error("Authentication failed", e);
            }
        }
    } else {
        try {
            parseEventParams(args);

            AccessToken accessToken = readAccessToken();
            twitter.setOAuthAccessToken(accessToken);

            postUpdate();
        } catch (IOException e) {
            logger.error("Access token unreadable,unable to authenticate. Please rerun authentication script");
        } catch (ClassNotFoundException e) {
            logger.error("Access token unreadable,unable to authenticate. Please rerun authentication script");
        } catch (Exception e) {
            logger.error("Failed to parse arguments");
        }
    }
}

From source file:com.avishkar.NewGetFollowersIDs.java

License:Apache License

private static int checkRateLimit(String uri, Twitter twitter) throws TwitterException, InterruptedException {
    System.out.println("Checking rate limit for URI:" + uri);
    Map<String, RateLimitStatus> rateMap = twitter.getRateLimitStatus();
    RateLimitStatus rateLimit = rateMap.get(uri);
    RateLimitStatus apprateLimit = rateMap.get("/application/rate_limit_status");
    if (apprateLimit.getRemaining() <= 1) {
        consoleTimerWaitForRate("/application/rate_limit_status", apprateLimit);
    }/*from w ww . j  ava  2s.  c o m*/
    if (apprateLimit.getRemaining() <= 1) {
        System.out.println("Rate Limit URI fetch exhausted. Check cancelled. Operation may fail.");
    }
    System.out.println("Rate Limit remaining:" + rateLimit.getRemaining());
    if (rateLimit.getRemaining() == 0) {
        consoleTimerWaitForRate(uri, rateLimit);
    }
    return rateLimit.getRemaining();
}

From source file:com.daemon.TwitterProfile.java

License:Open Source License

/**
 * Get Twitter search rate limit for endpoint /search/tweets minus
 * the given rate limit buffer (mentioned in the properties file).
 * /*from   w w  w  . ja  va 2 s. co m*/
 * @return Rate limit left
 * @throws TwitterException  Thrown if there is a problem with Twitter.
 */
public int getSearchRateLimit() throws TwitterException {
    // Check our rate limit status
    Map<String, RateLimitStatus> rateLimitStatus = _twitter.getRateLimitStatus();
    RateLimitStatus status = rateLimitStatus.get("/search/tweets");

    return status.getRemaining() - _props.rateLimitBuffer;
}

From source file:com.data.dataanalytics.twitter.TwitterFeed.java

public List<Tweet> getTweets(String search) {
    //   We're curious how many tweets, in total, we've retrieved.  Note that TWEETS_PER_QUERY is an upper limit,
    //   but Twitter can and often will retrieve far fewer tweets

    twitter4j.Twitter twitter = getTwitter();

    /*   This variable is the key to our retrieving multiple blocks of tweets.  In each batch of tweets we retrieve,
       we use this variable to remember the LOWEST tweet ID.  Tweet IDs are (java) longs, and they are roughly
       sequential over time.  Without setting the MaxId in the query, Twitter will always retrieve the most
       recent tweets.  Thus, to retrieve a second (or third or ...) batch of Tweets, we need to set the Max Id
       in the query to be one less than the lowest Tweet ID we've seen already.  This allows us to page backwards
       through time to retrieve additional blocks of tweets*/
    long maxID = -1;

    try {//from   w ww.j  a v  a 2s  .  com
        //   There are limits on how fast you can make API calls to Twitter, and if you have hit your limit
        //   and continue to make calls Twitter will get annoyed with you.  I've found that going past your
        //   limits now and then doesn't seem to be problematic, but if you have a program that keeps banging
        //   the API when you're not allowed you will eventually get shut down.
        //
        //   Thus, the proper thing to do is always check your limits BEFORE making a call, and if you have
        //   hit your limits sleeping until you are allowed to make calls again.
        //
        //   Every time you call the Twitter API, it tells you how many calls you have left, so you don't have
        //   to ask about the next call.  But before the first call, we need to find out whether we're already
        //   at our limit.

        //   This returns all the various rate limits in effect for us with the Twitter API
        Map<String, RateLimitStatus> rateLimitStatus = twitter.getRateLimitStatus("search");

        //   This finds the rate limit specifically for doing the search API call we use in this program
        RateLimitStatus searchTweetsRateLimit = rateLimitStatus.get("/search/tweets");

        //   Always nice to see these things when debugging code...
        System.out.printf("You have %d calls remaining out of %d, Limit resets in %d seconds\n",
                searchTweetsRateLimit.getRemaining(), searchTweetsRateLimit.getLimit(),
                searchTweetsRateLimit.getSecondsUntilReset());

        //   This is the loop that retrieve multiple blocks of tweets from Twitter
        for (int queryNumber = 0; queryNumber < MAX_QUERIES; queryNumber++) {
            System.out.printf("\n\n!!! Starting loop %d\n\n", queryNumber);
            //   Delay
            if (searchTweetsRateLimit.getRemaining() == 0) {
                System.out.printf("!!! Sleeping for %d seconds due to rate limits\n",
                        searchTweetsRateLimit.getSecondsUntilReset());

                //   If you sleep exactly the number of seconds, you can make your query a bit too early
                //   and still get an error for exceeding rate limitations
                //
                //    Adding two seconds seems to do the trick. Sadly, even just adding one second still triggers a
                //   rate limit exception more often than not.  I have no idea why, and I know from a Comp Sci
                //   standpoint this is really bad, but just add in 2 seconds and go about your business.  Or else.
                Thread.sleep((searchTweetsRateLimit.getSecondsUntilReset() + 2) * 1000l);
            }

            Query q = new Query(search); // Search for tweets that contains this term
            q.setCount(TWEETS_PER_QUERY); // How many tweets, max, to retrieve
            //q.resultType("recent");                  // Get all tweets
            q.setLang("en"); // English language tweets, please

            //   If maxID is -1, then this is our first call and we do not want to tell Twitter what the maximum
            //   tweet id is we want to retrieve.  But if it is not -1, then it represents the lowest tweet ID
            //   we've seen, so we want to start at it-1 (if we start at maxID, we would see the lowest tweet
            //   a second time...
            if (maxID != -1) {
                q.setMaxId(maxID - 1);
            }

            //   This actually does the search on Twitter and makes the call across the network
            QueryResult r = twitter.search(q);

            //   If there are NO tweets in the result set, it is Twitter's way of telling us that there are no
            //   more tweets to be retrieved.  Remember that Twitter's search index only contains about a week's
            //   worth of tweets, and uncommon search terms can run out of week before they run out of tweets
            if (r.getTweets().size() == 0) {
                break; // Nothing? We must be done
            }

            //   loop through all the tweets and process them. Need to save as CSV file for database
            for (Status s : r.getTweets()) { // Loop through all the tweets...
                //   Increment our count of tweets retrieved

                //   Keep track of the lowest tweet ID.  If you do not do this, you cannot retrieve multiple
                //   blocks of tweets...
                if (maxID == -1 || s.getId() < maxID) {
                    maxID = s.getId();
                }

                //   Do something with the tweet....
                ta.processTweets(s, new Date());

            }

            //   As part of what gets returned from Twitter when we make the search API call, we get an updated
            //   status on rate limits.  We save this now so at the top of the loop we can decide whether we need
            //   to sleep or not before making the next call.
            searchTweetsRateLimit = r.getRateLimitStatus();
        }

    } catch (Exception e) {
        //   Catch all -- you're going to read the stack trace and figure out what needs to be done to fix it
        System.out.println("That didn't work well...wonder why?");

        e.printStackTrace();

    }

    System.out.printf("\n\nA total of %d tweets retrieved\n", ta.getTotalTweets());
    System.out.println("The total amount of tweets in an hour " + ta.getTweetsInAnHour());
    ta.checkIfTrending(ta.getTweetsInAnHour(), ta.getTotalTweets());

    return ta.getTweetList();
}

From source file:com.jeanchampemont.wtfdyum.service.impl.TwitterServiceImpl.java

License:Apache License

private void checkRateLimitStatus(final RateLimitStatus status, final WTFDYUMExceptionType exceptionType)
        throws WTFDYUMException {
    if (status.getRemaining() == 0) {
        throw new WTFDYUMException(exceptionType);
    }/* www . j  a va2s .  c o  m*/
}