新浪短鏈接生成接口


近日公司需要用到短鏈接,遂想是否可以找個現成的生成接口來用,於是乎就去擺渡,目前有百度家的短鏈接和新浪家的短鏈接,不巧的是百度家的短鏈竟然不支持我們這個長鏈接的生成,難道是因為傳入的長鏈接參數是一個guid數字太長的原因?反正搞不懂為啥這么坑爹,沒辦法只能用新浪嘍。尼瑪查看了接口介紹才發現不能愉快的玩耍了。我只是想生成個短鏈而已,為啥這么坑爹要求登錄還傳入各種參數?繼續擺渡看了第三方封裝的,發現至少都要登陸,就沒有一個簡單共別人使用的,這里就想問下那些提供商就不能秉承共享精神,免費提供大家簡單的使用嗎?既然找不到,那也不能放棄,否則因為這個事公司讓我滾蛋了,那就完犢子了,尼瑪LA才剛轉正啊,傷不起啊。

仔細查找發現新浪提供的短鏈生成接口有兩版,v2版需要用戶登錄持有token去調用短鏈,這個要是沒調用一次都去看看是否要去登錄的話就違背了我們簡單調用的宗旨,遂放棄。再看v1版,這個只需要在參數中帶入應用appkey進去即可,ok這個就各種符合了就好辦了,研究下接口,需要提供兩個參數:1.source這個就是應用的appkey。2.url_long這個可以傳入多個,看來是用來支持批量生成的。我用的是微軟的webapi來寫的,煩請各位看官先了解一些webapi的知識再繼續,下面開始貼代碼:

1.新建一個控制器ShortUrlController,添加一個獲取傳入參數的接口Get方法,如下

2.封裝新浪的短鏈接v1接口ShortUrl

public static result Get(List<string> longUrl)
        {
            var res = "";
            bool flg = false;
            var statusCode = 400;
            var msg = "";
            try
            {
                if (longUrl == null)
                {
                    #region  參數為空

                    flg = false;
                    statusCode = 400;
                    msg = "請傳入請求參數";
                    res = "";

                    #endregion
                }
                else
                {
                    #region 參數不為空

                    var appkey = CfgParams.AppKey;
                    var url = SinaApi.ShortUrl;
                    //url += "?source=" + appkey + "&url_long=" + longUrl;

                    longUrl = longUrl.Select(a=>a=HttpUtility.UrlEncode(a,Encoding.UTF8)).ToList();

                    var longurl = string.Join("&url_long=", longUrl);
                    url = string.Format(url, appkey, longurl);
                    var handler = new HttpClientHandler()
                    {
                        AutomaticDecompression = DecompressionMethods.GZip
                    };

                    using (var http = new HttpClient(handler))
                    {
                        HttpResponseMessage response = http.GetAsync(url).Result;

                        if (response.IsSuccessStatusCode)
                        {
                            flg = true;
                            statusCode = 200;
                            msg = "成功";
                            res = response.Content.ReadAsStringAsync().Result;
                        }
                        else
                        {
                            flg = false;
                            statusCode = 400;
                            msg = "請求無效";
                        }
                    }

                    #endregion
                }
            }
            catch
            {
                flg = false;
                statusCode = 500;
                msg = "內部服務器錯誤";
            }

            result resmodel = new result();
            resmodel.status = flg;
            resmodel.statuscode = statusCode;
            resmodel.message = msg;
            if (statusCode == 200)
                resmodel.urls = JsonConvert.DeserializeObject<List<url>>(res); ;
            return resmodel;
        }
View Code

請注意這里必須對傳入的長鏈接進行編碼,否則在需要編碼的鏈接中有多個參數的話會被誤以為是接口鏈接的參數而被截斷。

3.新建SinaApi類,這里編寫提供新浪鏈接的接口地址

 

4.獲取webconfig配置信息的類,這里主要是用來提供新浪appkey的

5.為了提供一個瀏覽器直接訪問都可以看到的接口形式,專門編寫了一個result和url兩個類用來映射

 

OK 到這里就結束了,可以測試一下然后發布使用了。

 

PS:這里有個發布好的大家可以免費調用。地址:http://api.tuichu.net/shorturl/shorten,demo:http://api.tuichu.net/shorturl/shorten/?url_long=http://www.baidu.com&url_long=http://360.cn

( 因為考慮到訪問速度問題,所以這個發布的在阿里雲上,LA 沒有服務器,沒有域名備案,所以這個接口服務是由朋友南京推網提供,如若不能訪問請直接拿板磚去拍,LA不概不負責)


免責聲明!

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



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