support '.twitter <user> <id>', closes issue #1

This commit is contained in:
Ryan Hitchman 2009-11-17 18:21:11 -07:00
parent 7e30d5d0a3
commit e9f3beb86f
1 changed files with 25 additions and 6 deletions

View File

@ -6,6 +6,7 @@ retrieves most recent tweets
import re import re
import urllib2 import urllib2
from lxml import etree from lxml import etree
from time import strptime, strftime
from util import hook from util import hook
@ -24,19 +25,29 @@ def unescape_xml(string):
@hook.command @hook.command
def twitter(inp): def twitter(inp):
".twitter <user>/<id> - gets last tweet from <user>/gets tweet <id>" ".twitter <user>/<user> <n>/<id> - gets last/<n>th tweet from <user>/gets tweet <id>"
inp = inp.strip() inp = inp.strip()
if not inp: if not inp:
return twitter.__doc__ return twitter.__doc__
getting_nth = False
getting_id = False getting_id = False
if re.match('^\d+$', inp): if re.match('^\d+$', inp):
getting_id = True getting_id = True
url = 'http://twitter.com/statuses/show/%s.xml' % inp url = 'statuses/show/%s.xml' % inp
elif re.match('^\w{,15}$', inp): elif re.match('^\w{,15}$', inp):
url = 'http://twitter.com/statuses/user_timeline/%s.xml?count=1' % inp url = 'statuses/user_timeline/%s.xml?count=1' % inp
elif re.match('^\w{,15}\s+\d+$', inp):
getting_nth = True
name, num = inp.split()
if int(num) > 3200:
return 'error: only supports up to the 3200th tweet'
url = 'statuses/user_timeline/%s.xml?count=1&page=%s' % (name, num)
else: else:
return 'error: invalid username' return 'error: invalid username'
url = 'http://twitter.com/' + url
try: try:
xml = urllib2.urlopen(url).read() xml = urllib2.urlopen(url).read()
@ -58,7 +69,15 @@ def twitter(inp):
if not getting_id: if not getting_id:
tweet = tweet.find('status') tweet = tweet.find('status')
if tweet is None: if tweet is None:
return 'error: user has no tweets' if getting_nth:
return 'error: user does not have that many tweets'
else:
return 'error: user has no tweets'
return unescape_xml(': '.join(tweet.find(x).text.replace('\n', '') for x in time = strftime('%Y-%m-%d %H:%M:%S',
'created_at user/screen_name text'.split())) strptime(tweet.find('created_at').text,
'%a %b %d %H:%M:%S +0000 %Y'))
screen_name = tweet.find('user/screen_name').text
text = unescape_xml(tweet.find('text').text.replace('\n', ''))
return "%s %s: %s" % (time, screen_name, text)