以短鏈服務為例,探討免AppKey、免認證、Ajax跨域調用新浪微博API


新浪微博的API官方提供了很多種調用方式,支持編程的,歸根結底就是兩種:

1.基於Oauth協議,使用Open API。(http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)

2.使用Weibo JS-SDK(http://open.weibo.com/sdk/js )。

官方的方式總是顯得很麻煩。我們來探討一下,能不能通過非官方的方法,免AppKey、免認證、Ajax跨域調用新浪微博API呢?

Web 2.0時代,短鏈服務非常流行。新浪的短鏈服務域名是t.cn,這個域名實在是非常短,沒辦法更短了。

打開新浪微博API的官方文檔,關於短鏈服務是這樣的描述的:

image

以上列舉的方法調用都大同小異。我們再以第一個方法short_url/shorten為例。打開詳細說明:http://open.weibo.com/wiki/2/short_url/shorten

image

我們來分析一下這一段說明:

1.是否需要登錄:否。這很關鍵,既然不需要登錄,我們的“免認證”就好發揮了。

2.頻次限制:是。這也很關鍵,這意味着如果我們按照官方的方式,調用次數將非常受限。

3.支持格式:JSON。其實根據實驗,新浪微博不僅支持JSON,還支持JSONP,只是文檔沒告訴我們罷了。這也很關鍵。因為有了JSONP,就意味着可以方便的跨域了。

4.URL:https://api.weibo.com/2/short_url/shorten.json 。其實這也是騙人的。HTTPS必定會影響速度。經過實驗,直接把HTTPS改為HTTP,仍然是OK的。

 

接下來逐個攻破難點。

一,使用JQuery+JSONP跨域。

參考文檔:http://baike.baidu.com/view/2131174.htm

Jquery對JSONP非常友好,只需要在AJAX調用時指明dataType : jsonp就可以了。

 

二,頻次限制問題。

既然不需要登錄,頻次限制問題就可以繞過。因為AppKey本身是半公開的。我們可以很輕松地Google到一大堆牛逼應用的Appkey。

例如 :

iphone新浪微博客戶端 App Key:5786724301

iPad新浪客戶端App Key:2849184197

Google.Nexus浪客戶端App Key:1206405345

周博通微博管家App Key:202088835

Weico App Key:211160679

以上列舉的這些AppKey,都是來自於一些用戶量非常多的手機應用,它們的頻次限制非常寬松的,幾乎可以理解為“不限制”。為了解決頻次限制問題,我們用它們的Appkey就可以了。

另外:新浪微博API的頻次限制是有兩個維度的,服務IP維度和用戶IP維度。http://open.weibo.com/wiki/Rate-limiting 。這一點與本文無關,因為Javascript在客戶端運行。但如果您想對本文提到的方法進行改裝,使用C#或其他高級語言在服務器端進行調用的話,就要注意服務器IP維度了。

 

 三、簡單的實驗一下。

您現在可以直接在瀏覽器中訪問這個地址:

http://api.weibo.com/2/short_url/shorten.json?source=2849184197&url_long=http://www.cnblogs.com

瀏覽器中將顯示

{"urls":[
{"result":true,"url_short":"http://t.cn/h5FGy","url_long":"http://www.cnblogs.com","type":0}
]}
通過訪問上述的地址,您已經得到了http://www.cnblogs.com的段地址:http://t.cn/h5FGy
注意我們使用的是http而非https,不需要使用https,上文已經提到了。
 
四、最終代碼示例
最終代碼的示例參考這里http://haotaoqu.com/item-45.html
這個示例將一個又臭又長的淘寶客URL地址轉換為了新浪短地址。
image
Javascript代碼如下:
 
 
 
         
<script type="text/javascript">

$(document).ready( function(){

     var j=$("#urlText");

     var i=$("#goumai");

     $.ajax({ 

//使用iPad新浪微博客戶端的Appkey
            url: 'http://api.weibo.com/2/short_url/shorten.json?source=2849184197&url_long='+i[0].href,  
            type: "GET",
            dataType: "jsonp", //使用JSONP方法進行AJAX
            cache: false,
            success: function (data) {
                j.val ( data.data.urls[0].url_short); //處理返回數據,顯示到網頁上 
                    });
                }});
});

</script>


五、除short_url/shorten外,其他可以用此方法調用的API

凡是標記為“是否需要登錄:否”的接口都可以通過本文的流氓方法進行調用。打開http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2 官方文檔慢慢選吧~

蘑菇街首頁


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM