読者です 読者をやめる 読者になる 読者になる

python-twitterで100人以上のフォロイーを取得

python-twitterのGetFriends()では、上から100人までのフォロイー(フォローしているユーザ)しか取得できない。

Twitterでは100人を1ページとして格納しているらしく、その最初の1ページが返ってくるのである。

しかし、TwitterAPI仕様書によると、ページのカーソルを指定することで他のページも取得できるとのこと。

そこで、twitter.pyのGetFriends()を以下のように変更。

これで、フォロイー全員分を一度に取得できる。

def GetFriends(self, user=None, cursor=-1):
    '''Fetch the sequence of twitter.User instances, one for each friend.

    The twitter.Api instance must be authenticated.

    Args:
      user:
        The twitter name or id of the user whose friends you are fetching.
        If not specified, defaults to the authenticated user. [Optional]

    Returns:
      A sequence of twitter.User instances, one for each friend
    '''
    if not user and not self._oauth_consumer:
      raise TwitterError("twitter.Api instance must be authenticated")
    user_list = []
    while cursor != 0:
      url = '%s/statuses/friends/%s.json?cursor=%d' % (self.base_url, user, cursor)
      parameters = {}
      parameters['cursor'] = cursor
      json = self._FetchUrl(url, parameters=parameters)
      data = self._ParseAndCheckTwitter(json)
      cursor = data['next_cursor']
      for x in data['users']:
        tmp = User.NewFromJsonDict(x)
        if tmp.protected == False:
            user_list.append(tmp)
    return user_list