新浪提供了长链接转为短链接的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>
复制代码 完整的类如下:
- /*
- * 生成新浪的短链接或还原新浪短链接
- */
- 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);
- ?>
复制代码
|