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 相关文章推荐
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
PHP实现文件上传功能实例代码
May 18 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
在Laravel5中正确设置文件权限的方法
May 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设计模式 Visitor 访问者模式
2011/06/28 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PHP 错误处理机制
2015/07/06 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
2014/05/27 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
layui文件上传实现代码
2017/05/20 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
Node.js简单入门前传
2017/08/21 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python实现的汉诺塔算法示例
2019/10/23 Python
python可视化text()函数使用详解
2020/02/11 Python
Django ModelForm操作及验证方式
2020/03/30 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
C++面试题目
2013/06/25 面试题
办公文员的工作岗位职责
2013/11/12 职场文书
网站开发实习生的自我评价
2013/12/11 职场文书
学校万圣节活动方案
2014/02/13 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
环保建议书
2014/03/12 职场文书
竞聘报告优秀范文
2014/11/06 职场文书