<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 閱讀(2313) 評論(1)  編輯  收藏 所屬分類: Java技術

    評論

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

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

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

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

    主站蜘蛛池模板: 日本一区二区三区日本免费| 97青青草原国产免费观看| 美女被cao免费看在线看网站| 亚洲视频中文字幕| 久久国产精品成人片免费| 亚洲三级电影网站| 久久国产色AV免费观看| 中文字幕在线观看亚洲| 182tv免费观看在线视频| 中文字幕亚洲综合久久| 无码国产精品一区二区免费式影视 | 亚洲午夜精品一区二区| 一级毛片成人免费看免费不卡| 亚洲成a人片在线观看无码| 日韩视频在线观看免费| 亚洲宅男永久在线| 在线视频免费观看高清| 337p日本欧洲亚洲大胆人人 | 亚洲一区二区三区无码影院| 丝瓜app免费下载网址进入ios | 99精品国产免费久久久久久下载| 亚洲天堂福利视频| 性感美女视频免费网站午夜| 国产精品久久亚洲一区二区| 久久久久久亚洲精品不卡| 叮咚影视在线观看免费完整版| 久久亚洲精品成人av无码网站| 国产精品成人免费视频网站京东| 老子影院午夜伦不卡亚洲| 亚洲区小说区图片区| 国偷自产一区二区免费视频| 久久精品蜜芽亚洲国产AV| 在线观看人成网站深夜免费| 成人a毛片视频免费看| 亚洲国产综合专区电影在线| 好吊妞视频免费视频| fc2成年免费共享视频18| 亚洲欧洲日产韩国在线| 国产女高清在线看免费观看| 免费一级不卡毛片| 亚洲乱妇熟女爽到高潮的片|