Refactor the posttotwitter.py script to use TwitterClient.
authorMagnus Hagander <magnus@hagander.net>
Sat, 28 Aug 2010 11:59:59 +0000 (13:59 +0200)
committerMagnus Hagander <magnus@hagander.net>
Sat, 28 Aug 2010 11:59:59 +0000 (13:59 +0200)
posttotwitter.py
synctwitter.py
twitterclient.py

index 16be885ef8b2427c787268365131f5933ddf1ba0..3b79d1a88ba6643f8539d031f7f195c6c4dd5aaf 100755 (executable)
@@ -15,14 +15,12 @@ import psycopg2.extensions
 import urllib
 import simplejson as json
 import ConfigParser
-import time
-import oauth2 as oauth
+from twitterclient import TwitterClient
 
 
-class PostToTwitter:
+class PostToTwitter(TwitterClient):
        def __init__(self, cfg):
-               self.oauth_token = oauth.Token(cfg.get('twitter', 'token'), cfg.get('twitter', 'secret'))
-               self.oauth_consumer = oauth.Consumer(cfg.get('twitter', 'consumer'), cfg.get('twitter', 'consumersecret'))
+               TwitterClient.__init__(self, cfg)
 
                if cfg.has_option('bit.ly','account'):
                        self.bitlyuser = cfg.get('bit.ly','account')
@@ -35,28 +33,11 @@ class PostToTwitter:
        def do_post(self, msg):
                """
                Actually make a post to twitter!
-
-               Authentication is done through OAuth, which controls the user to whom this is posted.
                """
-               params = {
-                       'oauth_version': "1.0",
-                       'oauth_nonce': oauth.generate_nonce(),
-                       'oauth_timestamp': int(time.time()),
-                       'oauth_token': self.oauth_token.key,
-                       'oauth_consumer_key': self.oauth_consumer.key,
-                       'status': msg,
-                       }
-
-               req = oauth.Request(method="POST",
-                                                       url="https://api.twitter.com/1/statuses/update.json",
-                                                       parameters=params)
-               req.sign_request(oauth.SignatureMethod_HMAC_SHA1(), self.oauth_consumer, self.oauth_token)
-
-               # Make the actual call to twitter
-               instream=urllib.urlopen("https://api.twitter.com/1/statuses/update.json", req.to_postdata())
-               ret=instream.read()
-               instream.close()
-               ret_dict = json.loads(ret)
+               ret_dict =self.twitter_request('statuses/update.json', 'POST', {
+                               'status': msg,
+                               })
+
                if ret_dict.has_key('created_at'):
                        return
                if ret_dict.has_key('error'):
index b2a976dd2a83f1c125ea8cbcc1c86bd866e2f520..3d22ab94de40b1d910f72a8b3d5480e1fc80ef9d 100755 (executable)
@@ -27,7 +27,7 @@ class SyncTwitter(TwitterClient):
                expected = set([r[0] for r in curs.fetchall()])
 
                # Get list of current screen names the list is following
-               response = self.twitter_request('subscribers/members.json')
+               response = self.twitter_request('%s/subscribers/members.json' % self.twittername)
                current = set([x['screen_name'] for x in response['users']])
 
                # Start by deleting, then adding the new ones
index bf7c0091da6b90a94a90511b8c91c62fceb2a820..6e5e10158974f277eb7ae8fe97242e7f7011c3e9 100644 (file)
@@ -40,7 +40,7 @@ class TwitterClient(object):
                if ext_params:
                        params.update(ext_params)
 
-               url = "https://api.twitter.com/1/%s/%s" % (self.twittername, apicall)
+               url = "https://api.twitter.com/1/%s" % apicall
 
                req = oauth.Request(method=method,
                                                        url=url,
@@ -58,13 +58,13 @@ class TwitterClient(object):
 
        def remove_subscriber(self, name):
                print "Removing twitter user %s from list." % name
-               self.twitter_request('subscribers/members.json', 'POST', {
+               self.twitter_request('%s/subscribers/members.json' % self.twittername,'POST', {
                                'id': name,
                                '_method': 'DELETE',
                                })
 
        def add_subscriber(self, name):
                print "Adding twitter user %s to list." % name
-               self.twitter_request('subscribers/members.json', 'POST', {
+               self.twitter_request('%s/subscribers/members.json' % self.twittername, 'POST', {
                                'id': name,
                                })