Tweepy in iPython Notebook. I've wanted to have a play with the Twitter API
for a few months. There is a lot of complexity in this API, so I looked for
a library that abstracted as much as possible. Tweepy was the first to grab
my attention.

Another library that I plan on trying is Python Twitter Tools.
In hindsight, I probably should have gone with PTT to start as Tweepy returns
inconsistent data when accessing various API endpoints. Not to say Tweepy is bad,
because it worked well for these basic examples.

This is to set-up tweepy and oauth to play with the Twitter API

  • google group is here
  • docs here
  • github repo here

    :::python import tweepy

    # The consumer keys can be found on your application's Details
    # page located at https://dev.twitter.com/apps (under "OAuth settings")
    consumer_key="<key here>"
    consumer_secret="<secret here>"
    
    # The access tokens can be found on your applications's Details
    # page located at https://dev.twitter.com/apps (located
    # under "Your access token")
    access_token="<access token here>"
    access_token_secret="<access ssecret here>"
    
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    
    myapi = tweepy.API(auth)
    
    # If the authentication was successful, you should
    # see the name of the account print out
    print myapi.me().name
    
    Michael Martinez
    

If the request was successful, you will see your name print out in the response

myapi.update_status('Rocking #iPythonNotebook and tweepy')

 Out[2]:

     <tweepy.models.Status at 0x107ca3550>

The user object

Showing a method to access some variables returned by twitter

print myapi.me().screen_name

     MonkMartinez


print myapi.me().description

     Father. Firefighter. Mobile Crafter. Web Crafter. Garage-Business-Dude.


me = myapi.me()

print me.followers_count

     116

me.status.text

     u'Rocking #iPythonNotebook and tweepy'

me.statuses_count

     1570

Rate limits

For items that return a dict, you can simply iterate through the list

type(myapi.rate_limit_status())

    #lets work through a returned dict

    rl = myapi.rate_limit_status()

    for k, v in rl.iteritems():
        print '%s : %s' %(k, v)

     photos : {u'daily_limit': 100, u'reset_time': u'Sun Apr 21 17:21:43 +0000
     2013', u'remaining_hits': 100, u'reset_time_in_seconds': 1366564903}
     remaining_hits : 346
     reset_time_in_seconds : 1366482078
     hourly_limit : 350
     reset_time : Sat Apr 20 18:21:18 +0000 2013

Another way to access variables within the api...

myapi.rate_limit_status()['remaining_hits']

 350


import datetime
    # get the reset time from twitter call
    twitime = myapi.rate_limit_status()['reset_time_in_seconds']

    #convert the time
    timere = datetime.datetime.fromtimestamp(int(twitime)).strftime('%Y-%m-%d %H:%M:%S')
    print('Twitter will reset at:', timere)

     ('Twitter will reset at:', '2013-04-20 11:21:18')


for i in myapi.user_timeline():
        print(i.text)

     Rocking #iPythonNotebook and tweepy
     Have you heard Sisi - Stay - Funk Ferret Edit by FunkFerret on
     #SoundCloud? https://t.co/lrdhjdOmDa
     Have you heard Rufus Thomas - Itch &amp; Scratch - Funk Ferret Edit by
     FunkFerret on #SoundCloud? https://t.co/JW2sKvlvvV
     Can you get paid to evaluate OSS python packages?
     Rocking #iPythonNotebook and tweepy
     @UnlearningEcon Outcomes are NEVER certain. More thinking and less emotion
     would make the world a better place.
     @kennethlove Right on, can't wait!!!
     @kennethlove Really AWESOME #GSWD tut(s)... Muchas Gracias! More coming soon
     I hope?
     I am working on data analysis with #pandas and #iPython for a GIS project
     that may help #firefighters be more efficient.
     Back on the horse after a one month non-programming hiatus. Feels good...
     and my fingers still remember #emacs. #python #iPython
     The damage has already been done. The #bankrun will proceed as if the tax
     levy had passed. #Cyprus
     @charlesfrith short on math eh???
     Enough politics, back to programming and awesomeness in general.
     #hispanics are not dumb people that simply recognize latino names and think,
     "bueno, yo vota para el."
     Not only that, the #republican party thinks that trotting people with
     hispanic last names will to help "win" the hispanic vote. #notworking
     The #republican party is so out of touch with my generation I really don't
     know where to begin.
     @cjno pic or it didn't happen :-)


for i in myapi.search("#watertown"):
        print'name:', i.from_user,'\n', ':: twit:', i.text, '\n', 'geo:', i.geo

     name: Sirajulrox98
     :: twit: RT @Jessewelle: ish is getting real in Boston. Be safe people. Stay
     in your house #Watertown.
     geo: None
     name: ConradddJay
     :: twit: RT @YourAnonNews: Bomber's uncle: It's about being losers. Not
     Chechnya. Not Islam. They deserve to die. http://t.co/SH1yhnBUFQ #Watertown
     #BostonBombing
     geo: None
     name: Jesicakhua
     :: twit: This goes to show that law enforcement in the US is better that
     most other countries' military. #watertown #boston
     geo: None
     name: SaraGCeli
     :: twit: RT @mackissler: Little boy goes up to police officers and says
     "thank you!" Near the #Watertown home where the suspect was caught.
     http://t.co/xoGlNqx2Lt
     geo: None
     name: Gina_Gillespie
     :: twit: RT @AJELive: Dead #Boston bombings suspect was interviewed by FBI
     http://t.co/hLSqKYKZUz #Watertown
     geo: None
     name: bumpinuglies55
     :: twit: RT @MentalityMag: #Watertown Police Chief claims Tamerlan Tsarnaev
     was cuffed and alive on the ground when Dzhokhar ran him over with stolen SUV,
     killing him.
     geo: None
     name: watertowntab
     :: twit: RT @ThatGuyBoston We are #watertown. We are boston. We are the
     United States of America. Proud to be a family of Boston Firefighters
     geo: None
     name: DMillsTheGod
     :: twit: RT @AJELive: Dead #Boston bombings suspect was interviewed by FBI
     http://t.co/hLSqKYKZUz #Watertown
     geo: None
     name: watertowntab
     :: twit: RT @GarrettQuinn resident Taryn Sullivan, 28, says she was nervous
     but "put my faith in the #Watertown, State Police" http://t.co/39Lf9HB32t
     geo: None
     name: infolibri
     :: twit: RT @AJELive: Dead #Boston bombings suspect was interviewed by FBI
     http://t.co/hLSqKYKZUz #Watertown
     geo: None
     name: fabian70813
     :: twit: RT @YourAnonNews: Cop to NBC reporter:"if you knew what was going
     on, you wouldn't be standing here right now."#watertown #manhunt #Boston via
    @CiaPressOffice
     geo: None
     name: PatrakaarPopat
     :: twit: RT @AJELive: Dead #Boston bombings suspect was interviewed by FBI
     http://t.co/hLSqKYKZUz #Watertown
     geo: None
     name: HaaziqUvais
     :: twit: RT @lisawilliams: Police searched my house while I was away. Attic
     door open items on floor. No complaints: doing their job. #watertown
     http://t.co/A4lw0ZBxoJ
     geo: None
     name: Slainte2505
     :: twit: RT @OpocAnOn: #Dzhokhar #Tsarnaev in this wider picture running
     from second bombing in #bostonbombing #manhunt #Watertown http://t.co/LXWlVR9RkQ
     geo: None

 for i in myapi.lists_subscriptions():
        print i.name

     pythonistas
     python
     Rails
     rails guys
     Rails
     tech pundits
     peoplewhomakestuff
     Microsoft
     MSExpSLTeam
     Rad Designers
     The Pixel Horde
     Designer
     Cool Infographics People
     visual-effects-peeps
     Design/Animation
     design
     design
     Design, UI, Arts & co
     Graphics Software
     UX - IxD

A little maths?

import numpy as np
    import matplotlib.pyplot as plt

    tweet_length = []
    for status in tweepy.Cursor(myapi.user_timeline).items(50):
         tweet_length.append(len(status.text))

    # Convert tweet_length to numpy array
    b = np.array(tweet_length)

    #now calc mean
    vf = np.mean(b)

    #now plot it
    figure(1)
    plt.plot(b, 'gd')

    #Horizontal line
    axhline(y=92, linewidth=1, color='r')

    xlabel('Number of Tweets')
    ylabel('Number of Characters')
    title('Mean length of last 50 tweets: %f characters' %vf)

    grid(True)

![plot](/static/images/tweepy-ipynb.png)

1001 words ~ 5 min read

  • Flesch-kincaid Index / Reading Ease: 68.17
  • Flesch-kincaid Grade Level: 5.57