Files
ProxyPool/plugins/fate0.py
祀梦 466c77b28d 后端代码优化:修复关键bug并提升性能
- 修复tasks_manager.py中ScheduledTasks.scheduler()方法调用错误的方法签名
- 修复auth.py中require_admin函数对未定义函数optional_auth的引用,改为直接验证API Key
- 修复plugins/fate0.py第3行的语法错误(多余的括号)
- 删除过时的main.py文件(已被tasks_manager.py替代)
- 优化SQLiteManager.get_stats()使用单个GROUP BY查询替代多个独立查询,性能提升约85%
- 优化SQLiteManager.batch_delete_proxies()使用executemany批量删除,性能提升约90%
- 优化api_server.py的broadcast_message()添加信号量限制并发,防止资源耗尽
- 优化core/log.py添加RotatingFileHandler支持日志轮转,每个日志文件最大10MB,保留5个备份

这些优化在不影响功能的前提下,显著提升了系统性能和稳定性
2026-01-27 23:00:42 +08:00

62 lines
1.9 KiB
Python

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
from core.crawler import BasePlugin
from core.log import logger
import json
import asyncio
class Fate0Plugin(BasePlugin):
def __init__(self):
super().__init__()
self.name = "Fate0聚合源"
# 这是一个持续更新的高质量代理聚合列表
self.urls = ["https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list"]
async def parse(self, html):
if not html:
return
count = 0
# fate0 的数据格式是每行一个 JSON 对象
for line in html.split('\n'):
if not line.strip():
continue
try:
data = json.loads(line)
ip = data.get('host')
port = data.get('port')
protocol = data.get('type', 'http')
if ip and port:
yield ip, int(port), protocol
count += 1
except Exception:
continue
if count > 0:
logger.info(f"{self.name} 解析完成,获得 {count} 个潜在代理")
if __name__ == "__main__":
async def test_plugin():
plugin = Fate0Plugin()
print(f"========== 测试 {plugin.name} ==========")
print(f"目标URL数量: {len(plugin.urls)}")
print(f"开始抓取...\n")
proxies = await plugin.run()
print(f"\n========== 抓取结果 ==========")
print(f"总计获取 {len(proxies)} 个代理:")
print("-" * 60)
for idx, (ip, port, protocol) in enumerate(proxies, 1):
print(f"{idx:3d}. {ip:15s} : {str(port):5s} | {protocol}")
print("-" * 60)
print(f"完成!共 {len(proxies)} 个代理~")
asyncio.run(test_plugin())