使用新浪API生成短连接

时间:2024-01-30 14:20:55

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

新浪接口文档地址: 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"]的值进行判断。