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)) # 任务间最大间隔(分钟) 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') # 调试模式 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') @classmethod def ensure_dirs(cls): """确保必要的目录存在""" os.makedirs(cls.DATA_DIR, exist_ok=True) os.makedirs(cls.LOG_DIR, exist_ok=True) class DevelopmentConfig(BaseConfig): """开发环境配置""" DEBUG = True class ProductionConfig(BaseConfig): """生产环境配置""" DEBUG = False # 根据环境选择配置 if ENV == 'production': Config = ProductionConfig else: Config = DevelopmentConfig