生成短連結t.cn
新浪微博的API官方提供了很多種呼叫方式,支援程式設計的,歸根結底就是兩種:
官方的方式總是顯得很麻煩。我們來探討一下,能不能通過非官方的方法,免AppKey、免認證、Ajax跨域呼叫新浪微博API呢?
Web 2.0時代,短鏈服務非常流行。新浪的短鏈服務域名是t.cn,這個域名實在是非常短,沒辦法更短了。
開啟新浪微博API的官方文件,關於短鏈服務是這樣的描述的:
我們來分析一下這一段說明:
1.是否需要登入:否。這很關鍵,既然不需要登入,我們的“免認證”就好發揮了。
2.頻次限制:是。這也很關鍵,這意味著如果我們按照官方的方式,呼叫次數將非常受限。
3.支援格式:JSON。其實根據實驗,新浪微博不僅支援JSON,還支援JSONP,只是文件沒告訴我們罷了。這也很關鍵。因為有了JSONP,就意味著可以方便的跨域了。
接下來逐個攻破難點。
一,使用JQuery+JSONP跨域。
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維度了。
三、簡單的實驗一下。
您現在可以直接在瀏覽器中訪問這個地址:
瀏覽器中將顯示
{"urls":[ {"result":true,"url_short":"http://t.cn/h5FGy","url_long":"","type":0} ]}
注意我們使用的是http而非https,不需要使用https,上文已經提到了。
四、最終程式碼示例
這個示例將一個又臭又長的淘寶客URL地址轉換為了新浪短地址。
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