还是老样子,我不喜欢过于封装API接口,只有考虑到利弊的时候才会选择去封装,否则我就觉得这个API是不完整的,就是一个套着壳子的垃圾。
所以,能本地处理的我一律自己写代码,或者直接使用别人开源的三方库来写。
今天更新的是“新浪缩短网址”的接口,这个是我自己写的,抓取新浪分享页面的url展现出来。
原理是这样子:
使用下面这个网址:
http://service.weibo.com/share/share.php?url=https://boke.slhq.cn/421/&title={书蓝画青博客分享测试}&pic=https://boke.slhq.cn/wp-content/uploads/2020/02/20200212_043642_22.png&searchPic=true#_loginLayer_1586429897299
其中,我标注红色的部分都是需要修改的,title随便输入什么,建议随机输入字符串;url就是我们需要缩短的实际地址,这个必须明确;pic这个参数可带可不带,建议带一下,因为做戏要做全套;最后面一个数值就是unix的时间戳,这个我们直接使用php的time();函数就行了,不用管。
打开上面的网址后,你会看到一个明显的已经缩短的网址,这个就是新浪的短网址了(在这里我不知道短网址的有效期是多久,网上也没找到,群里面问了说是永久,只要不违规就是永久的,真实性有待商榷)。
我的做法是,直接get目标网页的html源代码,然后用正则直接匹配出我需要的内容就行,其他的东西不用管。
到这里就算是结束了,下面上代码;
<?php /** * 新浪短网址 * 使用新浪分享页面自动抓取指定的已生成网址 * time:2020年4月8日13:27:31 * Author:boke.slhq.cn */ header('Content-type:text/html;charset=utf-8'); // include_once("./function.php"); $url = $_REQUEST['url']; if(!isset($url) || !$url){ $error1 = ["code"=>"202","msg"=>"只允许携带参数[?url=]!"]; die(json_encode($error1,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE)); }elseif(empty($url)){ $error0 = ["code"=>"201","msg"=>"输入内容为空!"]; die(json_encode($error0,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE)); } // 如果是一个网址格式则继续,必须携带http/s $pattern="/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/"; if(preg_match($pattern,$url)){ $get_url = 'http://service.weibo.com/share/share.php?url='.$url.'&title=%E3%80%90%E4%B9%A6%E8%93%9D%E7%94%BB%E9%9D%92%E3%80%91&pic=https://ae01.alicdn.com/kf/Ha89e8d406ae04c52bcf59f2a0086919ak.jpg&searchPic=true#_loginLayer_'.time(); $return_code =@file_get_contents($get_url); // 正则匹配出指定的缩短网址 $regex = "/<em .*?class=\".*?tag_text.*?\".*?>(.*?)<\/em>/is"; preg_match_all($regex,$return_code,$matches,PREG_PATTERN_ORDER); // exit($matches[1][0]); $return = ["code"=>"200","msg"=>"success","text"=>$matches[1][0]]; die(json_encode($return,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE)); }else{ $error3 = ["code"=>"203","msg"=>"生成个寂寞,请输入完整的URL,http/s开头的!"]; die(json_encode($error3,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE)); }
-----------------
不会用怎么办:
不会用可以直接用我的API啊,我既然写了肯定会投入使用的嘛。
网址:https://api.mxooo.cn/dwz/sina.php?url=你要压缩的网址
把上面的整个网址复制到新的页面打开,把后面的汉字换成你要压缩的网址就行了,必须带上http或者https才行,否则报错的。
比如我要压缩 https://api.mxooo.cn/dwz/sina.php?url=https://boke.slhq.cn/421/
返回的结果:{"code":"200","msg":"success","text":"http://t.cn/A6wzhgA8"} 此为JSON类型,用作API处理。
然后复制橙色的那个代码就行了,这就是已经压缩的网址了。
PS:此代码有性能缺陷,因为获取短连接需要先抓取目标页面代码,然后找到指定内容,所以速度稍慢,无法和别人的高效代码对比,仅仅作为测试使用,后期可能会找相关资料学习重写。性能实在是low爆了。
最后结语:目前只有新浪t.cn的短网址是开放的,百度的dwz.cn要付钱,腾讯url.cn的接口没找到。