PHP实现百度、新浪的API接口调用生成短链接
长连接和短连接
长连接:是指在一个TCP连接上可以发送多个数据包,但是如果没有数据包发送时,也要双方发检测包以维持这个链连接
短连接:当双方需要有数据交互的时候,就建立一个TCP连接,本次交互完成后,就断开这个连接
WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
所以,基于这种需求我们急需将长链接转为短链接。常用的可以看到新浪微博的分享地址。下面来看,如何实现?
新浪提供了长链接转为短链接的API,可以把长链接转为 a.cn/xxx 这种格式的短链接。 百度提供了长链接转为短链接的API,可以把长链接转为 dwz.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.进入open.weibo.com/ ,选择菜单 微连接->网站接入。
2.点击立即接入,创建新应用,随便填写应用名称,点击创建。
3.创建成功后,AppKey就是source参数的值,可以用于请求创建短链接。
<?php namespace App\Services; class ShortUrlService { /** * 调用新浪接口将长链接转为短链接 * @param string $source 申请应用的AppKey * @param array|string $urlLong 长链接,支持多个转换(需要先执行urlencode) * @return array */ public static function getSinaShortUrl($source, $urlLong) { // 参数检查 if(empty($source) || !$urlLong){ return false; } // 参数处理,字符串转为数组 if(!is_array($urlLong)){ $urlLong = array($urlLong); } // 拼接url_long参数请求格式 $url_param = array_map(function($value){ return '&url_long='.urlencode($value); }, $urlLong); $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 以下是公用API,暂时可用。如失效,注册新浪开发者帐号即可
$source = config('app.sina');
单个链接转换
$urlLong = config('app.url'); $shortUrl = ShortUrlService::getSinaShortUrl($source, $urlLong);
返回结果
array:1 [ 0 => array:3 [ "url_short" => "http://t.cn/*******" "url_long" => "http://***********.com/#/***********" "type" => 0 ] ]
多个链接转换
$urlLong = [ 'http://www.***.com/article/1.html', 'http://www.***.com/article/2.html', 'http://www.***.com/index.html' ]; $shortUrl = ShortUrlService::getSinaShortUrl($source, $urlLong);
返回结果
array:3 [ 0 => array:3 [ "url_short" => "http://t.cn/RD12" "url_long" => "http://www.***.com/article/1.html" "type" => 0 ] 1 => array:3 [ "url_short" => "http://t.cn/RD134KV" "url_long" => "http://www.***.com/article/2.html" "type" => 0 ] 2 => array:3 [ "url_short" => "http://t.cn/RA8u231F" "url_long" => "http://www.***.com/index.html" "type" => 0 ] ]
百度API
接口地址:
百度老接口:https://dwz.cn/admin/create(短网址生成接口)
百度新接口:https://dwz.cn/admin/v2/create(短网址生成接口)
百度的老接口将于 近期 停止服务,请使用新接口
<?php $host = 'https://dwz.cn'; $path = '/admin/v2/create'; $url = $host . $path; $method = 'POST'; $content_type = 'application/json'; // TODO: 设置Token $token = '你的Token'; // TODO:设置待注册长网址 $bodys = array('url'=>'你的长网址'); // 配置headers $headers = array('Content-Type:'.$content_type, 'Token:'.$token); // 创建连接 $curl = curl_init($url); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($bodys)); // 发送请求 $response = curl_exec($curl); curl_close($curl); // 读取响应 var_dump($response); ?>
响应结果示例
{ "Code": 0, "ShortUrl": "https://dwz.cn/de3rp2Fl", "LongUrl": "http://www.baidu.com", "ErrMsg": "" }
响应参数说明
字段 类型 说明
Code int 0:正常返回短网址
int -1:短网址生成失败
int -2:长网址不合法
int -3:长网址存在安全隐患
int -4:长网址插入数据库失败
int -5:长网址在黑名单中,不允许注册
ShortUrlstring 短网址
LongUrlstring 长网址(原网址)
ErrMsgstring 错误信息
通过上面的方法,可以很轻松的实现用php生成短链接网址的功能。
- php 调用新浪API生成短链接
- php 调用新浪API生成短链接
- PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
- 【PHP代码】生成百度短链接
- php调用新浪短链接API转短链接
- 调用百度API去生成短链接
- Java Acunetix11 Curl(Java利用Curl命令调用Acunetix11 API接口实现扫描并生成报告)
- 如何调用WxJump的API接口实现微信网址链接转二维码
- PHP调用API接口实现天气查询功能的示例
- 使用php实现下载生成某链接快捷方式的解决方法
- 用php实现下载生成某链接的快捷方式
- php调用新浪短链接API的方法
- php调用新浪短链接API的方法
- 短链接服务的接实现 基于nginx url php redis 、js二维码生成 、js二维码识别
- 调用新浪网址缩短服务生成网址短链接
- java调用百度API生成短链接(二)
- php实现在新浪云中使用imagick生成缩略图并上传的方法
- PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
- php 调用百度sms来发送短信的实现示例
- java 解决调用c语言实现简单HelloWorld函数生成.dll动态链接库的32位dll文件无法在64位机上运行