您的位置:首页 > 其它

新浪微博数据挖掘食谱之十二: 用户篇 (批量获取用户的粉丝数和朋友数)

2015-01-08 05:27 483 查看
#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
Created on 2015-1-8
@author: beyondzhou
@name: fetch_friends_followers.py
'''

# Fetch user friends followers id
def fetch_friends_followers():

# import
#import json
from login import weibo_login
from users import get_friends_followers_ids

# Access to sina api
weibo_api = weibo_login()

friends_ids, followers_ids = get_friends_followers_ids(weibo_api,
screen_name="beyondzhou8",
friends_limit=10,
followers_limit=10)
print friends_ids
print followers_ids

if __name__ == '__main__':
fetch_friends_followers()


# Getting all friends or followers for a user
def get_friends_followers_ids(weibo_api, screen_name=None, user_id=None,
friends_limit=maxint, followers_limit=maxint):

# import sys
import sys

# import functools, sys
from functools import partial

# import make_twitter_request
from login import make_weibo_request

# Must have either screen_name or user_id (logical xor)
assert (screen_name != None) != (user_id != None), \
"Must have screen name or user_id, but not both"

# See http://open.weibo.com/wiki/2/friendships/friends/ids and
# http://open.weibo.com/wiki/2/friendships/followers/ids for details
# on API parameters
get_friends_ids = partial(make_weibo_request, weibo_api.friendships.friends.ids.get, count=5000)
get_followers_ids = partial(make_weibo_request, weibo_api.friendships.followers.ids.get, count=5000)

friends_ids, followers_ids = [], []
for weibo_api_func, limit, ids, label in [
[get_friends_ids, friends_limit, friends_ids, "friends"],
[get_followers_ids, followers_limit, followers_ids, "followers"]
]:

if limit == 0: continue
cursor = -1
while cursor != 0:

# Use make_weibo_request via the partially bound callable...
if screen_name:
response = weibo_api_func(screen_name=screen_name, cursor=cursor)
else:
response = weibo_api_func(user_id=user_id, cursor=cursor)

if response is not None:
ids += response['ids']
cursor = response['next_cursor']

print >> sys.stderr, 'Fetched {0} total {1} ids for {2}'.format(len(ids), label, (user_id or screen_name))

# You may want to store data during each iteration to provide an additional
# layer of protectio from exceptional circumstances
if len(ids) >= limit or response is None:
break

# Do something useful with the IDs, like store them to disk...
return friends_ids[:friends_limit], followers_ids[:followers_limit]

Result:

callback_url: https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A//apps.weibo.com/guaguastd&response_type=code&client_id=2925245021 return_redirect_uri: http://weibo.com/login.php?url=http%3A%2F%2Fapps.weibo.com%2Fguaguastd%3Fcode%3Dde47ae74f35c09dadf555621df5a6591 code: ['de47ae74f35c09dadf555621df5a6591']
Fetched 3 total friends ids for beyondzhou8
Fetched 3 total friends ids for beyondzhou8
Fetched 0 total followers ids for beyondzhou8
[1826958817, 1650042843, 1784501333]
[]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: