官方网站上面提供的Sdk是好好的,但是教程是严重滞后,使用的教程还是Oauth1.0的,2.0的教程网上介绍的也不多,前一段搜到郭少瑞分享的源代码程序,但是怎么也执行不了,后来仔细梳理了一下,发现他的方法和官网提供的借口调用友一个冲突的地方,只有请求授权,没有获取授权Access Token的步骤,所以自己重新写了一个Demo供大家参考。
据日的API文档和链接,大家可以去新浪官网里面查找,以下用到的URL定式,以及返回值的截取的规则你也可以根据官方文档自己总结。
链接地址:http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E
注意:因为官方Sdk里面使用了Json,所以我们不要调用第三方Json包库,否则会发生冲突,发送微博函数中,
mb.callWeiboAPI("2/statuses/update",{"status":message,"access_token":accessToken},"POST","callWeiboApiResult","callWeiboApiError");
会报错,提示Json dismatch
代码如下:
package { import com.sina.microblog.MicroBlog; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.LocationChangeEvent; import flash.geom.Rectangle; import flash.media.StageWebView; import flash.net.URLLoader; import flash.net.URLRequest; public class TestSinaWeibo extends Sprite { //APP ID private var appKey:String = "你的App Id"; //APP 秘钥 private var appSecret:String = "你的 App 密钥"; //新浪微薄接口封装 private var mb:MicroBlog; //令牌 private var accessToken:String; //微博信息 private var message:String = "这是我发送的第一条成功的测试微博"; public function TestSinaWeibo() { super(); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; //初始化新浪微博封装对象 if(mb == null) { mb = new MicroBlog(); mb.consumerKey = appKey; mb.consumerSecret = appSecret; } if(accessToken != null) { mb.access_token = accessToken; sendNewWeibo(); }else{ //使用webView提请授权Token var url:String = "https://api.weibo.com/oauth2/authorize"; url += "?client_id=" + appKey; url += "&redirect_uri=http://www.tech-mx.com"; url += "&display=mobile"; // url += "&response_type=code"; var viewWidth:int = stage.stageWidth; var viewHeight:int = stage.stageHeight; var webView:StageWebView = new StageWebView(); webView.stage = stage; webView.viewPort = new Rectangle(0,0,viewWidth,viewHeight); webView.loadURL(url); webView.addEventListener(Event.COMPLETE,onComplete); } } protected function onComplete(event:Event):void { //获取授权链接返回值lc var myWebView:StageWebView = event.target as StageWebView; var lc:String = myWebView.location; trace("url:"+lc); //从返回值lc获取Code var code:String = lc.slice(lc.indexOf("=")+1,lc.length); trace("Code:"+code); if(lc.indexOf("code=")>=0){ //评比非正常返回链接情况 //获取请求授权后,获取授权过的Access Token var url:String = "https://api.weibo.com/oauth2/access_token"; url += "?client_id=" + appKey; url += "&client_secret=" + appSecret; url += "&grant_type=authorization_code"; url += "&code="+code; url += "&redirect_uri=http://www.tech-mx.com"; var ur:URLRequest = new URLRequest(url); ur.method = "POST"; //必须是POST方法 var ul:URLLoader = new URLLoader(ur); ul.addEventListener(Event.COMPLETE,ulOnComplete); } } protected function ulOnComplete(event:Event):void { var ul:URLLoader = event.target as URLLoader; var str:String = ul.data; //获取返回值Access Token trace("json:"+str); accessToken = str.slice(str.indexOf(":"")+2,str.indexOf("",")); //获取Access Token trace("accessToken:"+accessToken); sendNewWeibo(); } private function sendNewWeibo():void { mb.addEventListener("callWeiboApiResult",callWeiboApiResultHandler); mb.addEventListener("callWeiboApiError",callWeiboApiResultHandler); mb.callWeiboAPI("2/statuses/update",{"status":message,"access_token":accessToken},"POST","callWeiboApiResult","callWeiboApiError"); } /**调用API的结果*/ private function callWeiboApiResultHandler(event:Event):void { if(event.type == "callWeiboApiResult") { trace("发布成功"); } else { trace("发布失败"); } } } }