Files
ai_mip/config.py
2026-02-24 12:46:35 +08:00

114 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
from dotenv import load_dotenv
# 获取运行环境,默认为 development
ENV = os.getenv('ENV', 'development')
# 根据环境加载对应的配置文件
if ENV == 'production':
env_file = '.env.production'
else:
env_file = '.env.development'
# 加载环境配置文件
from pathlib import Path
env_path = Path(env_file)
if env_path.exists():
load_dotenv(env_file)
# 始终显示配置加载信息(便于调试)
print(f"[Config] 加载配置文件: {env_path.absolute()}")
api_key = os.getenv('ADSPOWER_API_KEY', '')
if api_key:
print(f"[Config] ADSPOWER_API_KEY: {api_key[:8]}... (长度: {len(api_key)})")
else:
print(f"[Config] ADSPOWER_API_KEY: 未设置")
else:
print(f"[Config] 警告: 配置文件不存在 {env_path.absolute()}")
load_dotenv() # 尝试加载默认的 .env
class BaseConfig:
"""基础配置类"""
# 环境标识
ENV = ENV
# AdsPower配置
ADSPOWER_API_URL = os.getenv('ADSPOWER_API_URL', 'http://local.adspower.net:50325')
ADSPOWER_USER_ID = os.getenv('ADSPOWER_USER_ID', '')
ADSPOWER_API_KEY = os.getenv('ADSPOWER_API_KEY', '') # 可选,某些版本需要
# 服务配置
SERVER_HOST = os.getenv('SERVER_HOST', '0.0.0.0')
SERVER_PORT = int(os.getenv('SERVER_PORT', 5000))
# 点击策略配置
MIN_CLICK_COUNT = int(os.getenv('MIN_CLICK_COUNT', 1)) # 每日最少点击次数
MAX_CLICK_COUNT = int(os.getenv('MAX_CLICK_COUNT', 3)) # 每日最多点击次数
CLICK_INTERVAL_MINUTES = int(os.getenv('CLICK_INTERVAL_MINUTES', 30)) # 点击间隔(分钟)
MIN_TASK_INTERVAL_MINUTES = int(os.getenv('MIN_TASK_INTERVAL_MINUTES', 3)) # 任务间最小间隔(分钟)
MAX_TASK_INTERVAL_MINUTES = int(os.getenv('MAX_TASK_INTERVAL_MINUTES', 5)) # 任务间最大间隔(分钟)
MAX_CONCURRENT_WORKERS = int(os.getenv('MAX_CONCURRENT_WORKERS', 2)) # 最大并发任务数默认2
WORK_START_HOUR = int(os.getenv('WORK_START_HOUR', 9)) # 工作开始时间
WORK_END_HOUR = int(os.getenv('WORK_END_HOUR', 21)) # 工作结束时间
REPLY_WAIT_TIMEOUT = int(os.getenv('REPLY_WAIT_TIMEOUT', 30)) # 回复等待超时(秒)
# 爬虫调度配置
CRAWLER_ENABLED = os.getenv('CRAWLER_ENABLED', 'True').lower() == 'true' # 是否启用爬虫
CRAWLER_SCHEDULE_TIME = os.getenv('CRAWLER_SCHEDULE_TIME', '02:00') # 爬虫执行时间HH:MM
CRAWLER_BATCH_SIZE = int(os.getenv('CRAWLER_BATCH_SIZE', 10)) # 每次爬取任务数量
# 数据存储路径
DATA_DIR = os.getenv('DATA_DIR', './data')
LOG_DIR = os.getenv('LOG_DIR', './logs')
QUERY_UPLOAD_DIR = os.getenv('QUERY_UPLOAD_DIR', './query_upload') # Query挖掘上传目录
# 调试模式
DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
# 测试配置
AUTO_CLOSE_BROWSER = os.getenv('AUTO_CLOSE_BROWSER', 'False').lower() == 'true' # 测试完成后是否自动关闭浏览器
# MySQL数据库配置
MYSQL_HOST = os.getenv('MYSQL_HOST', 'localhost')
MYSQL_PORT = int(os.getenv('MYSQL_PORT', 3306))
MYSQL_USER = os.getenv('MYSQL_USER', 'root')
MYSQL_PASSWORD = os.getenv('MYSQL_PASSWORD', '')
MYSQL_DATABASE = os.getenv('MYSQL_DATABASE', 'ai_article')
# 远程点击服务配置(分布式部署时使用)
# 为空表示本地模式调度器在Web服务内运行
# 设置URL表示远程模式Web服务转发请求到远程点击服务
CLICK_SERVICE_URL = os.getenv('CLICK_SERVICE_URL', '') # 例如: http://192.168.1.100:8888
# 服务模式web=提供前端界面, click=仅提供调度API
SERVICE_MODE = os.getenv('SERVICE_MODE', 'web')
# 千问大模型API配置
QWEN_API_KEY = os.getenv('QWEN_API_KEY', 'sk-6d22dd845a624d9c92a821d24a50e2e8')
QWEN_API_URL = os.getenv('QWEN_API_URL', 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions')
@classmethod
def ensure_dirs(cls):
"""确保必要的目录存在"""
os.makedirs(cls.DATA_DIR, exist_ok=True)
os.makedirs(cls.LOG_DIR, exist_ok=True)
os.makedirs(cls.QUERY_UPLOAD_DIR, exist_ok=True)
class DevelopmentConfig(BaseConfig):
"""开发环境配置"""
DEBUG = True
class ProductionConfig(BaseConfig):
"""生产环境配置"""
DEBUG = True
# 根据环境选择配置
if ENV == 'production':
Config = ProductionConfig
else:
Config = DevelopmentConfig