58 lines
1.9 KiB
JavaScript
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 }; |