新浪、百度短链的生成

chen'mo
2020-04-21 / 0 评论 / 1,997 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于1970年01月01日,已超过20079天没有更新,若内容或图片失效,请留言反馈。

1、百度短链(dwz.cn)生成

dwz.cn就是短网址的首拼音缩写,由百度提供服务。

优点:稳定,毕竟是大公司开发。有数据报表:https://dwz.cn/console/report

缺点:网址必须百度收录了才可以生成。

>>正规生成:

①.申请apikey

申请网址:https://dwz.cn/console/userinfo需要开通开发者,跟着提示走就可以了。

②.接口代码

常用的语言都有:https://dwz.cn/console/apidoc

然后HTTP调用即可生成。

抓包生成:

百度短网址的官方生成地址:https://dwz.cn/

生成的时候直接可以抓包:https://dwz.cn/admin/v2/create

参数就一个:{"url":"你要生成的URL"}

这里就不过多讲解。

2、新浪短链(t.cn)生成

主要讲解新浪短链,直接上代码。

//链接要做urlencode编码
const u = encodeURIComponent("你要转码的长连接");
$.ajax({
    url:"https://api.weibo.com/2/short_url/shorten.json?source=2849184197&url_long={%u}".fmt({u}),
    dataType:'jsonp',
    success:function (data) {
        if(data  && data.code ===1 ){
            var url = data.data.urls[0].url_short;
            outShortInfo(url);//输出短链方法
        }else{
            layer.msg('生成失败',so.defn);
        }
    }
});

直接  jsonp  调用,source直接使用2849184197即可,是官方的key,放心使用。

就一个参数url_long=你生成的URL,注意这里要做urlcode编码。

urlcode编码在线工具:https://www.sojson.com/encodeurl.html

四、短链的解码

每一个短链服务一般自己会对应一个解码服务,我懒得对接,而且现在的短链鱼龙混杂,所以我就直接写了一个通用的。直接上代码。

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.HeadMethod;
import org.apache.commons.httpclient.params.HttpParams;

/**
 * 短链 解析成长链
 * @param url
 * @return
 */
public static SOMap parse(String url){
    HttpClient client = new HttpClient();
    HttpMethod method = new HeadMethod(url);
    try {
        HttpParams params = client.getParams();
        params.setParameter(AllClientPNames.HANDLE_REDIRECTS, false);
        client.executeMethod(method);
        String aurl = method.getURI().getURI();
        if(StringUtils.equals(url,aurl)){
            method.releaseConnection();
            method =   new GetMethod(url);
            params = client.getParams();
            params.setParameter(AllClientPNames.HANDLE_REDIRECTS, false);
            client.executeMethod(method);
            aurl = method.getURI().getURI();
            return SOMap.success().push("url",aurl);
        }
        method.releaseConnection();
        return SOMap.success().push("url",aurl);
    } catch (IOException e) {
        Header headers = method.getResponseHeader("Location");
        if(null == headers || null == ( url = headers.getValue())){
            return SOMap.error("解析失败,确认链接是否存在");
        }
    }
    return SOMap.success().push("url",url);

}

其实就是通过  http  请求,获取301302后的url,有利有弊,使用了2种方式获取,其他的语言模仿写就可以了。里面的SOMap为我的封装,其实就是一个map,我为了方便链式变成继承了LinkedHashMap。另外AllClientPNames.HANDLE_REDIRECTS = "http.protocol.handle-redirects"。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/330.html

0
Typecho非插件实现首页隐藏单个或多个分类的文章
« 上一篇 04-19
emlog指定分类id使用指定的文章模版的方法
下一篇 » 04-21

评论 (0)