FongMi 5以上版本支持

This commit is contained in:
qist
2026-08-22 19:12:05 +08:00
parent f9f24b5849
commit 35861a4994
+50 -8
View File
@@ -28,7 +28,8 @@ class TVBox本地构建器:
self.数据 = None
self.session = requests.Session()
self.session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
'User-Agent': 'okhttp/3.12.0',
'Accept-Encoding': 'gzip, deflate'
})
def 加载数据(self):
@@ -121,33 +122,74 @@ class TVBox本地构建器:
return False, None
def 下载spider(self):
"""下载 spider 文件"""
"""下载 spider 文件,支持多种备用方案"""
spider_url = self.数据.get('spider', '')
if not spider_url:
print("✗ 未找到 spider 配置")
return False
# 提取 URL(去掉 ;md5;xxx 部分)
url = spider_url.split(';')[0]
# 提取 URL 和 MD5(去掉 ;md5;xxx 部分)
parts = spider_url.split(';')
url = parts[0]
expected_md5 = parts[2] if len(parts) > 2 else ''
spider_path = self.输出目录 / 'spider.jar'
print(f"\n=== 下载 Spider ===")
url = self.替换代理域名(url)
# 方案1: 用 requests 下载
try:
print(f" 下载: {url}")
print(f" 下载(requests): {url}")
resp = self.session.get(url, timeout=30, allow_redirects=True)
resp.raise_for_status()
with open(spider_path, 'wb') as f:
f.write(resp.content)
print(f" ✓ 保存到: {spider_path}")
md5 = self.计算MD5(spider_path)
print(f" ✓ 保存到: {spider_path}")
print(f" MD5: {md5}")
self.数据['spider'] = f"./spider.jar;md5;{md5}"
return True
except Exception as e:
print(f" ✗ 下载失败: {e}")
return False
print(f"requests下载失败: {e}")
# 方案2: 用 curl 命令行下载(绕过 WAF 对 requests 的拦截)
try:
import subprocess
print(f" 下载(curl): {url}")
result = subprocess.run(
['curl', '-sL', '-o', str(spider_path),
'-H', 'User-Agent: okhttp/3.12.0',
'--connect-timeout', '30', '--max-time', '60', url],
capture_output=True, timeout=90
)
if spider_path.exists() and spider_path.stat().st_size > 1000:
md5 = self.计算MD5(spider_path)
print(f" ✓ curl保存到: {spider_path}")
print(f" MD5: {md5}")
self.数据['spider'] = f"./spider.jar;md5;{md5}"
return True
else:
print(f" ✗ curl下载文件过小或不存在")
except Exception as e:
print(f" ✗ curl下载失败: {e}")
# 方案3: 使用已有的 spider.jar(从上级目录查找)
import shutil
for candidate in [Path('../xiaosa/spider.jar'), Path('../jar/spider.jar'), Path('spider.jar')]:
candidate = candidate.resolve() if not candidate.is_absolute() else candidate
if candidate.exists() and candidate.stat().st_size > 1000:
print(f" 使用已有文件: {candidate}")
shutil.copy2(candidate, spider_path)
md5 = self.计算MD5(spider_path)
print(f" ✓ 复制到: {spider_path}")
print(f" MD5: {md5}")
if expected_md5 and md5 != expected_md5:
print(f" ⚠️ MD5不匹配 (期望: {expected_md5})")
self.数据['spider'] = f"./spider.jar;md5;{md5}"
return True
print(f" ✗ 所有下载方案均失败,spider.jar 未生成")
return False
def 是URL(self, 路径):
"""判断是否为URL"""