FongMi 5以上版本支持
This commit is contained in:
+50
-8
@@ -28,7 +28,8 @@ class TVBox本地构建器:
|
|||||||
self.数据 = None
|
self.数据 = None
|
||||||
self.session = requests.Session()
|
self.session = requests.Session()
|
||||||
self.session.headers.update({
|
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):
|
def 加载数据(self):
|
||||||
@@ -121,33 +122,74 @@ class TVBox本地构建器:
|
|||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
def 下载spider(self):
|
def 下载spider(self):
|
||||||
"""下载 spider 文件"""
|
"""下载 spider 文件,支持多种备用方案"""
|
||||||
spider_url = self.数据.get('spider', '')
|
spider_url = self.数据.get('spider', '')
|
||||||
if not spider_url:
|
if not spider_url:
|
||||||
print("✗ 未找到 spider 配置")
|
print("✗ 未找到 spider 配置")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# 提取 URL(去掉 ;md5;xxx 部分)
|
# 提取 URL 和 MD5(去掉 ;md5;xxx 部分)
|
||||||
url = spider_url.split(';')[0]
|
parts = spider_url.split(';')
|
||||||
|
url = parts[0]
|
||||||
|
expected_md5 = parts[2] if len(parts) > 2 else ''
|
||||||
spider_path = self.输出目录 / 'spider.jar'
|
spider_path = self.输出目录 / 'spider.jar'
|
||||||
|
|
||||||
print(f"\n=== 下载 Spider ===")
|
print(f"\n=== 下载 Spider ===")
|
||||||
url = self.替换代理域名(url)
|
url = self.替换代理域名(url)
|
||||||
|
|
||||||
|
# 方案1: 用 requests 下载
|
||||||
try:
|
try:
|
||||||
print(f" 下载: {url}")
|
print(f" 下载(requests): {url}")
|
||||||
resp = self.session.get(url, timeout=30, allow_redirects=True)
|
resp = self.session.get(url, timeout=30, allow_redirects=True)
|
||||||
resp.raise_for_status()
|
resp.raise_for_status()
|
||||||
with open(spider_path, 'wb') as f:
|
with open(spider_path, 'wb') as f:
|
||||||
f.write(resp.content)
|
f.write(resp.content)
|
||||||
print(f" ✓ 保存到: {spider_path}")
|
|
||||||
md5 = self.计算MD5(spider_path)
|
md5 = self.计算MD5(spider_path)
|
||||||
|
print(f" ✓ 保存到: {spider_path}")
|
||||||
print(f" MD5: {md5}")
|
print(f" MD5: {md5}")
|
||||||
self.数据['spider'] = f"./spider.jar;md5;{md5}"
|
self.数据['spider'] = f"./spider.jar;md5;{md5}"
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f" ✗ 下载失败: {e}")
|
print(f" ✗ requests下载失败: {e}")
|
||||||
return False
|
|
||||||
|
# 方案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, 路径):
|
def 是URL(self, 路径):
|
||||||
"""判断是否为URL"""
|
"""判断是否为URL"""
|
||||||
|
|||||||
Reference in New Issue
Block a user