新浪短链接生成接口

近日公司需要用到短链接,遂想是否可以找个现成的生成接口来用,于是乎就去摆渡,目前有百度家的短链接和新浪家的短链接,不巧的是百度家的短链竟然不支持我们这个长链接的生成,难道是因为传入的长链接参数是一个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不概不负责)

posted @ 2016-02-22 16:12  逆天血狼  阅读(9347)  评论(4编辑  收藏  举报