1. Twittering with Python
Python libraries for the Twitter API:
Overview and applications
EuroPython 2009 (June 30th 2009, Birmingham)
Andreas Schreiber <Andreas.Schreiber@dlr.de>
German Aerospace Center (DLR), Cologne, Germany
http://www.dlr.de/sc
Folie 1
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
2. Final Version of this Slides is
available on SlideShare
http://tr.im/ep09twt
Folie 2
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
4. What is Twitter?
Micro-Blogging Service
Users can send text messages
Users can receive text messages of others
Text messages can have up to 140 characters
The text messages are called „Updates“ or „Tweets“
Socal Network
One can subscribe to other users („Following“)
Subscriber of own updates are „Follower“
On the Twitter web site one can enter updates and …
see updates of all Friends
Users can control visibility
http://en.wikipedia.org/wiki/Twitter
Folie 4
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
8. Guido van Rossum
Folie 8
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
9. DLR_de
Folie 9
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
10. O‘Reilly
Folie 10
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
11. Plone
Folie 11
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
12. Focus Online
Folie 12
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
13. EuroPython
Folie 13
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
14. Web Sites and Technologies
http://twitter.com
Web application developed with Ruby on Rails
Message Queue Server Kestrel (fka. Starling)
developed in Scala
Available under Apache 2.0 License
http://github.com/robey/kestrel/tree/master
http://search.twitter.com
Originally develop by Summize
Real time search over Twitter-XMPP-Stream
Requests with Atom and JSON:
http://search.twitter.com/search.atom?q=<query>
http://search.twitter.com/search.json?q=<query>
Folie 14
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
15. Twitter Basics (1)
Tweet
A Post (message, update) at Twitter
Max. 140 Characters (incl. white space), only text
Timeline
History of the latest updates
„Public Timeline“:
Updates of all users („Everyone“)
Folie 15
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
16. Twitter Basics (2)
Follow
Selection of „Friends“ for your own
timeline („Stream“)
„Followers“ are following you own
updates
Personal Page
You own Timeline
Status informationen
Folie 16
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
17. Twitter Basics (3)
Replies
Response to an other user
To reply, add „@username“
to the message
Replies can be from your „Friends“
or any other user
Direct Messages
Private messages
Can be sent to your “Follower” only,
not to “Friends”
Retweets
„Forward“ of interesting updates to own friends
Usually, Retweets starts with a „RT“
Folie 17
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
18. Hashtags
Hashtags in Twitter messages
Begins with a hash „#“
Often used for events, cities, countries, …
Examples
#birmingham #europython
Folie 18
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
19. Twitter Applications
Web applications
Native Clients
Windows, Mac OS X, Linux
iPod/iPhone
Smartphones
Integration in existing applications
Instant Messenger
Social Networking Services
See list at
http://twitter.pbwiki.com/Apps
Folie 19
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
20. Twitter API
Folie 20
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
21. Twitter API
REST-based API
HTTP-Requests
Data formats: XML, JSON, RSS, Atom
Authentication with OAuth or HTTP Basic Authentication
Error messages are provided (e.g., in XML):
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<request>/direct_messages/destroy/456.xml</request>
<error>No direct message with that ID found.</error>
</hash>
Limitation: Max. 100 Requests in 60 minutes per client
Based on: IP (unauthorized) or User ID (authorized)
Documentation: http://apiwiki.twitter.com
Folie 21
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
22. API Methods (1)
Status Methods User Methods
public_timeline friends
friends_timeline followers
user_timeline featured
show show
update Direct Message Methods
replies direct_messages
destroy sent
Account Methods new
verify_credentials destroy
end_session Friendship Methods:
archive create
update_location destroy
update_delivery_device exists
Folie 22
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
23. API Methods (2)
Favorite Methods Notification Methods
favorites follow
create leave
destroy
Block Methods
Help Methods create
test destroy
downtime_schedule
Folie 23
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
24. Authentication
Two Techniques to Authenticate with the REST API
Basic Auth
Sends user credentials in the header of the HTTP request
Easy to use, but insecure and difficult to track
OAuth
Token-passing mechanism
Allows users to control which application
have access to their data without
giving away their passwords
Specification: http://oauth.net/
Registration of clients:
http://twitter.com/oauth_clients
http://oauth.net/core/1.0/
Folie 24
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
25. Twitter API: Getting Started (1)
Public Timeline
Getting the Public Timeline (last 20 entries)
As RSS
curl http://twitter.com/statuses/public_timeline.rss
As JSON
curl http://twitter.com/statuses/public_timeline.json
As XML
curl http://twitter.com/statuses/public_timeline.xml
Folie 25
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
26. Twitter API: Getting Started (2)
Timeline of your own „Friends“
curl -u python_demo:***
http://twitter.com/statuses/friends_timeline.xml
Folie 26
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
27. Twitter API: Getting Started (3)
Posting of „Updates“
curl -u python_demo:****
-d status="This message was sent using cURL"
http://twitter.com/statuses/update.json
Folie 27
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
28. Libraries
List of libraries: http://apiwiki.twitter.com/Libraries
ActionScript / Flash
C++
C#/.NET
Java
Objective-C/Cocoa
Perl
PHP
PL/SQL
Python
Ruby
Scala
Folie 28
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
29. Twitter Libraries in Python
Python Libraries
python-twitter by DeWitt Clinton.
This library provides a pure Python interface for
the Twitter API.
python-twyt by Andrew Price.
BSD licensed Twitter API interface library and
command line client.
twitty-twister by Dustin Sallings.
A Twisted interface to Twitter.
Python Twitter Tools (PPT) by Mike Verdone
a Twitter API, command-line tool, and IRC bot
Folie 29
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
30. python-twitter
Pure Python Interface for the Twitter API
Project information
Project site: http://code.google.com/p/python-twitter/
Author: DeWitt Clinton (Google; http://unto.net)
Apache License 2.0
Provided functionality
Supported Methods: Status, User, Direct message
Authentication: Basic Auth
Provides a Python wrapper around the Twitter API and data model
Requirements
simplejson (http://cheeseshop.python.org/pypi/simplejson)
Folie 30
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
31. Twyt
A Twitter API interface for Python
Project information
Project site: http://andrewprice.me.uk/projects/twyt/
Author: Andrew Price
BSD License
Provided functionality
Supported Methods: Status, User, Direct Message, Friendship, Social
Graph, Block
Authentication: Basic Auth, OAuth
Folie 31
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
32. twitty-twister
A Twisted interface to Twitter
Project information
Project site:
http://github.com/dustin/twitty-twister/tree/master
Author: Dustin Sallings
License: ?
Provided functionality
Supported methods: Status, User, Direct message, Friendship
Authentication: Basic Auth, OAuth
Folie 32
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
33. Python Twitter Tools (PTT)
Twitter API, command-line tool, and IRC bot
Project information
Projekt site: http://mike.verdone.ca/twitter/
Author: Mike Verdone
MIT License
Provided functionality
Supported methods: status, user, direct message
Authentication: Basic Auth
IRC bot that can announce Twitter updates to an IRC channel
Requirements
irclib (http://python-irclib.sourceforge.net)
Folie 33
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
34. Comparison
Python Twitter Libraries
Library Supported API Supported Requirements
Methods Authentication
Python-twitter Status, User, Direct Basic Auth simplejson
message
Twyt Status, User, Direct Basic Auth,
Message, OAuth
Friendship, Social
Graph, Block
Twitty-twister Status, User, Direct Basic Auth, Twisted
message, OAuth
Friendship
Python Status, User, Direct Basic Auth (irclib)
Twitter Tools message
Folie 34
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
35. Examples and Demos
Folie 35
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
36. Example
Get all Updates of a User
import twitter
api = twitter.Api()
statuses = api.GetUserTimeline('DLR_de')
print [s.text for s in statuses[:5]]
[u"Video: @NASA's SOFIA mission update http://tinyurl.com/cmmna3
#SOFIA (Stratospheric Observatory For Infrared Astronomy)", u'Video
zur GOCE-Mission (Messung der Schwerkraft) http://tinyurl.com/c5zhdb
#euronews', u'(EN) Now following @ESAGermany and @ESAGOCE',
u'@AndreasSchepers Gute Frage. Immerhin hat die NASA-Mission
keinen Vornamen. #Johannes #ATV #NASA', u'RT @AndreasSchepers
Thomas Reiter: Wir wissen mehr xfcber den Mars als den Mond.
http://is.gd/k7qZ #Mp3 #DeutschlandRadioKultur #DLR-Vorstand']
Folie 36
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
37. Example
Posting an Update
import twitter
api = twitter.Api(username='python_demo',
password='***')
api.PostUpdate('Moin!')
Folie 37
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
38. Example
Adding a Friend („Follow“)
import twitter
api = twitter.Api(username='python_demo', password='***')
user = api.CreateFriendship('pycologne')
print user
{"description": "Python User Group Cologne", "id": 23515458, "location":
"Cologne, Germany", "name": "PyCologne", "profile_image_url":
"http://s3.amazonaws.com/twitter_production/profile_images/91413444/p
ycologne_logo_small_quadratisch_normal.jpg", "screen_name":
"pycologne", "url": "http://www.pycologne.de"}
Folie 38
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
39. Example
„tail –f“ to Twitter
# based on http://code.activestate.com/recipes/157035/
import time, os
import twitter
api = twitter.Api(username='python_demo', password=‘***')
file = open('test.log','r')
# ... <Find the size of the file and move to the end>
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
api.PostUpdate(line)
Folie 39
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
40. Example
„tail –f“ to Twitter
Folie 40
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
41. Demo
Twitter in Software Engineering
Notifications from SVNChecker (http://svnchecker.tigris.org/)
Folie 41
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
42. Demo
Twitter on Smart Phones
Posting incoming SMS to Twitter account
Folie 42
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
43. Demo
Twitter Notification from MoinMoin Wiki
Twitter handler for the MoinMoin Event System
python-twitter
Folie 43
EuroPython 2009 > Andreas Schreiber> Twittering with Python > 30.06.2009
Editor's Notes
EuroPython talk “Twittering with Python” by @onyame http://tr.im/schreiber #europython
Follow this presentation @ python_demo
Final version of this presentation is available on @slideshare http://tr.im/ep09twt
What is Twitter? Summary from http://en.wikipedia.org/wiki/Twitter
History of My Blog http://tr.im/pXOi by Hugh MacLeod @gapingvoid
Many, many people are on Twitter, e.g. see http://tr.im/pXBr by @ timesonline
Many many people are on Twitter! For examples, see http://tr.im/pXBr
Guido „Creator of Python“ van Rossum on Twitter: @gvanrossum
German Aerospace Center (DLR) on Twitter: @DLR_de
The Open Source CMS Plone on Twitter: @plone
Python Package Index on Twitter: @pypi #python
BBC News on Twitter: @bbcbreaking (btw. I’m so sad about #michaeljackson)
EuroPython on Twitter: @europython
Supercomputing conference SC09 on Twitter: @SuperComputing
http://twitter.com uses Ruby on Rails http://rubyonrails.org/
I
Search for hash tags, such as http://search.twitter.com/search?q=%23europython
There are many Twitter application, see http://twitter.pbwiki.com/Apps
Coming to the Twitter Application Programming Interface…
Twitter has an REST-based API: http://apiwiki.twitter.com
Twitter API methods include Status, Account, User, Direct Message, and Friendship …
Twitter API methods include Favorite, Help, Notification, and Block
Twitter supports Basic HTTP authentication and OAuth http://oauth.net/
There are Twitter libraries for many languages http://apiwiki.twitter.com/Libraries … of course, we are interested in #python ;-)
At least 4 Python Twitter libraries exist: http://tr.im/pytwitter http://tr.im/twyt http://tr.im/twittytwister http://tr.im/pytwittertools
Library #1: python-twitter http://tr.im/pytwitter by Dewitt Clinton @dewitt
API and Data model of python-twitter http://tr.im/pytwitter
Library #2: Twyt http://tr.im/twyt by Andrew Price @andyprice
API and Data model of Twyt http://tr.im/twyt
Library #3: twitty-twister http://tr.im/twittytwister by Dustin Sallings @ dlsspy
API and data model of twitty-twister http://tr.im/twittytwister
Library #4: Python Twitter Tools (PTT) http://tr.im/pytwittertools by Mike Verdone @verdonethestone
API and data model of Python Twitter Tools http://tr.im/pytwittertools
Some simple examples for the Python Twitter Tools
Direct comparison of all Python Twitter Libraries
Now showing some examples and demos… #twitter #python
Demo: Show recent updates of user @DLR_de
Demo: Post an update… very simple ;-)
Demo: Add the Python User Group Cologne @pycologne as a friend #köln
The tail2twitter is an extension of http://code.activestate.com/recipes/157035
tail2twitter can be used to monitor server log files.
Demo: Notification from SVNChecker (see presentation from #europython 2008 http://tr.im/q38T)
It’s easy to develop Twitter application on Smart phones with PyS60 http://tr.im/q4wm
Demo: Slide change notification from Microsoft PowerPoint. If you read this message, the demo is successful!
In Python, it’s very easy to catch the slide change event http://msdn.microsoft.com/en-us/library/bb231077.aspx
For details see Roy Han’s #pycon tutorial Automating Windows Applications with win32com http://tr.im/q43o
Demo: Twitter notification from MoinMoin Wiki http://moinmo.in/
Thank You! For further contact: follow @onyame, visit http://tr.im/schreiber, or send E-Mail to python@dlr.de