1. 程式人生 > >PHP對接新浪API動態生成短連結

PHP對接新浪API動態生成短連結

新浪提供了長連結轉為短連結的API,可以把長連結轉為 t.cn/xxx 這種格式的短連結。 

新浪開放平臺對應API文件:https://open.weibo.com/wiki/Short_url/shorten#short_url.2Fshorten


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 = 'http://blog.csdn.net/fdipzone';

$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\/RyVmU5i",
        "url_long": "http:\/\/blog.csdn.net\/fdipzone",
        "type": 0
    }
]

返回XML格式

<?xml version="1.0" encoding="UTF-8"?>
<urls>
    <url>
        <url_short>http://t.cn/RyVmU5i</url_short>
        <url_long>http://blog.csdn.net/fdipzone</url_long>
        <type>0</type>
    </url>
</urls>

生成的短連結為 http://t.cn/RyVmU5i ,訪問會跳轉到 http://blog.csdn.net/fdipzone 


完整呼叫方法如下:

<?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 = '您申請的AppKey';

// 單個連結轉換
$url_long = 'http://blog.csdn.net/fdipzone';

$data = getSinaShortUrl($source, $url_long);
print_r($data);

// 多個連結轉換
$url_long = array(
    'http://blog.csdn.net/fdipzone/article/details/46390573',
    'http://blog.csdn.net/fdipzone/article/details/12180523',
    'http://blog.csdn.net/fdipzone/article/details/9316385'
);

$data = getSinaShortUrl($source, $url_long);
print_r($data);
?>

輸出:

單個連結:

Array
(
    [0] => Array
        (
            [url_short] => http://t.cn/RyVmU5i
            [url_long] => http://blog.csdn.net/fdipzone
            [type] => 0
        )

)

多個連結:

Array
(
    [0] => Array
        (
            [url_short] => http://t.cn/R4qB08y
            [url_long] => http://blog.csdn.net/fdipzone/article/details/46390573
            [type] => 0
        )

    [1] => Array
        (
            [url_short] => http://t.cn/RGgNanY
            [url_long] => http://blog.csdn.net/fdipzone/article/details/12180523
            [type] => 0
        )

    [2] => Array
        (
            [url_short] => http://t.cn/R7TrNWZ
            [url_long] => http://blog.csdn.net/fdipzone/article/details/9316385
            [type] => 0
        )

)


--------------------- 
作者:傲雪星楓 
來源:CSDN 
原文:https://blog.csdn.net/fdipzone/article/details/70832761 
版權宣告:本文為博主原創文章,轉載請附上博文連結!