PHP通过调用新浪API生成t.cn格式短网址链接的方法详解


Posted in PHP onFebruary 20, 2019

本文实例讲述了PHP通过调用新浪API生成t.cn格式短网址链接的方法。分享给大家供大家参考,具体如下:

新浪提供了长链接转为短链接的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://3water.com/';
$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:\/\/www.cnblogs.com\/daxiangxm",
    "type": 0
  }
]

返回XML格式

<?xml version="1.0" encoding="UTF-8"?><urls>
  <url>
    <url_short>http://t.cn/RBclsRo</url_short>
    <url_long>https://3water.com/</url_long>
    <type>0</type>
  </url></urls>

生成的短链接为 http://t.cn/RBclsRo ,访问会跳转到 https://3water.com/

完整调用方法如下:

<?php/**
 * 调用新浪接口将长链接转为短链接
 * @param string    $source  申请应用的AppKey
 * @param array|string $url_long 长链接,支持多个转换(需要先执行urlencode)
 * @return array
 */function getSinaShortUrl($source, $url_long){
  // 参数检查
  if(empty($source) || !$url_long){<br>    return false;
  }  // 参数处理,字符串转为数组
  if(!is_array($url_long)){<br>    $url_long = array($url_long);
  }  // 拼接url_long参数请求格式
  $url_param = array_map(function($value){
    return '&url_long='.urlencode($value);
  }, $url_long);<br>  $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);  <br>  $result = array();  // 执行请求
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_URL, $request_url);  <br>$data = curl_exec($ch);<br>  if($error=curl_errno($ch)){<br>  return false;
  }
  curl_close($ch);  $result = json_decode($data, true);  return $result;
}
//AppKey <br>$source = '您申请的AppKey';<br>// 单个链接转换
$url_long = 'https://3water.com/';<br>$data = getSinaShortUrl($source, $url_long);
print_r($data);<br>// 多个链接转换
$url_long = array('https://3water.com/','https://3water.com/','https://3water.com/');
$data = getSinaShortUrl($source, $url_long);
print_r($data);
?>

输出:

Array(
    [0] => Array
        (
            [url_short] => http://t.cn/RBclsRo
            [url_long] => https://3water.com/
            [type] => 0
        )
)Array(
    [0] => Array
        (
            [url_short] => http://t.cn/RBclsRo
            [url_long] => https://3water.com/
            [type] => 0
        )
    [1] => Array
        (
            [url_short] => http://t.cn/RBclsRo
            [url_long] => https://3water.com/
            [type] => 0
        )
    [2] => Array
        (
            [url_short] => http://t.cn/RBclsRo
            [url_long] => https://3water.com/
            [type] => 0
        )
)

经测试,这个生成接口还是比较稳定的!

PHP 相关文章推荐
PHP生成带有雪花背景的验证码
Sep 28 PHP
php addslashes和mysql_real_escape_string
Jan 24 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php魔术变量用法实例详解
Nov 13 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
Laravel下生成验证码的类
Nov 15 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 #PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 #PHP
php原生数据库分页的代码实例
Feb 18 #PHP
PHP实现文字写入图片功能
Feb 18 #PHP
php分享朋友圈的实现代码
Feb 18 #PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 #PHP
php实现微信分享朋友链接功能
Feb 18 #PHP
You might like
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
php简单统计在线人数的方法
2016/05/10 PHP
jQuery 创建Dom元素
2010/05/07 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python使用turtle绘制分形树
2018/06/22 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
详解Python的三种可变参数
2019/05/08 Python
Python当中的array数组对象实例详解
2019/06/12 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
快速了解Python开发环境Spyder
2020/06/29 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
干部培训自我鉴定
2014/01/22 职场文书
博士生导师推荐信
2014/07/08 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
明确岗位职责
2015/02/14 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
Docker安装MySql8并远程访问的实现
2022/07/07 Servers