From fc0244c9524f4fdfd00dea135061482971d33f5f Mon Sep 17 00:00:00 2001 From: Hamled Date: Sat, 16 Jan 2010 19:03:10 -0800 Subject: [PATCH] Updated twitter module to allow fetching replied-to tweets. --- plugins/twitter.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/plugins/twitter.py b/plugins/twitter.py index 3b8cfd8..2f691a5 100644 --- a/plugins/twitter.py +++ b/plugins/twitter.py @@ -23,29 +23,50 @@ def unescape_xml(string): return string.replace('>', '>').replace('<', '<').replace(''', "'").replace('"e;', '"').replace('&', '&') +history_max_size = 250 @hook.command -def twitter(inp): - ".twitter / //# -- gets last/th tweet from"\ - "/gets tweet /gets random tweet with #" +def twitter(inp, history = list()): + ".twitter / //#/@ -- gets last/th tweet from"\ + "/gets tweet /gets random tweet with #/gets replied tweet from @" inp = inp.strip() if not inp: return twitter.__doc__ + def add_reply(reply_name, reply_id): + if len(history) == history_max_size: + history.pop() + history.insert(0, (reply_name, reply_id)) + + def find_reply(reply_name): + for name, id in history: + if name == reply_name: + return id + return None url = 'http://twitter.com' getting_nth = False getting_id = False searching_hashtag = False - + + if inp[0] == '@': + reply_id = find_reply(inp[1:]) + if reply_id == None: + return 'error: no replies to %s found' % inp + inp = reply_id + time = 'status/created_at' text = 'status/text' + reply_name = 'status/in_reply_to_screen_name' + reply_id = 'status/in_reply_to_status_id' if re.match(r'^\d+$', inp): getting_id = True url += '/statuses/show/%s.xml' % inp screen_name = 'user/screen_name' time = 'created_at' text = 'text' + reply_name = 'in_reply_to_screen_name' + reply_id = 'in_reply_to_status_id' elif re.match(r'^\w{1,15}$', inp): url += '/users/show/%s.xml' % inp screen_name = 'screen_name' @@ -99,6 +120,11 @@ def twitter(inp): if time is None: return 'error: user has no tweets' + reply_name = tweet.find(reply_name) + reply_id = tweet.find(reply_id) + if reply_name, reply_id: + add_reply(reply_name, reply_id) + time = strftime('%Y-%m-%d %H:%M:%S', strptime(time.text, '%a %b %d %H:%M:%S +0000 %Y'))