1. 程式人生 > >生成短連結t.cn

生成短連結t.cn

新浪微博的API官方提供了很多種呼叫方式,支援程式設計的,歸根結底就是兩種:

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

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

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

image

image

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

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