aBigRoybot

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

为了使用新浪微博开放平台提供的API(应用程序接口),你需要先注册一个应用。我们会给每一个应用一个专属的App Key和App Secret。Key跟Secret的使用方式跟其他一些协议中的公钥私钥的方案相类似,你可以使用你所熟悉的编程语言将key和secret结合,为你发出的每个请求添加签名,以此来向新浪微博开放平台表明自己身份的合法性。 

OAuth基本流程 

获取request token 
获取request token是进行用户认证的第一步。这一步主要有两个目的: 
第一,告诉新浪微博你将要做什么 
第二,告诉新浪微博你在callback里要做什么 
新浪微博开放平台的request token获取接口地址为:http://api.t.sina.com.cn/oauth/request_token 
下面举个例子,以下是请求用的参数: 

consumer secret - "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98"  
oauth_callback - http://localhost:3005/the_dance/process_callback?service_provider_id=11  
oauth_consumer_key - GDdmIQH6jhtmLUypg82g  
oauth_nonce - QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk  
oauth_signature_method - HMAC-SHA1  
oauth_timestamp - 1272323042  
oauth_version - 1.0  

  当服务器端接到请求之后,会返回包含oauth_token,oauth_token_secret等内容。 
这时需要将oauth_token和oauth_token_secret记下,我们需要用这个参数来获取access token。 

用户认证 
这一步主要是发送你(即应用)获取的oauth_token,并且获得用户的授权。一般来说,WEB应用会简单的重定向到相应的页面. 
新浪微博开放平台的验证URL是http://api.t.sina.com.cn/oauth/authorize 。要求必须以oauth作为参数,一般来说请求格式如下: 

http://api.t.sina.com.cn/oauth/authorize?oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc

  如果用户没有登录新浪微博,则会要求用户登录。否则将会出现一个页面,用户可以在此页面上一键同意或者拒绝对此应用授权。用户授权后,web应用页面将会重定向至你指定的oauth_callback。 
如果使用了callback,那么oauth_callback应该已经接到返回的信息,其中包含oauth_token和oauth_verifier。样例如下: 

oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_verifier=pDNg57prOHapMbhv25RNf75lVRd6  

  获取access token 
新浪微博开放平台access token请求地址为:http://api.t.sina.com.cn/oauth/access_token 
以下是请求参数列表: 

oauth_consumer_key - GDdmIQH6jhtmLUypg82g  
oauth_nonce - 9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8  
oauth_signature_method - HMAC-SHA1  
oauth_token - 8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc  
oauth_timestamp - 1272323047  
oauth_verifier - pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY  
oauth_version - 1.0  
oauth_token_secret - x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA 

  新浪微博开放平台会返回应用需要的信息,包括用户名,oauth_token/oaut_token_secret(当然这里就是access token了)。 response内容如下: 

oauth_token=819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw&oauth_token_secret=J6zix3FfA9LofH0aw  

  现在就可以使用access token来发布信息了。 

获取用户信息 
接下来,就可以进行用户验证(如果验证成功,将会返回用户的详细信息)了。以下是进行用户验证的相关参数: 

oauth_consumer_key - GDdmIQH6jhtmLUypg82gる  
oauth_nonce - oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y  
oauth_signature_method - HMAC-SHA1  
oauth_token - 819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw//注:这个是access token  
oauth_timestamp - 1272325550  
oauth_version - 1.0

  响应如下: 

{  
    weibo=null,   
    id=1803876591,   
    name='loopa',   
    screenName='loopa',   
    location='北京 海淀区',   
    description='2fBAcRG0]8OGRvp',   
    profileImageUrl='http://tp4.sinaimg.cn/1803876591/50/0',   
    url='',   
    isProtected=false,   
    followersCount=23,   
    statusCreatedAt=Mon Sep 27 13:50:14 CST 2010,   
    statusId=2847344825,   
    statusText='uhYFQJ[',   
    statusSource='<a href="" rel="nofollow">微博开放平台接口</a>',   
    statusTruncated=false,   
    statusInReplyToStatusId=0,   
    statusInReplyToUserId=0,   
    statusFavorited=false,   
    statusInReplyToScreenName='',   
    profileBackgroundColor='',   
    profileTextColor='',   
    profileLinkColor='',   
    profileSidebarFillColor='',   
    profileSidebarBorderColor='',   
    friendsCount=1,   
    createdAt=Fri Aug 27 00:00:00 CST 2010,   
    favouritesCount=0,   
    utcOffset=-1,   
    timeZone='',   
    profileBackgroundImageUrl='',   
    profileBackgroundTile='',   
    following=false,   
    notificationEnabled=false,   
    statusesCount=8509,   
    geoEnabled=false,   
    verified=false  
}  

  使用OAuth发表微博 
接下来,就可以使用获取的oauth_token和oauth_token_secret来发送微博了。发微博可以通过Statuses/update接口,以下是相关参数: 

POST body - status=通过OAuth发送微博信息  
oauth_consumer_key - GDdmIQH6jhtmLUypg82g  
oauth_nonce - oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y  
oauth_signature_method - HMAC-SHA1  
oauth_token - 819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw  
oauth_timestamp - 1272325550  
oauth_version - 1.0   

  服务器端的响应如下: 

{  
    "created_at": "Mon Oct 11 12:00:16 +0800 2010",   
    "favorited": false,   
    "geo": null,   
    "id": 3034670049,   
    "in_reply_to_screen_name": "",   
    "in_reply_to_status_id": "",   
    "in_reply_to_user_id": "",   
    "source": "<a href=\"http://open.t.sina.com.cn\" rel=\"nofollow\">\u5fae\u535a\u5f00\u653e\u5e73\u53f0\u63a5\u53e3</a>",   
    "text": "\u901a\u8fc7OAuth\u53d1\u9001\u5fae\u535a\u4fe1\u606f",   
    "truncated": false,   
    "user": {  
        "allow_all_act_msg": false,   
        "city": "8",   
        "created_at": "Fri Aug 28 00:00:00 +0800 2009",   
        "description": "Blogger\uff0c\u82f9\u679c\u8ff7\uff0cGoogle\u7c89\u3002",   
        "domain": "westy",   
        "favourites_count": 1,   
        "followers_count": 83,   
        "following": false,   
        "friends_count": 56,   
        "gender": "m",   
        "geo_enabled": true,   
        "id": 1642466141,   
        "location": "\u5317\u4eac \u6d77\u6dc0\u533a",   
        "name": "huchao",   
        "profile_image_url": "http://tp2.sinaimg.cn/1642466141/50/1285424071",   
        "province": "11",   
        "screen_name": "huchao",   
        "statuses_count": 209,   
        "url": "http://tuoniao.org",   
        "verified": false  
    }  
}  

  

小结,大致步骤为 
1    应用向微博平台发起请求,获得一个临时的oauth_token,和oauth_token_secret(A),这套key被称为request token. 
2    应用将用户转向到微博授权页面,同时带上这个token和一个回调页面地址 
3    用户在微博上同意授权后,会生成oauth_verifier(B),并在转向到回调页面是带上这个值. 
4    应用通过$_REQUEST得到oauth_verifier(注意是在$_REQUEST中得到的,因此),再加上之前(A)处的oauth_token和oauth_token_secret,向微博发起最后一次请求. 
5    微博平台验证无误后,发给应用另外一套oauth_token和oauth_token_secret(C),这套key被成为access token. 
6    拿到access token意味着应用已经获得了授权.之后应用就可以通过access token获取和发送微博了. 
注1:access token不用每次都去取,可以把它保存下来,供下次使用.这样性能更高. 
注2:oauth_verifier是应用通过$_REQUEST得到的,因此不能将对oauth_verifier的获取放到weibolist.php中,不然在刷新之后就不能得到这个值了。 
注3:demo中将oauth_verifier的获取以及得到access token都放在callback.php中,这么设计是很合理的,满足了注1和注2。. 
注4:demo中没有明确的获取用户信息的代码,可以认为是在得到access token时就得到了用户信息。 

  

  

posted on 2011-11-15 20:59  aBigRoybot  阅读(797)  评论(0编辑  收藏  举报