Files
MoonTVPlus/src/lib/pancheck/vendor/checkers/uc.js
T
2026-04-27 21:25:31 +08:00

58 lines
1.9 KiB
JavaScript

const { request, DEFAULT_UA } = require('./http');
/**
* UC网盘链接检测
* URL格式: https://drive.uc.cn/s/{shareID}
* 检测方法: 页面爬取,通过关键词判断有效性
*/
async function checkUC(link) {
const { shareID, error: parseError } = extractShareIDFromURL(link);
if (parseError) {
return { valid: false, reason: '链接格式无效: ' + parseError };
}
try {
const url = `https://drive.uc.cn/s/${shareID}`;
const { statusCode, body } = await request(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.101 Mobile Safari/537.36',
},
});
if (statusCode !== 200) {
return { valid: false, reason: `HTTP状态码: ${statusCode}` };
}
const pageText = body.toLowerCase();
const errorKeywords = ['失效', '不存在', '违规', '删除', '已过期', '被取消'];
for (const keyword of errorKeywords) {
if (pageText.includes(keyword)) {
return { valid: false, reason: '链接已失效' };
}
}
const validKeywords = ['文件', '分享'];
for (const keyword of validKeywords) {
if (pageText.includes(keyword)) {
return { valid: true, reason: '' };
}
}
return { valid: false, reason: '无法判断链接有效性' };
} catch (err) {
if (err.message === '请求超时') return { valid: true, reason: '' }; // 超时视为有效,避免误判
return { valid: true, reason: '' }; // 连接错误也视为有效,避免误判
}
}
function extractShareIDFromURL(urlStr) {
const pattern = /https?:\/\/drive\.uc\.cn\/s\/([a-zA-Z0-9]+)/;
const match = urlStr.match(pattern);
if (match && match[1]) {
return { shareID: match[1], error: null };
}
return { shareID: '', error: '无法从URL中提取share_id' };
}
module.exports = { checkUC, extractShareIDFromURL };