最近在使用极强检测时看到了有检测蓝秦云网盘链接的的API,我就想着自己写一个API接口来用用。之前我们使用了腾讯云的云函数服务,我们这里接着整就行了。
如果有对云函数服务不清楚的,可以前去看我的这篇文章:《API接口上云|Serverless云函数服务部署实战》
云盘检测
这里我们以百度网盘和蓝秦云盘为例,其他网盘也是同理,照着葫芦画瓢。我这里以PHP
代码为例,有兴趣地用Python
或者Node.js
写也行。
蓝秦云
首先来个简单的蓝秦云网盘,我们首先找一个蓝秦云网盘的链接,实在找不到就自己上传一个文件到蓝秦云网盘,然后复制分享链接到浏览器中打开,并在云函数的日志中查看获取到的内容。
不过我们需要注意的是,分享的链接有两种,一种无密码另一种带有分享密码,所以只做一个判断会显得单一。为了更好地符合逻辑性,我这里选择判断文件失效的情况。
链接失效
蓝秦云的链接失效包含两种情况:
- 来晚啦…文件取消分享了
- 文件不存在,或已删除
这两种情况,我们只需要取其中的关键词即可,例如「取消」、「不存在」,获取到这两个关键词的任意一个即可判断蓝秦云分享链接失效。
判断代码
function lanzou_check( $url ) {
$content = curl_file_get_contents( $url );
$data = [];
if ( strpos( $content, '不存在' ) || strpos($content,'取消')) {
$data = array(
'code' => '404',
'pan_type' => 'lanzou',
'msg'=>'Error',
'isexist'=>'false'
);
}
else{
$data = array(
'code' => '200',
'pan_type' => 'lanzou',
'msg'=>'success',
'isexist'=>'true'
);
}
return $data;
}
代码如上,其中curl_file_get_contents
需要各位自己去封装下,或者用file_get_content
也行,不过这个函数有点风险,如果是利用服务器搭建的api不推荐用这个函数。
百度云盘
百度云盘的分享链接就有一点特殊,他的分享链接页面其实存在一个跳转,不过我们在浏览器中一般是察觉不到的。
例如我这里有个百度云盘的分享链接:
https://pan.baidu.com/s/1WsIU8KU3ZZGrHerJNSDC3g
获取到的页面内容其实是以下内容,所以说上面这个链接并不是我们文件的分享链接,下方这个才是。
Redirecting to <a href="/share/init?surl=WsIU8KU3ZZGrHerJNSDC3g">/share/init?surl=WsIU8KU3ZZGrHerJNSDC3g</a>
真正的网盘分享链接其实是:
https://pan.baidu.com/share/init?surl=WsIU8KU3ZZGrHerJNSDC3g
所以在编写的过程中,我们需要两次获取页面内容,才能实现判断效果,这里获取a标签内的链接可以使用正则匹配或者你自己去封装一个get_between
函数也行。
//正则匹配代码
$str = '';
$isMatched = preg_match('/(?:[^_]+(?=\.html))|[^>]+(?=<\/a>)/', $str, $matches);
var_dump($isMatched, $matches);
function get_between($input, $start, $end) {
$substr = substr($input, strlen($start)+strpos($input, $start),
(strlen($input) - strpos($input, $end))*(-1));
return $substr;
}
链接失效
- 啊哦,来晚了,该分享文件已过期
- 啊哦,你所访问的页面不存在了
判断是否存在「提取码」文字字样即可判断链接是否有效,其他方法也可自编写,不过目前存在验证码,以前有种方法可以绕过,不过现在能不能就不是很清楚了。
判断代码
function baidu_check( $url ) {
$content = curl_file_get_contents( $url );
$real_url = get_between($content,'>/','</a>.');
$content = curl_file_get_contents('https://pan.baidu.com/'.$real_url);
var_dump($content);
$data=[];
if ( strpos( $content, '提取码' ) == false )
{
$data = array(
'code' => '404',
'pan_type' => 'baidu',
'msg'=>'Error',
'isexist'=>'false'
);
}
else {
$data = array(
'code' => '200',
'pan_type' => 'baidu',
'msg'=>'success',
'isexist'=>'true'
);
}
return $data;
}
效果展示
后续一系列的API将在:「EswinkAPI」平台上线,欢迎各位的到访!
📮评论