| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- BUFF 饰品属性同步脚本(固定代理账号密码版本)
- 说明:
- 1. 复用 sync_goods_attr.py 的数据库/同步主流程逻辑
- 2. 将“从代理池 API 获取代理”改为“固定代理账号密码”
- 3. 默认使用本文件内置代理参数,也支持环境变量覆盖
- """
- import os
- import sys
- from sync_goods_attr import (
- BATCH_SIZE,
- CONCURRENT_WORKERS,
- DB_HOST,
- DB_NAME,
- DB_PORT,
- BuffGoodsAPI,
- DatabaseConnectionPool,
- GoodsAttrDatabase,
- GoodsAttrSyncTask,
- logger,
- )
- # 固定代理配置(可通过环境变量覆盖)
- FIXED_PROXY_USERNAME = os.getenv(
- "FIXED_PROXY_USERNAME",
- "user-sub.1114324035-type-dc-session-dzkC45",
- )
- FIXED_PROXY_PASSWORD = os.getenv("FIXED_PROXY_PASSWORD", "1114324035")
- FIXED_PROXY_HOST = os.getenv("FIXED_PROXY_HOST", "proxy.haiwaiip.net")
- FIXED_PROXY_PORT = os.getenv("FIXED_PROXY_PORT", "1469")
- class FixedProxyBuffGoodsAPI(BuffGoodsAPI):
- """固定代理版本:不再请求代理池 API,始终使用同一代理凭据"""
- def _fetch_new_proxy_from_pool(self):
- if not all([FIXED_PROXY_USERNAME, FIXED_PROXY_PASSWORD, FIXED_PROXY_HOST, FIXED_PROXY_PORT]):
- logger.error("固定代理配置不完整,请检查用户名/密码/主机/端口")
- return None
- return f"{FIXED_PROXY_USERNAME}:{FIXED_PROXY_PASSWORD}@{FIXED_PROXY_HOST}:{FIXED_PROXY_PORT}"
- def _rotate_proxy(self, reason: str) -> bool:
- """兼容父类重试逻辑:将“切换代理”退化为“确保固定代理已设置”"""
- new_proxy = self._fetch_new_proxy_from_pool()
- if not new_proxy:
- logger.error("设置固定代理失败(原因:%s)", reason)
- return False
- with self._proxy_lock:
- old_proxy = self._current_proxy
- self._current_proxy = new_proxy
- if old_proxy != new_proxy:
- logger.info("固定代理已启用(%s): %s", reason, f"{FIXED_PROXY_HOST}:{FIXED_PROXY_PORT}")
- return True
- class FixedProxyGoodsAttrSyncTask(GoodsAttrSyncTask):
- """固定代理同步任务"""
- def __init__(self):
- self.db = GoodsAttrDatabase()
- self.api = FixedProxyBuffGoodsAPI()
- self._sync_offset = 0
- def main():
- task = None
- try:
- logger.info("启动饰品属性同步脚本(固定代理账号密码版本)...")
- logger.info(
- "数据库写入目标: %s:%s/%s 表 buff_goods_attr(请确认您查询的是同一库)",
- DB_HOST,
- DB_PORT,
- DB_NAME,
- )
- logger.info(
- "配置信息: 每次处理 %s 个饰品, 串行单请求(无固定间隔), 并发数 %s, 固定代理 %s:%s",
- BATCH_SIZE,
- CONCURRENT_WORKERS,
- FIXED_PROXY_HOST,
- FIXED_PROXY_PORT,
- )
- task = FixedProxyGoodsAttrSyncTask()
- task.run_continuous()
- except KeyboardInterrupt:
- logger.info("\n收到中断信号,正在退出...")
- if task:
- task.cleanup()
- sys.exit(0)
- except Exception as e:
- logger.exception("程序运行异常: %s", e)
- if task:
- task.cleanup()
- sys.exit(1)
- if __name__ == "__main__":
- try:
- import dbutils # noqa: F401
- except ImportError:
- print("请先安装依赖: pip install DBUtils==3.0.2")
- sys.exit(1)
- main()
|