Support cursors when listing subscribers to a list.
authorMagnus Hagander <magnus@hagander.net>
Sat, 28 Aug 2010 12:20:59 +0000 (14:20 +0200)
committerMagnus Hagander <magnus@hagander.net>
Sat, 28 Aug 2010 12:20:59 +0000 (14:20 +0200)
It seems the twitter api always uses this even though it's supposed
to be optional.

twitterclient.py

index c64d263832214c74fca8b343411f4a0bee7834e0..22d8db9e918e201d32769f98fe7f7b42da221dce 100644 (file)
@@ -58,8 +58,18 @@ class TwitterClient(object):
                return json.loads(ret)
 
        def list_subscribers(self):
-               response = self.twitter_request('%s/%s/members.json' % (self.twittername, self.twitterlist))
-               return [x['screen_name'] for x in response['users']]
+               # Eek. It seems subscribers are paged even if we don't ask for it
+               # Thus, we need to loop with multiple requests
+               cursor=-1
+               handles = []
+               while cursor != 0:
+                       response = self.twitter_request('%s/%s/members.json' % (self.twittername, self.twitterlist), 'GET', {
+                                       'cursor': cursor,
+                                       })
+                       handles.extend([x['screen_name'] for x in response['users']])
+                       cursor = response['next_cursor']
+
+               return handles
 
        def remove_subscriber(self, name):
                print "Removing twitter user %s from list." % name