Question

As a part of my final year project in university I'm analysing Twitter data using graph entropy. To briefly outline the purposes:

  • I want to collect all tweet from a certain area (London) containing keywords "cold", "flu" etc. This part is done using Streaming API.
  • Then I want to access each of the user's (who tweeted about being ill, collected in previous section) list of followers and following to be able to build a graph for further analysis. And here I'm stuck.

I assume for the second part I should be using Search API, but I keep getting error 88 even for a single user.

Below is the code I use for the first part:

    final TwitterStream twitterStream = new TwitterStreamFactory(cb.build())
            .getInstance();
    StatusListener listener = new StatusListener() {
    public void onStatus(Status status) {
            User user = status.getUser();

            long userid = user.getId();

            String username = status.getUser().getScreenName();

            String content = status.getText();

            GeoLocation geolocation = status.getGeoLocation();

            Date date = status.getCreatedAt();

            if (filterText(content)) {
                System.out.println(username+"\t"+userid);
                System.out.println(content);
                System.out.println(geolocation);
                System.out.println(date);
                try {
                    getConnections(userid);
                } catch (TwitterException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        //OTHER LISTENER METHODS
    };

    twitterStream.addListener(listener);

    // London
    double lat3 = 51.23;
    double lat4 = 51.72;
    double lon3 = -0.56;
    double lon4 = 0.25;

    double[][] bb = { { lon3, lat3 }, { lon4, lat4 } };

    FilterQuery fq = new FilterQuery();
    fq.locations(bb);

    twitterStream.filter(fq);

    private static boolean filterText(String tweet) {
    return tweet.contains("flu")
            || tweet.contains("cold")
            || tweet.contains("cough")
            || tweet.contains("virus");

}

And this is what I'm trying to complete the second part with:

    private static void getConnections(long id) throws TwitterException {
    Twitter twitter = new TwitterFactory().getInstance();

    long lCursor = -1;
    IDs friendsIDs = twitter.getFriendsIDs(id, lCursor);
    System.out.println(twitter.showUser(id).getName());
    System.out.println("==========================");
    do
    {
      for (long i : friendsIDs.getIDs())
       {
           System.out.println("follower ID #" + i);
           System.out.println(twitter.showUser(i).getName());
       }
    }while(friendsIDs.hasNext());
}

Any suggestions?

Was it helpful?

Solution

When you receive error 88, that's Twitter telling you that you're being rate limited:

The request limit for this resource has been reached for the current rate limit window.

The search call is limited to either 180 or 450 calls in a 15 minute period. You can see the rate limits here and this documentation explains the rate limiting in detail.

As for how to get around it, you may have to throttle your search calls to the API. Twitter4J provides ways to inspect current limits/exhaustion which may help - see Twitter#getRateLimitStatus().

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top