代码改变世界

Auth2.0微博应用范例

2012-07-17 10:37  夜幕降临  阅读(2393)  评论(0编辑  收藏  举报

  现在微博已经成为研究社交网络的一个很重要数据来源,作为国内最受欢迎的微博——新浪微博成为了我们抓取数据的重要来源。下面简单介绍一下如何利用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”导入模块,可以要根据你自己的包位置来调整。