zoukankan      html  css  js  c++  java
  • 使用新浪API生成短连接

      公司最近需要进行短信推广,需要发送大批量带有连接地址的短信给用户,并且需要统计短信的点击量。因为需要考虑短信成本问题,需要将长连接地址生成比较短的连接。因为公司本身没有短的一级域名,所以考虑到使用第三方的短连接生成器。经过对比选择了新浪短连接生成器。

    新浪接口文档地址: http://open.weibo.com/wiki/Short_url/shorten

    新浪提供了xml和json两种格式进行生成短连接,这里使用的是json。

    下面是请求的代码

    public class ShortUrlHelper
    {
        public class sina_short_url
        {
            public string url_short { get; set; }
    
            public string url_long { get; set; }
            public int type { get; set; }
        }
        /// <summary>
        /// 新浪转换短链接
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string Convert_SINA_Short_Url(string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                return "";
            }
            //api地址
            var address = "http://api.t.sina.com.cn/short_url/shorten.json?source=2815391962";
            address += "&url_long=" + HttpUtility.UrlEncode(url);
            //http请求
            var json = RequestHelper.Request(address);
            //json转换
            var urls = JsonHelper.Deserialize<List<sina_short_url>>(json);
            if (urls != null && urls.Count > 0)
            {
                return urls[0].url_short;
            }
            return "";
        }
        /// <summary>
        /// 新浪转换短链接-批量
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static List<sina_short_url> Convert_SINA_Short_Url_ByUrlList(List<string> urlList)
        {
            if (urlList.Count > 20)
            {
                throw new Exception("最大支持20个url转换");
            }
            var address = "http://api.t.sina.com.cn/short_url/shorten.json?source=2815391962";
            foreach (var url in urlList)
            {
                address += "&url_long=" + HttpUtility.UrlEncode(url);
            }
            var json = RequestHelper.Request(address);
            var urls = JsonHelper.Deserialize<List<sina_short_url>>(json);
            return urls;
        }
    }

    注意事项:

      因为新浪接口在生成短连接的时候,会在生成同时调用一次连接的情况(在使用过程中也出现过在一段时间后这些短连接被同一系列的IP地址进行访问)。这样会影响到接口点击量统计。需要在连接响应地址上做一定的处理。对比了请求Request发现请求中的User-Agent和正常浏览器请求是不一致的。暂时我就是使用Request.Headers["User-Agent"]的值进行判断。

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/Jimmy-pan/p/5784611.html
Copyright © 2011-2022 走看看