zoukankan      html  css  js  c++  java
  • 新浪微博Sdk使用——air/移动应用

    官方网站上面提供的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("发布失败");
                }
            }
            
        }
    }
  • 相关阅读:
    Spark完成wordCount
    Spark介绍
    分库分表介绍
    rpc学习
    xgboost应用
    ElasticSearch 批量增加索引
    乡愁
    java futureTask的使用
    ElasticSearch 例子
    Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression
  • 原文地址:https://www.cnblogs.com/flashbird/p/3346542.html
Copyright © 2011-2022 走看看