美文网首页
利用API实现短网址

利用API实现短网址

作者: PHP学习君 | 来源:发表于2019-07-09 13:00 被阅读0次

    新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接。

    API有两种格式:

    http://api.t.sina.com.cn/short_url/shorten.json (返回结果是JSON格式)
    http://api.t.sina.com.cn/short_url/shorten.xml (返回结果是XML格式)
    请求参数:

    source 申请应用时分配的AppKey,调用接口时代表应用的唯一身份。url_long 需要转换的长链接,需要URLencoded,最多不超过20个。

    多个url参数需要使用如下方式请求:url_long=aaa&url_long=bbb

    创建source方法

    1.进入http://open.weibo.com/ ,选择菜单 微连接->网站接入。2.点击立即接入,创建新应用,填写应用名称,点击创建。3.创建成功后,AppKey就是source参数的值,可以用于请求创建短链接。

    这里是测试代码
    <?php
    $api = 'http://api.t.sina.com.cn/short_url/shorten.json'; // json
    // $api = 'http://api.t.sina.com.cn/short_url/shorten.xml'; // xml
    $source = '您申请的AppKey';
    $url_long = 'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323801';
    $request_url = sprintf($api.'?source=%s&url_long=%s', $source, $url_long);
    $data = file_get_contents($request_url);
    echo $data;
    ?>

    返回JSON格式
    [
    {
    "url_short": "http://t.cn/Rki0twp",
    "url_long": "http://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323801",
    "type": 0
    }
    ]
    返回XML格式
    <?xml version="1.0" encoding="UTF-8"?>
    <urls>
    <url>
    <url_short> http://t.cn/Rki0twp</url_short>
    <url_long>https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323801</url_long>
    <type>0</type>
    </url>
    </urls>

    生成的短链接为 http://t.cn/Rki0twp ,访问会跳转到 https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323801

    完整的类如下:

    /*
    * 生成新浪的短链接或还原新浪短链接
    */

    class ShortUrl{
    //新浪APPKEY
    const APPKEY='xxxxxxxx'; //你申请的appkey
    //CURL
    private static function CURLQueryString($url){
    //设置附加HTTP
    $addHead=array("Content-type: application/json");
    //初始化curl
    $curl_obj=curl_init();
    //设置网址
    curl_setopt($curl_obj,CURLOPT_URL,$url);
    //附加Head内容
    curl_setopt($curl_obj,CURLOPT_HTTPHEADER,$addHead);
    //是否输出返回头信息
    curl_setopt($curl_obj,CURLOPT_HEADER,0);
    //curl_exec的结果返回
    curl_setopt($curl_obj,CURLOPT_RETURNTRANSFER,1);
    //设置超时时间
    curl_setopt($curl_obj,CURLOPT_TIMEOUT,8);
    //执行
    $result=curl_exec($curl_obj);
    //关闭curl回话
    curl_close($curl_obj);
    return $result;
    }
    //处理返回结果
    private static function doWithResult($result,$field){
    $result=json_decode($result,true);
    return isset($result[0][$field])?$result[0][$field]:'';
    }
    //获取短链接
    public static function getShort($url){
    $url='http://api.t.sina.com.cn/short_url/shorten.json?source='.self::APPKEY.'&url_long='.$url;
    $result=self::CURLQueryString($url);
    return self::doWithResult($result,'url_short');
    }
    //获取长链接
    public static function getLong($url){
    $url='http://api.t.sina.com.cn/short_url/expand.json?source='.self::APPKEY.'&url_short='.$url;
    $result=self::CURLQueryString($url);
    return self::doWithResult($result,'url_long');
    }
    }

    你也可以用以下完整的方法

    <?php
    /**
    * 调用新浪接口将长链接转为短链接
    * @param string $source 申请应用的AppKey
    * @param array|string $url_long 长链接,支持多个转换(需要先执行urlencode)
    * @return array
    */

    function getSinaShortUrl($source, $url_long){

    // 参数检查
    if(empty($source) || !$url_long){
    return false;
    }
    // 参数处理,字符串转为数组
    if(!is_array($url_long)){
    $url_long = array($url_long);
    }
    // 拼接url_long参数请求格式
    $url_param = array_map(function($value){
    return '&url_long='.urlencode($value);
    }, $url_long);
    $url_param = implode('', $url_param);

    // 新浪生成短链接接口
    $api = 'http://api.t.sina.com.cn/short_url/shorten.json';

    // 请求url
    $request_url = sprintf($api.'?source=%s%s', $source, $url_param);
    $result = array();
    // 执行请求
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $request_url);
    $data = curl_exec($ch);
    if($error=curl_errno($ch)){
    return false;
    }
    curl_close($ch);
    $result = json_decode($data, true);
    return $result;

    }
    //您申请的AppKey
    $source = 'xxxxxxxssssss';
    // 单个链接转换
    $url_long = 'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323801';
    $data = getSinaShortUrl($source, $url_long);
    print_r($data);

    // 多个链接转换
    $url_longs = array(
    'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323801',
    'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323802',
    'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323803',
    'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323804',
    'https://detail.tmall.com/item.htm?spm=a21wu.241046-us.9629632455.7.193eb6cbbC9gFg&id=585958323805',
    );
    $data_arr = getSinaShortUrl($source, $url_longs);
    print_r($data_arr);
    ?>

    以上是文章全部内容

    相关文章

      网友评论

          本文标题:利用API实现短网址

          本文链接:https://www.haomeiwen.com/subject/jpkxkctx.html