之前给苹果cms做了网盘资源分享的功能:苹果cmsV10增加影片网盘下载分享功能 - N把刀
实测下来,手动分享资源的人屈指可数啊,可能大家都比较懒,我更懒。。。
于是乎就琢磨着搜索视频名称从各大电报频道中抓取数据,本来到这里就结束了,反正数据都取回了不如直接写到数据库中吧。
核心功能:给定一个关键词,去预先配置好的多个 Telegram 频道里查找最新的资源分享消息,提取出其中的下载链接,并按照网盘类型分组,最后返回结构化的 JSON。
后台的逻辑其实也挺简单,核心流程可以总结为五步:
- 校验权限
先安全验证,从请求头读X-Search-Token
,和后台配置的 token 对比,不对就拒绝访问。 - 读缓存、并发抓取
用关键词去 Redis 看有没有缓存,命中就直接返回;没缓存时,用curl_multi
并发请求所有配置好的 Telegram 频道搜索页面。 - 挑最新、抽信息
解析每个页面,找出带时间戳的最新一条消息,然后从那条消息中提取出资源标题和所有符合支持网盘关键字的下载链接。 - 去重合并、按网盘分组
把同一个链接只保留最新一条记录,同一组消息里的多个链接合并,然后根据 URL 里的网盘关键字,把它们分类到“百度网盘”“阿里云盘”……或“其它网盘”。 - 返回并缓存结果
最终输出一个 JSON:包含“数据来源”标识(缓存还是实时)、按网盘类型分好的数据或“没有找到”提示,同时把结果写入 Redis(默认缓存 900 秒)和数据库。
默认是不会自动搜索入库的,需要用户手动点击一键搜片按钮,后台才会自动入库,当然也可以做成自动的,比如定时更新搜索入库今日更新等等。
部分配置文件:
<?php
return [
// 搜索接口专用的私有 Token,防止被调用
'search_api_token' => 'f5a8e3b1e9f0a1b2c3',
'search_cache_ttl' => 900, // 搜索结果缓存时间,单位秒,900=15分钟
'enable_logging' => false, // 开启入库日志;设为 false 或删除此行则关闭
// 允许的 Referer 域名列表(必须以 / 结尾)
'allowed_referer_domains' => [
'https://*****.com/',
'https://www.*****.com/',
],
//搜索服务器列表,部署多台服务器负载均衡,防止被封
'backends' => [
'https://*****.com/t_search/search.php',
//'https://www.*121*.com/t_search/search.php',
//'https://www.*212*.com/t_search/search.php',
],
// 频道列表
'channels' => [
//综合
'alyp_1', //网盘(高品质)影视
'XiangxiuNB', //肯德基の4K影视综合电影云盘站
'PanjClub', //盘酱酱Club🌈
'Oscar_4Kmovies', //奥斯卡4K蓝光(精品)影视
'qixingzhenren', //云盘资源发布频道
'zhenyingsg',//帧影时光
'CBduanju',//全网擦边|电影|资源分享
'gotopan',//网盘资源分享频道
],
// User-Agent 列表,用于抓取时随机选用,避免被封
'user_agents' => [
// Windows
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
// macOS
"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3 Safari/605.1.15",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 13_2_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.129 Safari/537.36",
],
// 支持的网盘链接配置(整合域名和中文名称)
'supported_netdisks' => [
// 百度网盘(可加多个关键字)
[ 'keyword' => 'pan.baidu.com', 'name' => '百度网盘' ],
[ 'keyword' => '百度网盘', 'name' => '百度网盘' ],
[ 'keyword' => '百度云盘', 'name' => '百度网盘' ],
// 夸克网盘
[ 'keyword' => 'pan.quark.cn', 'name' => '夸克网盘' ],
[ 'keyword' => '夸克网盘', 'name' => '夸克网盘' ],
[ 'keyword' => '夸克云盘', 'name' => '夸克网盘' ],
// 阿里云盘所有别名
[ 'keyword' => 'aliyundrive.com', 'name' => '阿里云盘' ],
[ 'keyword' => 'www.alipan.com', 'name' => '阿里云盘' ],
[ 'keyword' => '阿里网盘', 'name' => '阿里云盘' ],
[ 'keyword' => '阿里云盘', 'name' => '阿里云盘' ],
// 迅雷云盘所有别名
[ 'keyword' => 'pan.xunlei.com', 'name' => '迅雷云盘' ],
[ 'keyword' => 'xunlei.com', 'name' => '迅雷云盘' ],
[ 'keyword' => 'thunder://', 'name' => '迅雷云盘' ],
[ 'keyword' => '迅雷网盘', 'name' => '迅雷云盘' ],
[ 'keyword' => '迅雷云盘', 'name' => '迅雷云盘' ],
// 天翼
[ 'keyword' => 'cloud.189.cn', 'name' => '天翼云盘' ],
[ 'keyword' => '天翼网盘', 'name' => '天翼云盘' ],
[ 'keyword' => '天翼云盘', 'name' => '天翼云盘' ],
// 115
[ 'keyword' => '115cdn.com', 'name' => '115网盘' ],
[ 'keyword' => '115.com', 'name' => '115网盘' ],
[ 'keyword' => 'anxia.com', 'name' => '115网盘' ],
[ 'keyword' => '115云盘', 'name' => '115网盘' ],
[ 'keyword' => '115网盘', 'name' => '115网盘' ],
// 其它
[ 'keyword' => 'magnet:?', 'name' => '磁力链接' ],
[ 'keyword' => '磁力链接', 'name' => '磁力链接' ],
[ 'keyword' => 'ed2k://', 'name' => '电驴链接' ],
[ 'keyword' => '电驴链接', 'name' => '电驴链接' ],
[ 'keyword' => 'drive.uc.cn', 'name' => 'UC网盘' ],
[ 'keyword' => 'UC网盘', 'name' => 'UC网盘' ],
[ 'keyword' => 'UC云盘', 'name' => 'UC网盘' ],
[ 'keyword' => '123684.com', 'name' => '123云盘'],
[ 'keyword' => '123云盘', 'name' => '123云盘'],
[ 'keyword' => '123网盘', 'name' => '123云盘'],
[ 'keyword' => 'znas.cn', 'name' => '私有云盘'],
// ...
],
];
前台效果
点击一键搜片,没有命中缓存则实时搜索数据

命中缓存则直接读取redis缓存数据,900秒内的搜索不再重新搜索入库

入库后的展示效果

从此基本告别手动发网盘链接了 🤣
果然是大佬