"""运行入口 — 循环获取通达信行情并推送 MoFin 小小莫:完成 tdx_client.py 后运行此脚本。 """ import time import logging from relay.tdx_client import TDXClient from relay.pusher import MoFinPusher from relay.config import MARKET_SERVERS, MOFIN_URL, PUSH_INTERVAL, HK_STOCKS logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s") log = logging.getLogger(__name__) def find_working_server() -> tuple: """自动检测可用的通达信服务器""" for name, ip, port in MARKET_SERVERS: try: client = TDXClient() client.connect(ip, port) data = client.get_hk_quote(31, "00700") client.close() if data and data.get("price"): log.info(f"✅ {name} ({ip}:{port}) 可用") return (ip, port) except Exception as e: log.warning(f"❌ {name} ({ip}:{port}): {e}") return (None, None) def main(): log.info("🚀 TDX Relay 启动") log.info(f"目标: {MOFIN_URL} | 港股: {len(HK_STOCKS)}只 | 间隔: {PUSH_INTERVAL}s") ip, port = find_working_server() if not ip: log.error("没有可用服务器") return pusher = MoFinPusher(MOFIN_URL) client = TDXClient() try: client.connect(ip, port) while True: try: hk_data = client.get_hk_quotes() if hk_data: r = pusher.push(hk_data) log.info(f"推送 {len(hk_data)} 只: {r.get('status')}") time.sleep(PUSH_INTERVAL) except (ConnectionError, TimeoutError): log.warning("断连,重试...") client.close() time.sleep(3) client.connect(ip, port) finally: client.close() if __name__ == "__main__": main()