通过新浪微博API,生成短链接,支持一次性转多个长链接

什么是短链接

短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。

短链接服务

国内各大微博都推出了自己的短链接服务。例如新浪微博、腾讯微博等。

为什么选用新浪微博API

  1. 新浪微博短链接API是开放的
  2. 新浪微博短链接API不需要用户登录

文档查询链接

使用方法

拿到自己的AppKey后,替换类的成员属性$appKey的值即可,如下这样的,$shortUrl是API请求地址


// APPkey,我在网上找的(https://fengmk2.com/blog/appkey.html),可以自己申请
protected $appKey = '569452181';
// 转短连接API地址
protected $shortUrl = 'https://api.weibo.com/2/short_url/shorten.json?';

其他的,基本不需要配置,直接实例化类ShortLink,然后调用方法getShortUrl即可,需要说明的是长链接URL数组$longUrl里的值可以传多个值

当然了,为了方便,我写为一个类,可以根据自己的需要,进行调整,满足自己的需求即可。

源码


<?php /**
* 通过新浪微博API,生成短链接,支持一次性转多个长链接
* Class shortClass
* @time 2018-08-14
* @author gxcuizy
*/
Class ShortLink {
// APPkey,我在网上找的(https://fengmk2.com/blog/appkey.html),可以自己申请
protected $appKey = '569452181';
// 转短连接API地址
protected $shortUrl = 'https://api.weibo.com/2/short_url/shorten.json?'; /**
* 生成短链接
* @param array $longUrl 长链接数组
* @return array 返回短连接数据
*/
public function getShortUrl($longUrl = []) {
$code = true;
$msg = '请求成功!';
$result = [];
// 长链接数组为空,不处理
if (empty($longUrl)) {
$code = false;
$msg = '长链接数据不能为空';
return ['code' => $code, 'msg' => $msg, 'result' => $result];
}
// 拼接请求URL
$longUrlStr = $this->_getLongUrl($longUrl);
$shortUrl = $this->shortUrl;
$appKey = $this->appKey;
$param = 'source=' . $appKey . '&' . $longUrlStr;
$curlUrl = $shortUrl . $param;
// 发送CURL请求
$result = $this->_sendCurl($curlUrl);
return ['code' => $code, 'msg' => $msg, 'result' => $result];
} /**
* 获取请求URL字符串
* @param array $longUrl 长链接数组
* @return string 长链接URL字符串
*/
private function _getLongUrl($longUrl = []) {
$str = '';
foreach ($longUrl as $url) {
$str .= ('url_long=' . $url . '&');
}
$newStr = substr($str, 0, strlen($str) - 1);
return $newStr;
} /**
* 发送CURL请求(GET)
* @param string $curlUrl 请求地址
* @return array 返回信息
*/
private function _sendCurl($curlUrl) {
// 初始化
$ch = curl_init();
// 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $curlUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 执行并获取HTML文档内容
$output = curl_exec($ch);
// 释放curl句柄
curl_close($ch);
// Json数据转为数组
$result = json_decode($output, true);
return $result;
}
} // 实例化对象
$shortObj = new ShortLink();
// 多个连接可以直接放到数组中,类似$longUrl = ['url1', 'url2', ……]
$longUrl = ['http://blog.y0701.com/index.html'];
// 开始转长链接为短链接
$result = $shortObj->getShortUrl($longUrl);
print_r($result);

结束语

上面说到的网上查找得到的一些AppKey,因为来源不明,所以,不建议用于生产环境,需要用于生产环境的话,建议直接在新浪微博开发者平台里创建自己的应用就行。

原文地址:https://segmentfault.com/a/1190000016004175

新浪微博API生成短链接的更多相关文章

  1. PHP调用新浪API 生成短链接

    我们经常收到类似于这样的短信(如下图),发现其中的链接并不是常规的网址链接,而是个短小精悍的短链接,产品中经常需要这样的需求,如果在给用户下发的短信中是一个很长的连接,用户体验肯定很差,因此我们需要实 ...

  2. PHP生成短链接方法

    PHP生成短链接方法方法一:新浪提供了长链接转为短链接的API,可以把长链接转为 t.cn/xxx 这种格式的短链接. API: http://api.t.sina.com.cn/short_url/ ...

  3. Java生成短链接

    为什么要生成短链接 微博之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少. 那么使用短链接的作用有哪些呢?1.字数,2.统计,3.监控,4.过滤 ...

  4. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  5. openresty && hashids&& redis 生成短链接

    1. 原理     a. 从redis 获取需要表示的短链接的id( redis incr)     b. hashids 编码 id     c. openresty  conteent_by_lu ...

  6. 使用plv8+hashids生成短链接服务

    有写过一个集成npm plv8 以及shortid生成短链接id服务,实际上我们可以集成触发器自动生成url对应的短链接地址,hashids也是一个不错的选择. 以下是一个别人写的一个博客实现可以参考 ...

  7. PHP调用百度api生成短网址&根据短网址恢复长网址

    接口api文档地址:http://dwz.cn/#/apidoc?_k=i9ev5p 代码demo header("Content-type: text/html; charset=utf- ...

  8. 使用新浪API生成短连接

    公司最近需要进行短信推广,需要发送大批量带有连接地址的短信给用户,并且需要统计短信的点击量.因为需要考虑短信成本问题,需要将长连接地址生成比较短的连接.因为公司本身没有短的一级域名,所以考虑到使用第三 ...

  9. 生成短链接的URL

    假设你想做一个像微博短链接那样的短链接服务,短链接服务生成的URL都非常短例如: http://t.cn/E70Piib, 我们应该都能想到链接中的E70Piib对应的就是存储长链接地址的数据记录的I ...

随机推荐

  1. POJ 1741 Tree 树形DP(分治)

    链接:id=1741">http://poj.org/problem?id=1741 题意:给出一棵树,节点数为N(N<=10000),给出N-1条边的两点和权值,给出数值k,问 ...

  2. js对象实例化的常见三种方式

    三种常见模式:工厂模式,构造函数模式,原型模式 <span style="font-size:18px;"><!doctype html> <html ...

  3. HDU4689Derangement (动态规划)

    题目链接:传送门 题意: 对于一个由1~n组成的长度为n的序列来说它有n!种排法.我们定义初始的排列为1,2,3,...,n对于兴许的排列假设a[i]>i则用'+'表示.a[i]<i用'- ...

  4. bzoj2242 [SDOI2011]计算器——BSGS

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一次写BSGS,参考了好多好多博客: 然而看到的讲解和模板是一种写法,这道题的网上题 ...

  5. jeesite ckfinder mac/linux 文件上传路径设置

    背景: 如果你使用的是Mac 或者 Ubuntu 这种 Unix系统的话,你一定知道Unix系统的文件路径分隔符是 / 而Windows系统文件分隔符是 \ 当你设置了jeesite.properti ...

  6. Ballot evaluation

    http://acm.hdu.edu.cn/showproblem.php?pid=2986 题意很简单,主要是要处理精度,最手残的是把单词拼写错了... #include <stdio.h&g ...

  7. 洛谷P1387最大正方形(dp,前缀和)

    题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

  8. [Swift通天遁地]七、数据与安全-(16)检测Apple设备是否越狱

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  9. python--修改默认递归层级

    import sys sys.setrecursionlimit(最大递归次数)

  10. 安装cloudermanager时如何正确Configuring TLS Security for Cloudera Manager

    不多说,直接上干货! 参考官网 https://www.cloudera.com/documentation/enterprise/5-2-x/topics/cm_sg_config_tls_secu ...