1
votes

I'm trying to get all of a specific user's tweets.

I know there is a limit of retreiving 3600 tweets, so I'm wondering why I can't get more tweets from this line:

https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=mybringback&count=3600

Does anyone know how to fix this?

2
Is it ok to do this in Python / Ruby?Ashwin Balamohan

2 Answers

1
votes

The API documentation specifies that the maximum number of statuses that this call will return is 200.

https://dev.twitter.com/docs/api/1/get/statuses/user_timeline

Specifies the number of tweets to try and retrieve, up to a maximum of 200. The value of count is best thought of as a limit to the number of tweets to return because suspended or deleted content is removed after the count has been applied. We include retweets in the count, even if include_rts is not supplied. It is recommended you always send include_rts=1 when using this API method.

0
votes

Here's something I've used for a project that had to do just that:

import json
import commands

import time

def get_followers(screen_name):

    followers_list = []

    # start cursor at -1
    next_cursor = -1

    print("Getting list of followers for user '%s' from Twitter API..." % screen_name)

    while next_cursor:

        cmd = 'twurl "/1.1/followers/ids.json?cursor=' + str(next_cursor) + \
                '&screen_name=' + screen_name + '"'

        (status, output) = commands.getstatusoutput(cmd)

        # convert json object to dictionary and ensure there are no errors
        try:
            data = json.loads(output)

            if data.get("errors"):

                # if we get an inactive account, write error message
                if data.get('errors')[0]['message'] in ("Sorry, that page does not exist",
                                                        "User has been suspended"):

                    print("Skipping account %s. It doesn't seem to exist" % screen_name)
                    break

                elif data.get('errors')[0]['message'] == "Rate limit exceeded":
                    print("\t*** Rate limit exceeded ... waiting 2 minutes ***")
                    time.sleep(120)
                    continue

                # otherwise, raise an exception with the error
                else:

                    raise Exception("The Twitter call returned errors: %s"
                                    % data.get('errors')[0]['message'])

            if data.get('ids'):
                print("\t\tFound %s followers for user '%s'" % (len(data['ids']), screen_name))
                followers_list += data['ids']

            if data.get('next_cursor'):
                next_cursor = data['next_cursor']
            else:
                break

        except ValueError:
            print("\t****No output - Retrying \t\t%s ****" % output)

    return followers_list



screen_name = 'AshwinBalamohan' 
followers = get_followers(screen_name)
print("\n\nThe followers for user '%s' are:\n%s" % followers)

In order to get this to work, you'll need to install the Ruby gem 'Twurl', which is available here: https://github.com/marcel/twurl

I found Twurl easier to work with than the other Python Twitter wrappers, so opted to call it from Python. Let me know if you'd like me to walk you through how to install Twurl and the Twitter API keys.