<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術的開始

    統計

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術

    我的鏈接

    淘寶技術

    閱讀排行榜

    評論排行榜

    微博sdk的設計

    SDK代碼框架:

    OAuth認證:

    1.0:

    clip_image002

    2.0:

    clip_image004

    clip_image006

    clip_image008

    框架介紹:

    主要分為幾個部分,核心httpClient部分,認證相關的token部分和api調用部分。

    Weibo這個類是一個主體核心,調用的入口。

    當用戶完成上面介紹的授權后,通過weibo這個類來調用api實現功能。

    具體的步驟:
    認證:

    密鑰由App Secret和Token Secret組成(中間使用&符號分隔)
    簽名算法目前只支持HMAC-SHA1

    RequestToken requestToken = weibo.getOAuthRequestToken(backUrl);

    得到了requestToken。

    把得到的requestToken中的request token存好,比如放到tair中。

    跳轉訪問resToken.getAuthorizationURL()。

    這個網頁帶入用戶到認證頁面,用戶登錄后認證成功。

    返回到backUrl設定的callback頁面,并帶有請求參數oauth_verifier,如果oauth_verifier不為空,從tair中取出request token,用這兩個參數換取access Token。

    AccessToken accessToken = weboauth.requstAccessToken(resToken, verifier);

    如果這個accessToken不為空,則利用這個accessToken就可以調用api了。

    調用:

    每個調用接口類,通過httpClient構造一個httpRequest方法,get或者post,填充請求參數,然后通過URL的openConnection方法創建HttpURLConnection,并把所有請求參數設置到這個connection中去。然后連接即可。

    所有的返回值都在這個connection的Stream中,將所有返回的值都作為inputStream讀入到Response對象,再利用具體的api對象(比如Status)將所有返回值轉化為json 格式,即完成了調用。

    API設計:

    新浪微博SDK的api設計風格,簡單講我覺得是力求最簡,而犧牲了一些所謂的設計美學。

    Api的設計就是以Weibo類為核心的星型設計,所有的服務都統一走一個Weibo接口,其中包含了認證相關的,也包含了服務調用相關的,該類的代碼量為3446行。

    所有的網絡訪問都組合了HttpClient,而這個和通常理解的httpclient一樣,負責進行網絡連接訪問。

    所有的返回結果根據業務的不同也分為不同的類,比如Comment、User、Status等等,這些都是數據對象,繼承了WeiboResponse,WeiboResponse組合了Response這個自定義的類,Response通過依賴httpClient完成了所有的網絡操作。

    總結,我個人感覺,新浪微博的SDK系統設計追求了極簡風格,模塊之間的實際耦合不大,但是代碼的組織結構較差,類名包名等區分度不高。

    騰訊微博的SDK設計,相比新浪來說,結構上整潔了很多。這里列出一些區別,騰訊的httpClient是直接調用apache的,多了一些依賴;另外,建立了OAuthClient和QHttpClient兩個類,分離了認證和調用兩套操作;api操作獨立繼承Request_API類,隔離了數據對象類到beans包里,beans包下的對象都是domain對象,只有get和set。

    調用示例:

    僅針對java api。

    先來個新浪的call,

       1: String callback = "your callback url";
       2: String oauth_consumer_key = "your app key";
       3: String oauth_consumer_secret = "your app secret";
       4: RequestToken resToken = WebOAuth.request(callback);

    這樣就得到requestToken了。這里建議把這個token對象保存起來,新浪的是放到了session里,我在應用中的實現是放到了一個nosql的緩存中。

    然后把resToken.getAuthorizationURL()得到,跳轉到這個url去認證授權就好了。

    在完成輸入用戶名和密碼的登錄授權后,微博平臺會跳轉回到callback設置的url來,這時需要繼續處理這個頁面訪問了。

    首先從request里把oauth_verifier得到,然后從session中或者緩存中把RequestToken拿回來。接著調用

       1: AccessToken accessToken = WebOAuth.requstAccessToken(
       2:                             resToken, verifier);

    這時,得到了最重要的accessToken,把這個對象中的accessToken.getTokenSecret()和accessToken.getToken()存起來,最好持久化存儲。以后調用api時直接讀取這個token和secret就夠了。

    然后調用一下api,發個微博試試吧:

       1: Weibo weibo = new Weibo();
       2: weibo.setToken(token, secret);
       3: Status status = weibo.updateStatus("hello sina weibo");

    這樣就調通了,注意重要的是把token和secret存好。

    騰訊的話很類似:

       1: String callback = link.render();
       2: String oauth_consumer_key = "801084288";
       3: String oauth_consumer_secret = "f48a8c2c8e6f6795bf635b751aa80555";
       4: OAuth oauth = new OAuth(oauth_consumer_key,
       5:                      oauth_consumer_secret, callback);
       6: OAuthClient oauthClient = new OAuthClient();
       7: // 獲取request token
       8: try {
       9:     oauth = oauthClient.requestToken(oauth);
      10: } catch (Exception e) {
      11:     // TODO Auto-generated catch block
      12:     e.printStackTrace();
      13: }
      14: if (oauth.getStatus() == 1) {
      15:     System.out.println("Get Request Token failed!");
      16:     return;
      17: } else {
      18:     String oauth_token = oauth.getOauth_token();
      19:     String url = "http://open.t.qq.com/cgi-bin/authorize?oauth_token="
      20:                         + oauth_token;
      21:     //把token存好,放到session或者cache里
      22:     //跳轉到url
      23: }

    這個call后,同樣到騰訊的頁面去輸入用戶名和密碼進行驗證。最后跳轉回callback設置的url。

       1: String callback = "your callback";
       2: String oauth_consumer_key = "your key";
       3: String oauth_consumer_secret = "your secret";
       4: OAuth oauth = new OAuth(oauth_consumer_key, oauth_consumer_secret,
       5:         callback);
       6:  
       7: String secret = cache.get(secret);//從緩存中把存進去的secret拿到
       8: oauth.setOauth_token(requestToken);
       9: oauth.setOauth_verifier(verify);
      10: oauth.setOauth_token_secret(secret);
      11:  
      12: OAuthClient authClient = new OAuthClient();
      13: try {
      14:     oauth = authClient.accessToken(oauth);
      15:     if (oauth.getStatus() == 2) {
      16:         System.out.println("Get Access Token failed!");
      17:         return;
      18:     } else {
      19:         //把accessToken和secret存好,然后調用api
      20:             T_API t_API = new T_API(); 
      21:             String response = t_API.add(oauth,
      22:                         WeiBoConst.ResultType.ResultType_Json,
      23:                         content, "127.0.0.1");
      24:     }
      25: } catch (Exception e) {
      26:     // TODO Auto-generated catch block
      27:     e.printStackTrace();
      28: }

    最后總結性的說一句吧,我感覺新浪和騰訊都挺偷懶的,尤其是tx~~大家的認識呢?

    posted on 2012-02-12 11:23 changedi 閱讀(2314) 評論(1)  編輯  收藏 所屬分類: Java技術

    評論

    # re: 微博sdk的設計 2012-02-13 11:33 nidie

    陽光計劃關愛流動兒童
    “我喜歡看書,但家里的書不多,現在圖書館里多了1萬本書,我真高興!”來自四川攀枝花的張獻(化名)是廣州黃埔同仁小學6年級的學生。昨

    天,由中國少年兒童基金會和安利公司合作、面對流動兒童啟動的“陽光計劃”大型公益活動開進這所專門接收外來務工者子弟的民辦學校,為全校

    1000多名“流動兒童”帶來了1萬冊圖書、1臺電腦和1個大屏幕投影儀。
    安利 www.hotunskin.com   回復  更多評論   

    主站蜘蛛池模板: 亚洲欧洲无码AV不卡在线| 久久精品国产精品亚洲艾| 最近的中文字幕大全免费版| 99久久久精品免费观看国产| 国产麻豆免费观看91| 在线免费中文字幕| 日本高清免费中文字幕不卡| 亚洲精品综合在线影院| 久久久久久毛片免费看| 97在线观看永久免费视频| 亚洲av永久无码嘿嘿嘿| 两个人看的www免费视频| 青青草a免费线观a| 久久91亚洲人成电影网站| 久久久久亚洲国产AV麻豆| 男女作爱在线播放免费网站| 免费的涩涩视频在线播放| 亚洲国产精品久久久久| 国产精品亚洲专区无码唯爱网| 国产自国产自愉自愉免费24区| 在线观看91精品国产不卡免费| 青青视频免费在线| 性xxxx视频播放免费| 亚洲精品第五页中文字幕| sss日本免费完整版在线观看| 亚洲精品免费视频| 亚洲AV无码一区二区乱子伦 | 国内成人精品亚洲日本语音| 美女内射毛片在线看免费人动物| 中文字幕不卡亚洲| 久久亚洲精品11p| 狠狠综合久久综合88亚洲| free哆啪啪免费永久| 亚洲人成黄网在线观看| 五月婷婷在线免费观看| 久久亚洲AV成人无码国产电影 | 国产精品无码一二区免费| a级片免费在线播放| 精品亚洲AV无码一区二区| 亚洲国产成人久久精品99 | 爱情岛论坛亚洲品质自拍视频网站|