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