现在微博已经成为研究社交网络的一个很重要数据来源,作为国内最受欢迎的微博——新浪微博成为了我们抓取数据的重要来源。下面简单介绍一下如何利用API来获取微博中的数据,新浪微博现在使用auth2.0协议(参见新浪微博授权和维基百科)。最常用的授权方式是根据你的应用回调页产生一个授权页面,在这个授权页面用微博帐号进行授权,授权之后会返回一个code,用code就可以生成一个访问微博数据库的access_token,一般来说一个access_token的生命周期是1天左右。
创建应用
首先我们需要创建一个新浪微博应用,详细创建过程如下:
<1>进入首页
<2>点击创建应用时,我使用了其他应用,貌似其他类型的应用我都找不到哪里设置回调页面。
<3>创建应用后,需要设置一下回调页面的信息等等,记下app key和app secret,这个后面得用。
<4>设置回调页面网址,在应用信息->高级信息里面设置回调页面地址,微博sdk会用回调页面信息生成一个授权页面地址。
应用生成完毕,现在我们就可以用app key、app secret和回调页面做开发了,下载一个自己顺手的sdk,本文采用python sdk,下面用代码说明如何使用API。
用API获取数据
<1>获取授权页面地址
#-*- encoding:utf8 -*- from sdk.weibo import APIClient APP_KEY = 'xxxxxxxx # 换成你自己的 APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 换成你自己的 CALLBACK_URL = 'http://www.baidu.com'#填你自己的授权回调页面 client = APIClient(APP_KEY, APP_SECRET, CALLBACK_URL); #得到授权页面地址 url = client.get_authorize_url(redirect_uri = CALLBACK_URL); #打印授权页面地址 print url
<2>运行上面代码会生成一个链接,用于授权
授权之后会跳到刚才填的回调页面那边去
此处记得把code等于号后面的一串东西超下来“fcc99a089e9df2967f58d2d3a3751368”记录下来,后面需要用到,用code可以生成access_token。
<3>生成access_token
#-*- encoding:utf8 -*- from sdk.weibo import APIClient APP_KEY = 'xxxxxxxxx' # app key APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx' # app secret CALLBACK_URL = 'http://www.baidu.com' client = APIClient(APP_KEY, APP_SECRET, CALLBACK_URL); code = 'fcc99a089e9df2967f58d2d3a3751368' #请求access_token r = client.request_access_token(code) access_token = r.access_token # 新浪返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 print access_token print expires_in
上面的代码会数据access_token,本文的输出为“2.00FaDqzBIxwDcCd27f003177A6fjWC”,用这个就可以获取微博数据了。
<4>用access_token获取微博数据
#-*- encoding:utf8 -*- from sdk.weibo import APIClient import time APP_KEY = 'xxxxxxxxx' # app key APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # app secret CALLBACK_URL = 'http://www.baidu.com' client = APIClient(APP_KEY, APP_SECRET, CALLBACK_URL); access_token = '2.00FaDqzBIxwDcCd27f003177A6fjWC' expires_in = 1342077789 client.set_access_token(access_token, expires_in) def getAllFriendsDetail(filename, **attrs): handle = open(filename, 'w') print attrs cursor = 0 while True: r = client.get.friendships__friends(cursor=cursor, **attrs) print r cursor = r['next_cursor'] for user in r['users']: handle.write(str(user['id']) + ',' + user['screen_name'] + "\n") if cursor == 0: break handle.close(); print("Done\n") getAllFriendsDetail("淘宝秘语粉丝详细信息.txt", count=100, screen_name=u"淘宝秘语")
上述代码根据用户名字获取好友列表的id和昵称,并且存入文件中,最后完成了数据获取。
注意:上述代码中“from sdk.weibo import APIClient”导入模块,可以要根据你自己的包位置来调整。