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 网页过期时间的控制代码
Jun 29 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
php实现的一段简单概率相关代码
May 30 PHP
php 获取文件行数的方法总结
Oct 11 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
对Django url的几种使用方式详解
2019/08/06 Python
python add_argument()用法解析
2020/01/29 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
审计主管岗位职责
2014/01/31 职场文书
大学生社会实践方案
2014/05/11 职场文书
大学活动总结模板
2014/07/10 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫