{"id":"2fb72ea0-5434-4f8d-af71-8287212b5a2a","entityType":"agent","slug":"clawhub-kekewater-china-stock-data","name":"China Stock Data","canonicalUrl":"https://www.xpersona.co/agent/clawhub-kekewater-china-stock-data","canonicalPath":"/agent/clawhub-kekewater-china-stock-data","generatedAt":"2026-10-11T10:52:26.822Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T07:44:57.319Z","emptyReason":null},"description":"中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。 Skill: China Stock Data Owner: kekewater Summary: 中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。 Tags: a-share:1.7.0, akshare:1.7.0, china-stock:1.7.0, finance:1.7.0, latest:1.7.0, stock:1.7.0, tdx:1.7.0, tencent:1.7.0 Version history: v1.7.0 | 2026-05-15T00:01:16.191Z | auto **Major update: v2.0.0 brings multi-source A-share dat","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17dp1tr621986tmmwqfvmq3cn86qb2n:china-stock-data","sourceUrl":"https://clawhub.ai/kekewater/china-stock-data","homepage":"https://clawhub.ai/kekewater/skills/china-stock-data","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/kekewater/china-stock-data","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/kekewater/skills/china-stock-data","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。 Skill: China Stock Data "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:44:57.319Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:44:57.319Z","emptyReason":null},"stars":null,"forks":null,"downloads":1121,"packageName":null,"latestVersion":"1.7.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T07:44:56.973Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T07:44:57.319Z","lastCrawledAt":"2026-10-11T07:44:56.973Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T07:44:56.973Z","lastVerifiedAt":null,"highlights":[{"version":"1.7.0","createdAt":"2026-05-15T00:01:16.191Z","changelog":"**Major update: v2.0.0 brings multi-source A-share data with auto-fallback, now featuring 8 sources plus CNINFO and powerful monitoring tools.** - 集成8大权威数据源，支持行情、K线、公告、研报、资金流、热度、量化、语义搜索等全场景查询 - 新增巨潮资讯网(CNINFO)为公告首选源，实现全A股公告全文搜索（2026年新增） - 内置 Stock Monitor（价格预警、自选异动）与 News Aggregator（金简报、指数、快讯）工具 - 所有数据源支持自动降级，提升稳健性，批量/高频调用自动限速与服务器轮询 - 指令与配置大幅升级，详细命令速查与环境变量灵活适配多账号/API key/token - 完善依赖与数据源说明，附常见问题与详细技术参考文档","fileCount":15,"zipByteSize":40952}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17dp1tr621986tmmwqfvmq3cn86qb2n:china-stock-data","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T10:52:26.821Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-kekewater-china-stock-data/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T07:44:57.319Z","emptyReason":null},"readme":"Skill: China Stock Data\n\nOwner: kekewater\n\nSummary: 中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。\n\nTags: a-share:1.7.0, akshare:1.7.0, china-stock:1.7.0, finance:1.7.0, latest:1.7.0, stock:1.7.0, tdx:1.7.0, tencent:1.7.0\n\nVersion history:\n\nv1.7.0 | 2026-05-15T00:01:16.191Z | auto\n\n**Major update: v2.0.0 brings multi-source A-share data with auto-fallback, now featuring 8 sources plus CNINFO and powerful monitoring tools.**\n\n- 集成8大权威数据源，支持行情、K线、公告、研报、资金流、热度、量化、语义搜索等全场景查询\n- 新增巨潮资讯网(CNINFO)为公告首选源，实现全A股公告全文搜索（2026年新增）\n- 内置 Stock Monitor（价格预警、自选异动）与 News Aggregator（金简报、指数、快讯）工具\n- 所有数据源支持自动降级，提升稳健性，批量/高频调用自动限速与服务器轮询\n- 指令与配置大幅升级，详细命令速查与环境变量灵活适配多账号/API key/token\n- 完善依赖与数据源说明，附常见问题与详细技术参考文档\n\nArchive index:\n\nArchive v1.7.0: 15 files, 40952 bytes\n\nFiles: references/cninfo-api.md (3255b), references/cninfo-pdf-extraction.md (5011b), references/eastmoney-limitations.md (2000b), references/tdx-protocol-notes.md (5074b), references/tdx-rate-limiting.md (3179b), references/tonghuashun-headlines-api.md (3150b), requirements.txt (565b), scripts/china_stock.py (28353b), scripts/daily_briefing_image.py (9884b), scripts/news_aggregator.py (9355b), scripts/sec_edgar.py (4285b), scripts/stock_monitor.py (3801b), skill-card.md (3597b), SKILL.md (13950b), _meta.json (135b)\n\nFile v1.7.0:SKILL.md\n\n---\nname: china-stock-data\ndescription: 中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。\nversion: 2.0.0\nmetadata:\n  hermes:\n    tags: [stock, finance, a-share, china-stock, tdx, tencent, tonghuashun, akshare, wencai, monitor, news, cron]\n    related_skills: [tonghuashun, stock-announcement-analysis, us-stock-data]\n---\n\n# China Stock Data - 中国A股综合数据源\n\n## Overview\n\n本技能集成 **8大数据源 + 3大工具**，覆盖 A 股行情、K线、研报、公告、资金流向、板块排行、热点题材、语义搜索、量化指标、价格预警、每日简报等全场景。数据源自动降级，无需担心单点故障。\n\n| # | 数据源/工具 | 能力 | 状态 |\n|---|------------|------|------|\n| 1 | **通达信(TDX)** | 实时行情、5档盘口、K线(日/周/月/分钟)、逐笔成交 | ✅ 无需Key |\n| 2 | **腾讯财经** | PE、PB、市值、换手率、财务估值数据 | ✅ 公开API |\n| 3 | **同花顺(iFinD)** | 专业行情、股息率、热点题材、强势股归因 | ✅ 需配置token |\n| 4 | **AKShare** | 券商研报、公司公告、资金流向、补充数据 | ✅ 部分受限 |\n| 5 | **iWencai(问财)** | 自然语言选股、跨主题语义搜索 | ⚠️需API Key |\n| 6 | **JQData(聚宽)** | 量化指标、财报因子、宏观数据 | ✅ 需账号 |\n| 7 | **Tushare Pro** | 公告、日线、北向、两融、财报 | ✅ 需token |\n| 8 | **RiceQuant(米筐)** | 量化回测数据 | ✅ 需账号 |\n| 9 | **巨潮资讯网(CNINFO)** 🆕 | 公告全文搜索，覆盖深沪两市全部A股 | ✅ 公开API，无需Key |\n| 🔔 | **Stock Monitor** | 价格预警、自选异动检查、自动盯盘 | ✅ 内置 |\n| 📰 | **News Aggregator** | 每日金融简报、指数行情、头条汇总 | ✅ 内置 |\n\n**本文就是根据这些微信公众号文章搭建的：**\n- [用 Claude Code 搭建大A稳定数据源](https://mp.weixin.qq.com/s/wWIJOYwfmzQ5EEIZQbby0Q)\n- [A股数据平台及工具大全](https://mp.weixin.qq.com/s/SV2TGAppLlmhvQQYLWDRIw)\n- [金融AI工具10选](https://mp.weixin.qq.com/s/M5wRDr1sIoYXRzBDIl6sWA)\n选型逻辑：通达信+腾讯财经（行情）→ 东财+AKShare（研报）→ 同花顺（热点）→ iWencai（搜索）→ 聚宽/米筐（量化）→ Monitor+News（监控+简报）\n\n## When to Use\n\n自然语言输入即可查询：\n\n```\n# 实时行情（自动选择最佳数据源）\n查一下 600519 的行情\n贵州茅台现在多少钱\n批量看 600519,300750,000001\n\n# K线数据\n看下 300750 最近30天K线\n宁德时代周K线\n\n# 研报与公告\n贵州茅台最近研报\n300750 最新公告\n\n# 资金流向\n茅台资金流向\n\n# 板块排行\n今天什么板块涨得好\n行业板块排行\n\n# 热点题材\n今天热点题材\n同花顺热点\n\n# 问财搜索（需配置Token）\n搜索：人形机器人 丝杠\n问财：华为概念 业绩预增\n```\n\n**不要用于：**\n- 下单/交易操作（本技能仅提供数据查询）\n\n## How It Works\n\n所有查询通过 `scripts/china_stock.py` 统一执行。\n\n```bash\nSCRIPT=scripts/china_stock.py\nPY=python3\n```\n\n### 命令速查\n\n```bash\n# === 智能行情（自动降级）===\n$PY $SCRIPT quote 600519            # TDX → 腾讯 → iFinD自动降级（含PE/市值/换手率）\n$PY $SCRIPT tencent-quote 000001    # 腾讯财经行情（平安银行）\n\n# === 通达信（实时+盘口）===\n$PY $SCRIPT tdx-quote 600519        # 实时行情+5档买卖盘口\n$PY $SCRIPT tdx-kline 600519 daily  # K线 (daily/weekly/monthly/60min/30min/15min/5min)\n$PY $SCRIPT tdx-kline 300750 weekly # 周K\n$PY $SCRIPT tdx-kline 600519 60min  # 60分钟K线\n\n# === 腾讯财经（财务指标）===\n$PY $SCRIPT tencent-quote 000001    # PE/PB/市值/换手率\n$PY $SCRIPT tencent-batch 600519,300750,000001  # 批量查询\n\n# === 同花顺iFinD（需token）===\n$PY $SCRIPT ifind-quote 600519      # 专业行情（含PE/换手率/股息率/振幅）\n\n# === AKShare（研报/资金）===\n$PY $SCRIPT report 600519 10        # 最近10份研报\n$PY $SCRIPT moneyflow 600519 5      # 最近5天资金流向\n\n# === 公告查询（三级降级：巨潮CNINFO → Tushare Pro → AKShare）===\n$PY $SCRIPT announce 600519 20      # 最近20条公告（自动选最佳源）\n$PY $SCRIPT moneyflow 600519 5      # 最近5天资金流向\n\n# === 巨潮资讯网(CNINFO) 公告搜索 — 2026年新增首选公告源 ===\n$PY $SCRIPT announce 600519           # 自动降级: CNINFO → Tushare → AKShare\n$PY $SCRIPT tushare-ann 600519        # Tushare Pro公告（tushare.xyz自定义地址）\n\n# === 板块排行 & 热点 ===\n$PY $SCRIPT sector                  # 行业板块排行  TOP20\n$PY $SCRIPT themes                  # 热点题材（行业+概念）\n\n# === 问财语义搜索（需配置 WENCAI_TOKEN）===\n$PY $SCRIPT search 人形机器人 丝杠   # 自然语言选股\n\n# === Tushare Pro（公告数据当前可用）===\n$PY $SCRIPT tushare-ann 600519 20  # 最新20条公告\n\n# === JQData聚宽（需 export JQ_USER/JQ_PASS）===\n$PY $SCRIPT jq-financial 600519    # 财报指标数据\n$PY $SCRIPT jq-macro               # 宏观数据（GDP/CPI）\n\n# === Stock Monitor 股票监控 ===\nMON=~/.hermes/skills/financial/china-stock-data/scripts/stock_monitor.py\n$PY $MON check 600519              # 检查贵州茅台当前价格\n$PY $MON check 600519 1300 below   # 检查是否跌破1300\n$PY $MON watchlist                 # 自选股异动扫描\n$PY $MON watchlist 600519,300750,000001  # 指定列表异动\n\n# === News Aggregator 新闻简报 ===\nNEWS=~/.hermes/skills/financial/china-stock-data/scripts/news_aggregator.py\n$PY $NEWS daily                    # 当日金融简报（指数+头条）\n$PY $NEWS indices                  # 主要指数行情\n$PY $NEWS headlines                # 同花顺快讯\n\n# === 系统状态 ===\n$PY $SCRIPT status                  # 全部数据源状态\n```\n\n### 数据源降级策略\n\n```\n行情查询自动按顺序降级：\n  [1] 通达信(TDX) ── 5档盘口 + 实时行情\n  [2] 腾讯财经    ── 补充PE/市值/换手率（与TDX并行）\n  [3] 同花顺iFinD ── 专业级行情（需配置token）\n\n板块排行/热点：\n  [1] 同花顺官网  ── 实时行业/概念涨幅排行\n  [2] EastMoney   ── 被限流时自动切换同花顺\n```\n\n### 股票代码格式\n\n| 市场 | 格式 | 示例 |\n|------|------|------|\n| 上海A股 | 6xxxxx | 600519 |\n| 深圳主板 | 00xxxx | 000001 |\n| 深圳创业板 | 30xxxx | 300750 |\n| 科创板 | 688xxx | 688xxx |\n\n脚本自动识别代码前缀（6→沪，0/3→深），无需加 sh/sz 前缀。\n\n## Setup\n\n```bash\n# 安装核心依赖\npip install -r requirements.txt\n\n# 或手动安装\npip install pytdx akshare beautifulsoup4 requests lxml pandas openpyxl\n\n# 可选：数据源增强（按需安装）\npip install jqdatasdk    # JQData聚宽量化数据（需账号）\npip install rqdatac      # RiceQuant米筐量化数据（需账号）\npip install tushare      # Tushare Pro综合数据（需token）\npip install wencai       # 同花顺问财语义搜索（需API Key）\n\n# 配置同花顺iFinD token（提升专业行情质量）\n# 编辑 ifind_config.json 并放在脚本同目录：\n# {\"access_token\": \"your_token\", \"refresh_token\": \"your_token\"}\n\n# 可选环境变量\nexport WENCAI_TOKEN=your_token   # 问财搜索\nexport JQ_USER=your_phone       # JQData账号\nexport JQ_PASS=your_password    # JQData密码\nexport RQ_USER=your_username    # RiceQuant账号\nexport RQ_PASS=your_password    # RiceQuant密码\n```\n\n## Data Source Details\n\n### 1️⃣ 通达信(TDX) — 实时交易数据之王\n- **协议**: pytdx (开源TCP协议实现)\n- **特点**: 无需API Key，直连通达信行情服务器\n- **数据**: 实时价格、5档买卖盘口、K线(日/周/月/分钟)、逐笔成交\n- **延迟**: 约3-5秒（与通达信客户端同步）\n- **限速保护**:\n  - 🛡️ 每次TDX调用间隔 ≥0.5秒（随机加0-0.2秒jitter）\n  - 🔄 4台服务器轮询（成都电信、北京联通、上海电信、杭州电信）\n  - 📦 批量查询优化：指数日报用1次连接查6个指数，而非6次独立连接\n- **状态**: ✅ 可用\n\n### 2️⃣ 腾讯财经 — 财务指标补充\n- **接口**: `https://qt.gtimg.cn/q={code}`\n- **特点**: 公开HTTP API，调用简单\n- **数据**: PE(市盈率)、PB(市净率)、市值(总/流通)、换手率\n- **状态**: ✅ 可用\n\n### 3️⃣ 同花顺(iFinD) — 专业行情\n- **接口**: `https://quantapi.51ifind.com/api/v1/`\n- **特点**: 专业级金融数据，含股息率、振幅、PE_TTM\n- **数据**: 实时行情、K线、公告(含PDF)、板块排行、热点题材\n- **配置**: 需 `ifind_config.json`（access_token + refresh_token）\n- **状态**: ✅ 需配置token\n\n### 4️⃣ AKShare — 研报/公告\n- **接口**: 开源Python库\n- **特点**: 多源聚合（东方财富/新浪等），免费\n- **数据**: 券商研报、公司公告、资金流向、补充财务数据\n- **注意**: EastMoney接口可能被限流，建议降频调用\n- **状态**: ✅ 可用（部分源可能限流）\n\n### 5️⃣ iWencai(问财) — 语义搜索\n- **接口**: 同花顺问财API（需SkillHub API Key）\n- **特点**: 自然语言选股，独一档的语义搜索能力\n- **数据**: 跨主题筛选、复杂选股条件\n- **配置**: 设置环境变量 `WENCAI_TOKEN`\n- **获取Key**: 访问 [SkillHub](https://skillhub.com) 或联系文章作者\n- **状态**: ⚠️ 待配置（已实现接口封装）\n\n### 6️⃣ JQData(聚宽) — 量化因子与宏观数据\n- **接口**: `jqdatasdk` (Python SDK)\n- **特点**: 免费注册可用，提供量化指标、财报因子、宏观数据\n- **数据**: 基本面指标、GDP/CPI等宏观、因子数据\n- **配置**: `export JQ_USER=手机号 JQ_PASS=密码`\n- **注册**: [JoinQuant聚宽官网](https://www.joinquant.com/) 免费注册\n- **状态**: ✅ 需配置账号\n\n### 7️⃣ Tushare Pro — 综合数据平台\n- **接口**: `tushare` Python SDK (HTTP API)\n- **特点**: 免费注册得基础积分，签到/分享可获取更多积分\n- **数据**: 公告、日线、北向、两融、财报（⚠️高级数据需积分）\n- **配置**: 在脚本中设置 `token`，国内用户需配置自定义URL：`client.DataApi._DataApi__http_url = \"http://tushare.xyz\"`\n- **注册**: [Tushare Pro官网](https://tushare.pro/) 注册获取token\n- **状态**: ✅ 需配置账号和token\n\n### 8️⃣ RiceQuant(米筐) — 量化回测数据\n- **接口**: `rqdatac` (Python SDK)\n- **特点**: 免费注册可用，提供回测数据和研究环境\n- **配置**: `export RQ_USER=用户名 RQ_PASS=密码`\n- **状态**: ✅ 已安装，需认证\n\n## References\n\n| 文件 | 内容 |\n|------|------|\n| `scripts/china_stock.py` | 主脚本，8大数据源集成（行情/K线/研报/公告/资金/板块/搜索/量化） |\n| `scripts/stock_monitor.py` | 股票监控/预警（价格检查、自选异动、可配cronjob定时盯盘） |\n| `scripts/news_aggregator.py` | 金融新闻聚合（每日简报、指数行情、头条快讯） |\n| `requirements.txt` | Python依赖列表 |\n| `references/tdx-protocol-notes.md` | TDX通达信协议细节 + 限速策略 |\n| `references/eastmoney-limitations.md` | EastMoney限流备忘 / 替代方案 |\n| `references/tdx-rate-limiting.md` | TDX限速策略文档（全局间隔/服务器轮询/批量查询） |\n| `references/tonghuashun-headlines-api.md` | 同花顺快讯API响应结构说明 |\n| `references/cninfo-api.md` | 巨潮CNINFO公告API接口文档 |\n| `references/cninfo-pdf-extraction.md` | CNINFO PDF下载方法（浏览器工具） |\n\n## Common Pitfalls\n\n1. **TDX服务器可能变化** — 脚本内置了4台服务器（成都、北京、上海、杭州），自动轮询+最多尝试4次。每次调用间隔≥0.5秒，防被封IP\n2. **腾讯财经字段索引** — 返回的 `~` 分隔字符串，按固定顺序解析（0:市场 1:名称 2:代码 3:现价 4:昨收 ...）\n3. **EastMoney被限流** — 服务器IP可能被东方财富临时封禁，板块排行已自动切换到同花顺页面抓取\n4. **iFinD Token过期** — iFinD access_token 7天有效，脚本自动用 refresh_token 刷新\n5. **iWencai需API Key** — 问财搜索目前被IP级别封禁（403），需通过 SkillHub 获取 API Key 配置后使用\n6. **行业板块 vs 概念板块** — 同花顺行业板块(thshy)可直接抓取HTML表格数据；概念板块(gn)为历史事件列表，不是当前涨幅排行\n7. **港股/美股支持** — 当前脚本主要面向A股，港股/美股需通过其他工具查询\n8. **pandas降级风险** — 安装 jqdatasdk 或 rqdatac 时会自动降级 pandas 至 2.3.x，可能影响 akShare 等依赖新版 pandas 的库。降级后需执行 `pip install --upgrade pandas` 恢复\n9. **同花顺快讯 API 响应结构变化 (2026-05)** — `data` 现在是对象 `{\"list\":[...], \"filter\":..., \"total\": N}` 而非数组。字段 `share_url` → `shareUrl`\n10. **公告查询优先走巨潮 CNINFO** — 三级降级：CNINFO(全文搜索) → Tushare Pro → AKShare。CNINFO 不需要 Key/Token\n11. **CNINFO PDF下载需用浏览器工具** — 巨潮公告详情页的PDF地址是动态生成的，需用浏览器打开详情页获取真实链接\n\n## Verification Checklist\n\n- [x] `quote 600519` — TDX行情含PE/市值/换手率\n- [x] `tdx-quote 600519` — 实时价格+5档盘口\n- [x] `tdx-kline 300750 daily` — 30条日K线\n- [x] `tencent-quote 000001` — 平安银行PE/市值\n- [x] `sector` — 行业板块排行TOP20\n- [x] `themes` — 行业+概念热点\n- [x] `status` — 全部数据源状态\n- [ ] `search 人形机器人 丝杠` — 需配置WENCAI_TOKEN\n- [ ] `report 600519` — AKShare研报（可能限流）\n\nFile v1.7.0:_meta.json\n\n{\n  \"ownerId\": \"kn7e3z8m5eaqj55549zxhxqct986qdxy\",\n  \"slug\": \"china-stock-data\",\n  \"version\": \"1.7.0\",\n  \"publishedAt\": 1778803276191\n}\n\nFile v1.7.0:references/cninfo-api.md\n\n# 巨潮资讯网 (CNINFO) API 参考\n\n巨潮资讯网 (cninfo.com.cn) 是中国证监会指定的上市公司信息披露网站，覆盖深交所(主板+创业板)、上交所(主板+科创板)全部A股公告。\n\n## 基础信息\n\n- **网站**: http://www.cninfo.com.cn\n- **状态**: 2026-05 可达 (HTTP 200, ~0.3s)\n- **限流**: 无明显限流，但建议 ≥1s/次\n\n## API 端点\n\n### 1. 全文搜索 (推荐 — 最通用)\n\n```\nPOST http://www.cninfo.com.cn/new/fulltextSearch/full\nContent-Type: application/x-www-form-urlencoded\n```\n\n**参数**:\n\n| 参数 | 说明 | 示例 |\n|------|------|------|\n| `searchkey` | 搜索关键词 (股票代码/名称/关键字) | `000001` |\n| `sdate` | 开始日期 (YYYY-MM-DD) | `2026-01-01` |\n| `edate` | 结束日期 | `2026-05-14` |\n| `isfulltext` | 是否全文搜索 | `false` |\n| `sortName` | 排序字段 | `pubdate` |\n| `sortType` | 排序方向 | `desc` |\n| `pageNum` | 页码 | `1` |\n| `pageSize` | 每页条数 | `20` |\n\n**响应字段**:\n\n| 字段 | 说明 |\n|------|------|\n| `announcements[]` | 公告列表 |\n| `.announcementId` | 公告ID (用于详情页) |\n| `.announcementTitle` | 标题 (含 `<em>` 高亮标签) |\n| `.announcementTime` | 时间戳(毫秒) |\n| `.adjunctUrl` | PDF路径 (相对路径) |\n| `.secCode` | 股票代码 |\n| `.secName` | 股票名称 |\n| `.orgId` | 机构ID (格式 `gssz0000001`) |\n\n**bash 示例**:\n\n```bash\ncurl -s \"http://www.cninfo.com.cn/new/fulltextSearch/full\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -d \"searchkey=000001&pageNum=1&pageSize=5&sortName=pubdate&sortType=desc\"\n```\n\n### 2. 全市场最新公告\n\n```\nPOST http://www.cninfo.com.cn/new/hisAnnouncement/query\nContent-Type: application/x-www-form-urlencoded\n```\n\n| 参数 | 说明 | 可选值 |\n|------|------|--------|\n| `column` | 板块 | `szse` (深交所) — **当前唯一有效的值** |\n| `plate` | 板块代码 | `sze` |\n| `tabName` | 标签 | `fulltext` |\n| `stockType` | 股票类型 | `stock` |\n| `pageNum` | 页码 | `1` |\n| `pageSize` | 每页条数 | `10` |\n| `seDate` | 日期范围 | `2026-05-12~2026-05-14` |\n\n**注意**: `stock=000001,sze` 参数**已失效** (返回0条)。个股查询请用全文搜索API。`column=shse`(沪市)/`column=gem`(创业板) 等**均失效**。\n\n### 3. 公告详情页\n\n```\nGET http://www.cninfo.com.cn/new/disclosure/detail\n  ?stockCode=000001\n  &announcementId=1225188743\n  &orgId=gssz0000001\n```\n\n返回HTML页面，含公告全文。\n\n### 4. PDF下载 (旧格式 — 已失效)\n\n```\nGET http://www.cninfo.com.cn/finalpage/2026-04-25/1225188743.PDF\n```\n返回 **HTTP 404**。建议通过 iFinD HTTP API (如有token) 或从详情页提取正文。\n\n## 与 iFinD / Tushare Pro 对比\n\n| 能力 | CNINFO | iFinD HTTP | Tushare Pro |\n|------|--------|------------|-------------|\n| 关键词搜索 | 灵活 | 需精确条件 | 需精确条件 |\n| 全文PDF | 404 | 可下载 | 仅链接 |\n| 公告正文 | 详情页HTML | 可配 | 无 |\n| 限流风险 | 极低 | 周配额1万条 | 积分制 |\n| 无需Key | 是 | 需token | 需token |\n\n## 历史变更\n\n- **2026-05**: `stock=xxx` 个股查询参数失效；`column=shse/gem` 等失效；PDF直链404；全文搜索API仍然稳定可用。\n\nFile v1.7.0:references/cninfo-pdf-extraction.md\n\n# CNINFO (巨潮资讯网) PDF 提取方法\n\n## 问题\n\n巨潮公告详情页中的 PDF 地址是 **动态生成 + 有时限** 的。直接构造 URL（如 `https://disc.static.szse.cn/download/...`）返回 404。通过静态 curl 抓取 HTML 也拿不到真实 PDF 链接（页面纯 JS 渲染）。\n\n## 解决方案：用 Hermes browser 工具\n\nHermes 内置的 browser 工具（agent-browser 驱动）可以打开 JS 渲染的页面，与页面交互，获取真实下载链接。\n\n### 前置条件：配置 Chrome\n\n在 **国内服务器 / 无图形界面环境** 中：\n\n#### ✅ 方案 A：复用 Playwright 已装的 Chrome（推荐，零下载）\n\n```bash\n# 检查是否存在\nls ~/.cache/ms-playwright/chromium-*/chrome-linux64/chrome\n\n# 设置环境变量（已注入 browser_tool.py，下次会话自动生效）\nexport AGENT_BROWSER_EXECUTABLE_PATH=~/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome\nexport AGENT_BROWSER_ARGS=\"--no-sandbox\"\n```\n\n**Hermes 补丁状态：** `browser_tool.py` 第1477-1484行已注入这两个环境变量。**需要重启 Hermes 会话才能生效**（当前会话已加载的旧代码不会看到补丁）。\n\n#### ❌ 方案 B：agent-browser install（不推荐）\n\n通过代理下载 Chrome 175MB，Vultr代理约需5-10分钟，且经常超时中断。**不推荐使用。**\n\n### 已验证的操作流程\n\n#### Step 1：打开公告列表页\n\n```bash\nexport AGENT_BROWSER_EXECUTABLE_PATH=~/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome\nexport AGENT_BROWSER_ARGS=\"--no-sandbox\"\n\nagent-browser open \\\n  \"https://www.cninfo.com.cn/new/disclosure/stock?stockCode=002812&orgId=9900023446\" \\\n  --session target\n```\n\n#### Step 2：等待页面加载并截图\n\n```bash\nagent-browser wait --load networkidle --session target\nsleep 3  # 等JS渲染完成\nagent-browser snapshot -i -c --session target\n```\n\n页面渲染后能看到完整的公告列表（含标题+日期），通过 `@eN` ref 定位目标公告。\n\n#### Step 3：提取 announcementId（✅ 已验证可行）\n\n用 `get attr` 直接拿公告链接的 `href`，无需点击跳转：\n\n```bash\nagent-browser get attr @eN href --session target\n# 返回示例:\n# /new/disclosure/detail?plate=szse&orgId=9900026450&stockCode=002812\n#   &announcementId=1225304895&announcementTime=2026-05-14\n```\n\n**关键参数：** `announcementId=1225304895`\n\n#### Step 4：打开详情页（✅ 已验证可行）\n\n```bash\nagent-browser open \\\n  \"https://www.cninfo.com.cn/new/disclosure/detail?plate=szse\\\n   &orgId=9900026450&stockCode=002812\\\n   &announcementId=1225304895&announcementTime=2026-05-14\" \\\n  --session detail\n```\n\n#### Step 5：点击\"公告下载\"按钮下载 PDF（✅ 已验证完整工作流）\n\n详情页渲染成功后，可见：\n- 公告名称（如\"恩捷股份\"）\n- 股票代码显示（如 \"002812\"）\n- **\"公告下载\"按钮**（`@e5`，文本 `<i class=\"iconfont icongonggaoxiazai\"></i> 公告下载`）\n- \"全屏\"链接\n\n点击公告下载按钮应能获取真实 PDF 地址或触发下载。\n\n**验证结果（2026-05-14 恩捷股份公告）：** 点击按钮后 PDF 自动保存到 `~/Downloads/恩捷股份：关于在自贡市投资建设锂电池隔离膜项目的公告.pdf`。文件为 PDF 1.7 格式，4页，137KB。可通过 `python3 -c \"import fitz; doc = fitz.open('path/to.pdf'); [print(page.get_text()) for page in doc]\"` 读取文字内容（需 `pip install pymupdf`）。\n\n```bash\n# 从PDF中提取文字（完整工作流）\nagent-browser click @e5 --session detail      # 点击公告下载\n# PDF 自动保存到 ~/Downloads/\nls -lh ~/Downloads/*.pdf\npython3 -c \"\nimport fitz\ndoc = fitz.open('~/Downloads/恩捷股份*.pdf')\nfor page in doc:\n    print(page.get_text())\n\"\n```\n\n### 备选：纯 API 拿公告文本\n\n不需要 PDF 原文，只需要标题+日期等元信息，直接用巨潮全文搜索 API：\n\n```bash\ncurl -s \"http://www.cninfo.com.cn/new/fulltextSearch/full\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -d \"searchkey=002812&pageNum=1&pageSize=20&sortName=pubdate&sortType=desc\"\n```\n\n返回 JSON 含 `announcementId`、`announcementTitle`、`announcementTime` 等。\n\n### 注意事项\n\n1. **Chrome 需要 --no-sandbox** — 服务器/Docker/VM 环境必须加此参数\n2. **CDN 资源** — 巨潮用阿里云 CDN，国内访问一般很快 (~0.3s)\n3. **announcementId 提取捷径** — 用 `get attr` 而非 `click`，避免页面跳转\n4. **session 管理** — 用 `--session` 参数隔离不同任务，完成后 `agent-browser close --session X` 清理\n5. **环境变量注入（代码补丁）** — Hermes 的 `tools/browser_tool.py`（browser_env 构造处，1477-1484行）已自动设置 `AGENT_BROWSER_EXECUTABLE_PATH` 和 `AGENT_BROWSER_ARGS`。补丁在下次 Hermes 会话重启后生效。**不支持 config.yaml 配置** — environment variables are injected directly into the subprocess env dict, not read from config.yaml.\n6. **PDF 直链有时限** — 巨潮的 PDF 下载链接通常只在当天有效，跨天会过期\n\nFile v1.7.0:references/eastmoney-limitations.md\n\n# EastMoney（东方财富）限流备忘\n\n## 当前状况\n\n服务器 IP `106.54.241.187` 已被 EastMoney 限制访问。症状：\n- AKShare 的 `stock_board_industry_name_em()` 等东财接口 → `RemoteDisconnected`\n- 直接 curl 东财 API → 空响应或 403\n- 巨潮资讯网 cninfo → 500 Internal Server Error（IP 被临时封禁）\n\n## 影响范围\n\n| 功能 | 受影响的 AKShare 接口 | 替代方案 |\n|:----|:--------------------|:--------|\n| 研报查询 | `stock_jsyjs_anal_em()` | 暂停使用 |\n| 公告 | `stock_zh_a_notice_report()` | 用 Tushare Pro `anns_d()` |\n| 板块排行 | `stock_board_industry_name_em()` | ✅ **同花顺官网抓取** `q.10jqka.com.cn/thshy/` |\n| 资金流向 | `stock_individual_fund_flow()` | 暂停使用 |\n| 个股行情 | `stock_zh_a_spot_em()` | ✅ TDX + 腾讯财经（不受限） |\n\n## 已验证的替代方案\n\n### 板块排行 → 同花顺 BeautifulSoup 抓取\n\n```python\nimport requests\nfrom bs4 import BeautifulSoup\n\nurl = 'https://q.10jqka.com.cn/thshy/'  # 行业板块\nresp = requests.get(url, timeout=15, headers={'User-Agent': 'Mozilla/5.0'})\nsoup = BeautifulSoup(resp.text, 'html.parser')\ntable = soup.find('table')\nrows = table.find_all('tr')\nheaders = [th.get_text(strip=True) for th in rows[0].find_all(['th','td'])]\ndata = []\nfor tr in rows[1:21]:\n    cells = [td.get_text(strip=True) for td in tr.find_all('td')]\n    data.append(dict(zip(headers, cells)))\n```\n\n### 公告 → Tushare Pro（仍有积分限制）\n\n```python\nimport tushare as ts\nimport tushare.pro.client as client\nclient.DataApi._DataApi__http_url = \"http://tushare.xyz\"\npro = ts.pro_api('token')\ndf = pro.anns_d(ts_code='600519.SH', limit=20)\n```\n\n## 限流规避策略\n\n如果被封后重启尝试：\n1. 请求间隔 **1-2秒/次**\n2. 轮换 User-Agent\n3. 使用代理池多 IP 轮换\n4. 本地缓存已下载数据，减少重复请求\n\n## 被封恢复时长\n\n- 东方财富: 通常几小时到 1 天自动恢复\n- 巨潮资讯网: 通常 1-2 天恢复\n\nFile v1.7.0:references/tdx-protocol-notes.md\n\n# 通达信 TDX 协议笔记\n\n## 市场代码映射\n\npytdx 中 market 参数：\n- `0` = 深圳（sz：00/30/20 开头）\n- `1` = 上海（sh：60/68 开头）\n\n```python\nfrom pytdx.hq import TdxHq_API\napi = TdxHq_API()\napi.connect('218.6.170.47', 7709, time_out=3)\n\n# 上海股票\ndata = api.get_security_quotes([(1, '600519')])  # 贵州茅台\n\n# 深圳股票\ndata = api.get_security_quotes([(0, '300750')])  # 宁德时代\n```\n\n## ⚠️ 限速策略（防封关键）\n\n通达信服务器对高频连接敏感——连接→断开→再连接的\"短连接风暴\"是 IP 被封的核心原因。\n\n### 1. 全局间隔 ≥0.5 秒 + Jitter\n\n```python\n_LAST_TDX_TIME = 0\n\ndef tdx_throttle():\n    global _LAST_TDX_TIME\n    elapsed = time.time() - _LAST_TDX_TIME\n    if elapsed < 0.5:\n        time.sleep(round(0.5 - elapsed + random.random() * 0.2, 3))\n    _LAST_TDX_TIME = time.time()\n```\n\n每个连接前强制等待，确保上一次调用结束到下一次开始之间有 ≥0.5 秒的间隔。加 0~0.2 秒随机 jitter 防止被反爬虫按模式识别。\n\n### 2. 服务器轮询（不固定打一个 IP）\n\n维护 4 台已验证的主站，用模运算轮询：\n\n```python\nTDX_HOSTS = [\n    ('218.6.170.47', 7709),   # 上证云成都电信一\n    ('123.125.108.14', 7709), # 上证云北京联通一\n    ('180.153.18.170', 7709), # 上海电信主站Z1\n    ('60.191.117.167', 7709), # 杭州电信主站J1\n]\n_TDX_HOST_IDX = 0\n\ndef tdx_connect():\n    global _TDX_HOST_IDX\n    tdx_throttle()\n    for _ in range(len(TDX_HOSTS)):\n        ip, port = TDX_HOSTS[_TDX_HOST_IDX % len(TDX_HOSTS)]\n        _TDX_HOST_IDX += 1\n        api = TdxHq_API()\n        try:\n            api.connect(ip, port, time_out=3)\n            return api\n        except:\n            try: api.disconnect()\n            except: pass\n    return None\n```\n\n轮询确保连续两次调用不会命中间一 IP，降低单台服务器的连接频率感知。\n\n### 3. 批量查询（替代循环查）\n\n**错误做法：** 每个股票/指数建一次连接循环查\n```python\n# ❌ 6次独立连接，高危！\nfor mkt, code in indices:\n    api = TdxHq_API()\n    api.connect(...)\n    q = api.get_security_quotes([(mkt, code)])  # 单次1个\n    api.disconnect()\n```\n\n**正确做法：** 把多个代码放在一个 `get_security_quotes()` 调用中\n```python\n# ✅ 1次连接查完所有，field by index\napi.connect(...)\ncodes = [(1, '000001'), (0, '399001'), (0, '399006'), (1, '000688'), (1, '000016'), (1, '000300')]\nquotes = api.get_security_quotes(codes)  # 一次查6个\napi.disconnect()\n# quotes[0] = 上证, quotes[1] = 深证 ...\n```\n\n**限制：** `get_security_quotes` 一次最多查约 80 只股票，超出需分批次。\n\n## 可用服务器列表\n\n```python\nfrom pytdx.config.hosts import hq_hosts\n# 按 (name, ip, port) 格式，共 104 个\n```\n\n手动维护列表（经过生产验证）：\n\n| 名称 | IP | 端口 | 已验证 |\n|------|----|:----:|:------:|\n| 上证云成都电信一 | 218.6.170.47 | 7709 | ✅ |\n| 上证云北京联通一 | 123.125.108.14 | 7709 | ✅ |\n| 上海电信主站Z1 | 180.153.18.170 | 7709 | ✅ |\n| 杭州电信主站J1 | 60.191.117.167 | 7709 | ✅ |\n\n> **经验：** 不同服务器返回的实时数据有微小差异（正常，不影响使用）。但某些服务器可能只支持特定市场（如只做沪市不做深市），轮询时自然跳过。\n\n## K线分类编码\n\n```python\ncat = {'daily':9, 'weekly':5, 'monthly':6, '60min':3, '30min':2, '15min':1, '5min':0}\nbars = api.get_security_bars(cat, market, code, start_offset, count)\n```\n\nK线查询相对较\"重\"（服务器端需要聚合计算），建议 K 线调用间隔 ≥1 秒，且不要超过 count=200。\n\n## 返回字段说明\n\n| 字段 | 说明 |\n|:----|:----|\n| `price` | 当前价 |\n| `last_close` | 昨收 |\n| `open/high/low` | 今开/最高/最低 |\n| `vol` | 成交量（手） |\n| `amount` | 成交额（元） |\n| `bid1-5` / `ask1-5` | 5档买卖价格 |\n| `bid_vol1-5` / `ask_vol1-5` | 5档买卖量（手） |\n| `servertime` | 服务器时间（约3-5秒延迟） |\n\n## 坑\n\n1. **不同服务器返回的数据可能不同**（部分服务器只支持特定市场）\n2. **连接超时**设 3 秒，否则卡住整个脚本\n3. **`get_security_quotes` 一次最多查约 80 只**，批量超限会静默截断\n4. 返回 `None` 不一定是对端关——可能是市场代码错了（最常见错误：沪市股票传了 market=0）\n5. **Python 多进程不共享全局 `_LAST_TDX_TIME`** — 如果多个进程同时调 TDX（如 cron + 手动），各自有各自的限速器，不会相互感知。解决方案是只让一个进程调 TDX（如 news_aggregator 的日报 cronjob），单独的 scrape 进程另外控制。\n6. **`pytdx` 有时会突然 hang** — 加 `time_out` 参数并在 `connect()` 外层套 try/except。如果连续 4 台都超时，说明网络或服务器端有问题，应放弃并降级到腾讯财经。\n7. **交易时间 vs 非交易时间** — 盘后 `price` 等于当日收盘价，`last_close` 等于前一日收盘价，数据仍然可用。\n\nFile v1.7.0:references/tdx-rate-limiting.md\n\n# TDX 通达信限速策略与反封指南\n\n## 背景\n\n通达信（TDX）使用 pytdx 库通过私有 TCP 协议直连通达信行情服务器。\n该协议无需 API Key，但过快或过多请求可能导致 IP 被封。\n\n## 限速架构（两层独立保护）\n\n### 第一层：china_stock.py（核心模块限速）\n\n所有 `china_stock.tdx_connect()` 调用自动触发限速：\n\n```python\n# 全局时间戳\n_LAST_TDX_TIME = 0\n\ndef tdx_throttle():\n    \"\"\"每次调用至少间隔0.5秒 + 随机抖动0~0.2秒\"\"\"\n    global _LAST_TDX_TIME\n    elapsed = time.time() - _LAST_TDX_TIME\n    if elapsed < 0.5:\n        time.sleep(round(0.5 - elapsed + random.random() * 0.2, 3))\n    _LAST_TDX_TIME = time.time()\n```\n\n### 第二层：news_aggregator.py（日报模块限速）\n\n独立限速器（与 china_stock 不共享全局状态，但日报场景只走这一个入口）：\n\n```python\n_TDX_LAST_CALL = 0\n\ndef _tdx_rate_limit():\n    global _TDX_LAST_CALL\n    elapsed = time.time() - _TDX_LAST_CALL\n    if elapsed < 0.5:\n        time.sleep(0.5 - elapsed)\n    _TDX_LAST_CALL = time.time()\n```\n\n## 服务器轮询策略\n\n4台服务器轮流使用，每次连接从不同的起点开始尝试：\n\n| # | 名称 | IP | 端口 |\n|---|------|:--:|:----:|\n| 1 | 上证云成都电信一 | 218.6.170.47 | 7709 |\n| 2 | 上证云北京联通一 | 123.125.108.14 | 7709 |\n| 3 | 上海电信主站Z1 | 180.153.18.170 | 7709 |\n| 4 | 杭州电信主站J1 | 60.191.117.167 | 7709 |\n\n轮询实现：全局 `_TDX_HOST_IDX` 自增后取模，每个连接尝试最多遍历全部4台服务器。\n\n## 批量查询优化（关键）\n\n### ❌ 旧方案（每次查询独立连接）\n\n```python\nfor name, mkt, code in indices_config:\n    d = get_index_close(code, mkt)   # 每次独立 connect→query→disconnect\n    time.sleep(0.2)\n# → 6次连接，对同一台服务器\n```\n\n### ✅ 新方案（一次连接批量查询）\n\n```python\ndef _get_index_closes_batch(indices):\n    \"\"\"一次 get_security_queries() 传所有codes\"\"\"\n    api.get_security_queries([(mkt, code) for _, mkt, code in indices])\n    # → 1次连接，查6个指数\n```\n\npytdx 的 `get_security_quotes()` 原生支持批量——传入 `[(market, code), ...]` 列表即可。\n\n## 速率对比\n\n| 场景 | 改造前 | 改造后 |\n|:----|:------|:------|\n| 每日早报（6指数） | 6次连接 × 0.2s间隔 = ~1.2秒 | 1次连接 × 0.5s限速 = ~0.5秒 |\n| 自选异动扫描（8股） | 8次连接 × 0.3s间隔 = ~2.4秒 | 8次连接 × 0.5s限速 + 0.3s = ~6.4秒 |\n\n注意：自选异动扫描虽然变慢了，但这是为了安全——宁可慢不要被封。\n\n## 被封后的恢复\n\n如果 IP 已被通达信临时封禁：\n1. 停止所有 TDX 请求至少 5-10 分钟\n2. 切换使用腾讯财经作为替代数据源（`tencent_quote()`）\n3. 恢复后检查限速策略是否严格执行\n\n## 与其他数据源的关系\n\n| 数据源 | 是否受限 | 容量 |\n|:------|:--------:|:----:|\n| 通达信(TDX) | 需限速，否则封IP | ~1次/0.5秒 |\n| 腾讯财经 | 公开API，无限制 | ~10次/秒 |\n| 同花顺iFinD | 每周1万条API配额 | 用完需等下周 |\n| 东方财富(EastMoney) | IP已被封禁 | — |\n\nFile v1.7.0:references/tonghuashun-headlines-api.md\n\n# 同花顺快讯 (Tonghuashun Headlines) API 参考\n\n## 端点\n\n```\nGET https://news.10jqka.com.cn/tapp/news/push/stock\nUser-Agent: Mozilla/5.0\n```\n\n## 响应结构 (2026-05 已验证)\n\n```json\n{\n  \"code\": \"200\",\n  \"msg\": \"成功\",\n  \"time\": \"1778742053\",\n  \"data\": {\n    \"list\": [\n      {\n        \"id\": \"4363571\",\n        \"seq\": \"676688293\",\n        \"title\": \"标题\",\n        \"digest\": \"摘要正文...\",\n        \"url\": \"https://news.10jqka.com.cn/20260514/c676688293.shtml\",\n        \"shareUrl\": \"https://news.10jqka.com.cn/tapp/news/share/676688293/\",\n        \"ctime\": 1778742017,\n        \"tag\": \"A股\",\n        \"stock\": [{\"name\":\"沪深300期指\",\"stockCode\":\"IF9999\"}]\n      }\n    ],\n    \"filter\": {\"...\": \"...\"},\n    \"total\": 20\n  }\n}\n```\n\n## 字段说明\n\n| JSON字段 | Python字段 | 说明 |\n|----------|-----------|------|\n| `data.list` | (数组) | **注意**：不是 `data` 直接是数组！需要 `data.get('list', [])` |\n| `.shareUrl` | 分享链接 | 字段名带大写 U (JavaScript camelCase) |\n| `.url` | 原始链接 | 完整URL |\n| `.ctime` | 时间戳(秒) | 需 `datetime.fromtimestamp()` 转换为可读时间 |\n| `.digest` | 摘要 | 非必需字段，有则提供 |\n| `.title` | 标题 | 必需字段 |\n\n## 历史变更记录\n\n- **2026-05之前**: `data` 直接是数组，可用 `resp.json().get('data', [])`\n- **2026-05 (当前)**: `data` 变为对象 `{\"list\":[...], \"filter\":..., \"total\": N}`，字段 `share_url` → `shareUrl`\n\n## Python 代码模板\n\n```python\ndef fetch_thailand_headlines():\n    try:\n        url = 'https://news.10jqka.com.cn/tapp/news/push/stock'\n        resp = requests.get(url, timeout=10, headers={'User-Agent':'Mozilla/5.0'})\n        if resp.status_code != 200:\n            return {'source':'同花顺快讯','error':f'HTTP {resp.status_code}'}\n        data = resp.json()\n        items = data.get('data', {}).get('list', [])\n        if not items:\n            return {'source':'同花顺快讯','error':'data.list为空'}\n        headlines = []\n        for item in items[:10]:\n            ts = item.get('ctime', '')\n            time_str = ''\n            if ts and str(ts).isdigit():\n                from datetime import datetime\n                time_str = datetime.fromtimestamp(int(ts)).strftime('%H:%M')\n            headlines.append({\n                'title': item.get('title',''),\n                'digest': item.get('digest',''),\n                'time': time_str,\n                'url': item.get('shareUrl', item.get('url','')),\n            })\n        return {'source':'同花顺快讯','headlines':headlines}\n    except Exception as e:\n        return {'source':'同花顺快讯','error':f'获取失败: {type(e).__name__}: {str(e)[:100]}'}\n```\n\n## 常见错误\n\n1. **`data`误判为数组**: 旧代码 `resp.json().get('data', [])` 取到的是 dict，对其做 `[:10]` 切片会抛 TypeError，被 `except:` 静默吞掉\n2. **字段名大小写**: `share_url` 不存在，正确字段是 `shareUrl`\n3. **时间戳未格式化**: `ctime` 是秒级 Unix 时间戳，直接输出不好看，需转为 `HH:MM` 格式\n4. **静默吞异常**: 不要用裸 `except:`，否则无法定位错误\n\nFile v1.7.0:skill-card.md\n\n## Description:\n\n中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[kekewater](https://clawhub.ai/user/kekewater)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and external users can use this skill to query China A-share market data, K-line history, announcements, research reports, sector rankings, topic signals, monitor alerts, and finance news summaries from multiple data sources. It is for data retrieval and analysis support, not order placement or trading execution.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Security evidence reports unsafe credential handling, including an embedded Tushare token.\n\nMitigation: Rotate or remove embedded tokens before use and provide credentials through user-controlled configuration or environment variables.\n\nRisk: Security evidence reports insecure transport through plaintext endpoints such as the custom Tushare endpoint and CNINFO HTTP where HTTPS may be available.\n\nMitigation: Prefer HTTPS endpoints when supported and review any plaintext data-source connections before use in trusted environments.\n\nRisk: Security evidence warns against running Chromium with --no-sandbox on trusted hosts.\n\nMitigation: Run browser-based PDF extraction only in an isolated environment or use a sandboxed browser configuration.\n\nRisk: Security evidence flags proxy or IP-rotation evasion guidance.\n\nMitigation: Follow data-provider terms and rate limits instead of using proxy rotation to bypass access controls.\n\nRisk: Security evidence says generated briefing images may be demo or static unless the data path is replaced with live verified sources.\n\nMitigation: Treat generated briefing images as illustrative until their inputs are connected to verified live data.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/kekewater/skills/china-stock-data)\n- [CNINFO API Reference](references/cninfo-api.md)\n- [CNINFO PDF Extraction Method](references/cninfo-pdf-extraction.md)\n- [EastMoney Limitations](references/eastmoney-limitations.md)\n- [TDX Protocol Notes](references/tdx-protocol-notes.md)\n- [TDX Rate Limiting](references/tdx-rate-limiting.md)\n- [Tonghuashun Headlines API](references/tonghuashun-headlines-api.md)\n- [Using Claude Code to Build a Stable A-share Data Source](https://mp.weixin.qq.com/s/wWIJOYwfmzQ5EEIZQbby0Q)\n- [A-share Data Platforms and Tools](https://mp.weixin.qq.com/s/SV2TGAppLlmhvQQYLWDRIw)\n- [Finance AI Tools](https://mp.weixin.qq.com/s/M5wRDr1sIoYXRzBDIl6sWA)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with shell commands and JSON responses from bundled Python scripts]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Some commands require network access, installed Python dependencies, configured provider credentials, or available upstream market-data services.]\n\n## Skill Version(s):\n\n1.7.0 (source: server release metadata; artifact frontmatter declares 2.0.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.7.0:requirements.txt\n\n# China Stock Data - Required Dependencies\n# Install: pip install -r requirements.txt\n\n# Core\nrequests>=2.28.0\nbeautifulsoup4>=4.11.0\nlxml>=4.9.0\n\n# Data processing\npandas>=2.0.0\nopenpyxl>=3.0.0\n\n# Stock data sources\npytdx>=1.74\nakshare>=1.14.0\n\n# Optional data sources (install as needed)\n# wencai>=0.3.0       # 同花顺问财语义搜索 (API Key required)\n# jqdatasdk>=2.8.0    # JQData聚宽量化数据 (account required)\n# rqdatac>=2.0.0      # RiceQuant米筐量化数据 (account required)\n# tushare>=1.12.0     # Tushare Pro综合数据 (token required)","readmeExcerpt":"Skill: China Stock Data Owner: kekewater Summary: 中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。 Tags: a-share:1.7.0, akshare:1.7.0, china-stock:1.7.0, finance:1.7.0, latest:1.7.0, stock:1.7.0, tdx:1.7.0, tencent:1.7.0 Version history: v1.7.0 | 2026-05-15T00:01:16.191Z | auto **Major update: v2.0.0 brings multi-source A-share dat","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"# 实时行情（自动选择最佳数据源）\n查一下 600519 的行情\n贵州茅台现在多少钱\n批量看 600519,300750,000001\n\n# K线数据\n看下 300750 最近30天K线\n宁德时代周K线\n\n# 研报与公告\n贵州茅台最近研报\n300750 最新公告\n\n# 资金流向\n茅台资金流向\n\n# 板块排行\n今天什么板块涨得好\n行业板块排行\n\n# 热点题材\n今天热点题材\n同花顺热点\n\n# 问财搜索（需配置Token）\n搜索：人形机器人 丝杠\n问财：华为概念 业绩预增"},{"language":"bash","snippet":"SCRIPT=scripts/china_stock.py\nPY=python3"},{"language":"bash","snippet":"# === 智能行情（自动降级）===\n$PY $SCRIPT quote 600519            # TDX → 腾讯 → iFinD自动降级（含PE/市值/换手率）\n$PY $SCRIPT tencent-quote 000001    # 腾讯财经行情（平安银行）\n\n# === 通达信（实时+盘口）===\n$PY $SCRIPT tdx-quote 600519        # 实时行情+5档买卖盘口\n$PY $SCRIPT tdx-kline 600519 daily  # K线 (daily/weekly/monthly/60min/30min/15min/5min)\n$PY $SCRIPT tdx-kline 300750 weekly # 周K\n$PY $SCRIPT tdx-kline 600519 60min  # 60分钟K线\n\n# === 腾讯财经（财务指标）===\n$PY $SCRIPT tencent-quote 000001    # PE/PB/市值/换手率\n$PY $SCRIPT tencent-batch 600519,300750,000001  # 批量查询\n\n# === 同花顺iFinD（需token）===\n$PY $SCRIPT ifind-quote 600519      # 专业行情（含PE/换手率/股息率/振幅）\n\n# === AKShare（研报/资金）===\n$PY $SCRIPT report 600519 10        # 最近10份研报\n$PY $SCRIPT moneyflow 600519 5      # 最近5天资金流向\n\n# === 公告查询（三级降级：巨潮CNINFO → Tushare Pro → AKShare）===\n$PY $SCRIPT announce 600519 20      # 最近20条公告（自动选最佳源）\n$PY $SCRIPT moneyflow 600519 5      # 最近5天资金流向\n\n# === 巨潮资讯网(CNINFO) 公告搜索 — 2026年新增首选公告源 ===\n$PY $SCRIPT announce 600519           # 自动降级: CNINFO → Tushare → AKShare\n$PY $SCRIPT tushare-ann 600519        # Tushare Pro公告（tushare.xyz自定义地址）\n\n# === 板块排行 & 热点 ===\n$PY $SCRIPT sector                  # 行业板块排行  TOP20\n$PY $SCRIPT themes                  # 热点题材（行业+概念）\n\n# === 问财语义搜索（需配置 WENCAI_TOKEN）===\n$PY $SCRIPT search 人形机器人 丝杠   # 自然语言选股\n\n# === Tushare Pro（公告数据当前可用）===\n$PY $SCRIPT tushare-ann 600519 20  # 最新20条公告\n\n# === JQData聚宽（需 export JQ_USER/JQ_PASS）===\n$PY $SCRIPT jq-financial 600519    # 财报指标数据\n$PY $SCRIPT jq-macro               # 宏观数据（GDP/CPI）\n\n# === Stock Monitor 股票监控 ===\nMON=~/.hermes/skills/financial/china-stock-data/scripts/stock_monitor.py\n$PY $MON check 600519              # 检查贵州茅台当前价格\n$PY $MON check 600519 1300 below   # 检查是否跌破1300\n$PY $MON watchlist                 # 自选股异动扫描\n$PY $MON watchlist 600519,300750,000001  # 指定列表异动\n\n# === News Aggregator 新闻简报 ===\nNEWS=~/.hermes/skills/financial/china-stock-data/scripts/news_aggregator.py\n$PY $NEWS daily                    # 当日金融简报（指数+头条）\n$PY $NEWS indices                  # 主要指数行情\n$PY $NEWS headlines        "},{"language":"text","snippet":"行情查询自动按顺序降级：\n  [1] 通达信(TDX) ── 5档盘口 + 实时行情\n  [2] 腾讯财经    ── 补充PE/市值/换手率（与TDX并行）\n  [3] 同花顺iFinD ── 专业级行情（需配置token）\n\n板块排行/热点：\n  [1] 同花顺官网  ── 实时行业/概念涨幅排行\n  [2] EastMoney   ── 被限流时自动切换同花顺"},{"language":"bash","snippet":"# 安装核心依赖\npip install -r requirements.txt\n\n# 或手动安装\npip install pytdx akshare beautifulsoup4 requests lxml pandas openpyxl\n\n# 可选：数据源增强（按需安装）\npip install jqdatasdk    # JQData聚宽量化数据（需账号）\npip install rqdatac      # RiceQuant米筐量化数据（需账号）\npip install tushare      # Tushare Pro综合数据（需token）\npip install wencai       # 同花顺问财语义搜索（需API Key）\n\n# 配置同花顺iFinD token（提升专业行情质量）\n# 编辑 ifind_config.json 并放在脚本同目录：\n# {\"access_token\": \"your_token\", \"refresh_token\": \"your_token\"}\n\n# 可选环境变量\nexport WENCAI_TOKEN=your_token   # 问财搜索\nexport JQ_USER=your_phone       # JQData账号\nexport JQ_PASS=your_password    # JQData密码\nexport RQ_USER=your_username    # RiceQuant账号\nexport RQ_PASS=your_password    # RiceQuant密码"},{"language":"text","snippet":"POST http://www.cninfo.com.cn/new/fulltextSearch/full\nContent-Type: application/x-www-form-urlencoded"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: china-stock-data\ndescription: 中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。\nversion: 2.0.0\nmetadata:\n  hermes:\n    tags: [stock, finance, a-share, china-stock, tdx, tencent, tonghuashun, akshare, wencai, monitor, news, cron]\n    related_skills: [tonghuashun, stock-announcement-analysis, us-stock-data]\n---\n\n# China Stock Data - 中国A股综合数据源\n\n## Overview\n\n本技能集成 **8大数据源 + 3大工具**，覆盖 A 股行情、K线、研报、公告、资金流向、板块排行、热点题材、语义搜索、量化指标、价格预警、每日简报等全场景。数据源自动降级，无需担心单点故障。\n\n| # | 数据源/工具 | 能力 | 状态 |\n|---|------------|------|------|\n| 1 | **通达信(TDX)** | 实时行情、5档盘口、K线(日/周/月/分钟)、逐笔成交 | ✅ 无需Key |\n| 2 | **腾讯财经** | PE、PB、市值、换手率、财务估值数据 | ✅ 公开API |\n| 3 | **同花顺(iFinD)** | 专业行情、股息率、热点题材、强势股归因 | ✅ 需配置token |\n| 4 | **AKShare** | 券商研报、公司公告、资金流向、补充数据 | ✅ 部分受限 |\n| 5 | **iWencai(问财)** | 自然语言选股、跨主题语义搜索 | ⚠️需API Key |\n| 6 | **JQData(聚宽)** | 量化指标、财报因子、宏观数据 | ✅ 需账号 |\n| 7 | **Tushare Pro** | 公告、日线、北向、两融、财报 | ✅ 需token |\n| 8 | **RiceQuant(米筐)** | 量化回测数据 | ✅ 需账号 |\n| 9 | **巨潮资讯网(CNINFO)** 🆕 | 公告全文搜索，覆盖深沪两市全部A股 | ✅ 公开API，无需Key |\n| 🔔 | **Stock Monitor** | 价格预警、自选异动检查、自动盯盘 | ✅ 内置 |\n| 📰 | **News Aggregator** | 每日金融简报、指数行情、头条汇总 | ✅ 内置 |\n\n**本文就是根据这些微信公众号文章搭建的：**\n- [用 Claude Code 搭建大A稳定数据源](https://mp.weixin.qq.com/s/wWIJOYwfmzQ5EEIZQbby0Q)\n- [A股数据平台及工具大全](https://mp.weixin.qq.com/s/SV2TGAppLlmhvQQYLWDRIw)\n- [金融AI工具10选](https://mp.weixin.qq.com/s/M5wRDr1sIoYXRzBDIl6sWA)\n选型逻辑：通达信+腾讯财经（行情）→ 东财+AKShare（研报）→ 同花顺（热点）→ iWencai（搜索）→ 聚宽/米筐（量化）→ Monitor+News（监控+简报）\n\n## When to Use\n\n自然语言输入即可查询：\n\n```\n# 实时行情（自动选择最佳数据源）\n查一下 600519 的行情\n贵州茅台现在多少钱\n批量看 600519,300750,000001\n\n# K线数据\n看下 300750 最近30天K线\n宁德时代周K线\n\n# 研报与公告\n贵州茅台最近研报\n300750 最新公告\n\n# 资金流向\n茅台资金流向\n\n# 板块排行\n今天什么板块涨得好\n行业板块排行\n\n# 热点题材\n今天热点题材\n同花顺热点\n\n# 问财搜索（需配置Token）\n搜索：人形机器人 丝杠\n问财：华为概念 业绩预增\n```\n\n**不要用于：**\n- 下单/交易操作（本技能仅提供数据查询）\n\n## How It Works\n\n所有查询通过 `scripts/china_stock.py` 统一执行。\n\n```bash\nSCRIPT=scripts/china_stock.py\nPY=python3\n```\n\n### 命令速查\n\n```bash\n# === 智能行情（自动降级）===\n$PY $SCRIPT quote 600519            # TDX → 腾讯 → iFinD自动降级（含PE/市值/换手率）\n$PY $SCRIPT tencent-quote 000001    # 腾讯财经行情（平安银行）\n\n# === 通达信（实时+盘口）===\n$PY $SCRIPT tdx-quote 600519        # 实时行情+5档买卖盘口\n$PY $SCRIPT tdx-kline 600519 daily  # K线 (daily/weekly/monthly/60min/30min/15min/5min)\n$PY $SCRIPT tdx-kline 300750 weekly # 周K\n$PY $SCRIPT tdx-kline 600519 60min  # 60分钟K线\n\n# === 腾讯财经（财务指标）===\n$PY $SCRIPT tencent-quote 000001    # PE/PB/市值/换手率\n$PY $SCRIPT tencent-batch 600519,300750,000001  # 批量查询\n\n# === 同花顺iFinD（需token）===\n$PY $SCRIPT ifind-quote 600519      # 专业行情（含PE/换手率/股息率/振幅）\n\n# === AKShare（研报/资金）===\n$PY $SCRIPT report 600519 10        # 最近10份研报\n$PY $SCRIPT moneyflow 600519 5      # 最近5天资金流向\n\n# === 公告查询（三级降级：巨潮CNINFO → Tushare Pro → AKShare）===\n$PY $SCRIPT announce 600519 20      # 最近20条公告（自动选最佳源）\n$PY $SCRIPT moneyflow 600519 5      # 最近5天资金流向\n\n# === 巨潮资讯网(CNINFO) 公告搜索 — 2026年新增首选公告源 ===\n$PY $SCRIPT announce 600519           # 自动降级: CNINFO → Tushare → AKShare\n$PY $SCRIPT tushare-ann 600519        # Tushare Pro"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7e3z8m5eaqj55549zxhxqct986qdxy\",\n  \"slug\": \"china-stock-data\",\n  \"version\": \"1.7.0\",\n  \"publishedAt\": 1778803276191\n}"},{"path":"references/cninfo-api.md","content":"# 巨潮资讯网 (CNINFO) API 参考\n\n巨潮资讯网 (cninfo.com.cn) 是中国证监会指定的上市公司信息披露网站，覆盖深交所(主板+创业板)、上交所(主板+科创板)全部A股公告。\n\n## 基础信息\n\n- **网站**: http://www.cninfo.com.cn\n- **状态**: 2026-05 可达 (HTTP 200, ~0.3s)\n- **限流**: 无明显限流，但建议 ≥1s/次\n\n## API 端点\n\n### 1. 全文搜索 (推荐 — 最通用)\n\n```\nPOST http://www.cninfo.com.cn/new/fulltextSearch/full\nContent-Type: application/x-www-form-urlencoded\n```\n\n**参数**:\n\n| 参数 | 说明 | 示例 |\n|------|------|------|\n| `searchkey` | 搜索关键词 (股票代码/名称/关键字) | `000001` |\n| `sdate` | 开始日期 (YYYY-MM-DD) | `2026-01-01` |\n| `edate` | 结束日期 | `2026-05-14` |\n| `isfulltext` | 是否全文搜索 | `false` |\n| `sortName` | 排序字段 | `pubdate` |\n| `sortType` | 排序方向 | `desc` |\n| `pageNum` | 页码 | `1` |\n| `pageSize` | 每页条数 | `20` |\n\n**响应字段**:\n\n| 字段 | 说明 |\n|------|------|\n| `announcements[]` | 公告列表 |\n| `.announcementId` | 公告ID (用于详情页) |\n| `.announcementTitle` | 标题 (含 `<em>` 高亮标签) |\n| `.announcementTime` | 时间戳(毫秒) |\n| `.adjunctUrl` | PDF路径 (相对路径) |\n| `.secCode` | 股票代码 |\n| `.secName` | 股票名称 |\n| `.orgId` | 机构ID (格式 `gssz0000001`) |\n\n**bash 示例**:\n\n```bash\ncurl -s \"http://www.cninfo.com.cn/new/fulltextSearch/full\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -H \"Content-Type: application/x-www-form-urlencoded\" \\\n  -d \"searchkey=000001&pageNum=1&pageSize=5&sortName=pubdate&sortType=desc\"\n```\n\n### 2. 全市场最新公告\n\n```\nPOST http://www.cninfo.com.cn/new/hisAnnouncement/query\nContent-Type: application/x-www-form-urlencoded\n```\n\n| 参数 | 说明 | 可选值 |\n|------|------|--------|\n| `column` | 板块 | `szse` (深交所) — **当前唯一有效的值** |\n| `plate` | 板块代码 | `sze` |\n| `tabName` | 标签 | `fulltext` |\n| `stockType` | 股票类型 | `stock` |\n| `pageNum` | 页码 | `1` |\n| `pageSize` | 每页条数 | `10` |\n| `seDate` | 日期范围 | `2026-05-12~2026-05-14` |\n\n**注意**: `stock=000001,sze` 参数**已失效** (返回0条)。个股查询请用全文搜索API。`column=shse`(沪市)/`column=gem`(创业板) 等**均失效**。\n\n### 3. 公告详情页\n\n```\nGET http://www.cninfo.com.cn/new/disclosure/detail\n  ?stockCode=000001\n  &announcementId=1225188743\n  &orgId=gssz0000001\n```\n\n返回HTML页面，含公告全文。\n\n### 4. PDF下载 (旧格式 — 已失效)\n\n```\nGET http://www.cninfo.com.cn/finalpage/2026-04-25/1225188743.PDF\n```\n返回 **HTTP 404**。建议通过 iFinD HTTP API (如有token) 或从详情页提取正文。\n\n## 与 iFinD / Tushare Pro 对比\n\n| 能力 | CNINFO | iFinD HTTP | Tushare Pro |\n|------|--------|------------|-------------|\n| 关键词搜索 | 灵活 | 需精确条件 | 需精确条件 |\n| 全文PDF | 404 | 可下载 | 仅链接 |\n| 公告正文 | 详情页HTML | 可配 | 无 |\n| 限流风险 | 极低 | 周配额1万条 | 积分制 |\n| 无需Key | 是 | 需token | 需token |\n\n## 历史变更\n\n- **2026-05**: `stock=xxx` 个股查询参数失效；`column=shse/gem` 等失效；PDF直链404；全文搜索API仍然稳定可用。"},{"path":"references/cninfo-pdf-extraction.md","content":"# CNINFO (巨潮资讯网) PDF 提取方法\n\n## 问题\n\n巨潮公告详情页中的 PDF 地址是 **动态生成 + 有时限** 的。直接构造 URL（如 `https://disc.static.szse.cn/download/...`）返回 404。通过静态 curl 抓取 HTML 也拿不到真实 PDF 链接（页面纯 JS 渲染）。\n\n## 解决方案：用 Hermes browser 工具\n\nHermes 内置的 browser 工具（agent-browser 驱动）可以打开 JS 渲染的页面，与页面交互，获取真实下载链接。\n\n### 前置条件：配置 Chrome\n\n在 **国内服务器 / 无图形界面环境** 中：\n\n#### ✅ 方案 A：复用 Playwright 已装的 Chrome（推荐，零下载）\n\n```bash\n# 检查是否存在\nls ~/.cache/ms-playwright/chromium-*/chrome-linux64/chrome\n\n# 设置环境变量（已注入 browser_tool.py，下次会话自动生效）\nexport AGENT_BROWSER_EXECUTABLE_PATH=~/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome\nexport AGENT_BROWSER_ARGS=\"--no-sandbox\"\n```\n\n**Hermes 补丁状态：** `browser_tool.py` 第1477-1484行已注入这两个环境变量。**需要重启 Hermes 会话才能生效**（当前会话已加载的旧代码不会看到补丁）。\n\n#### ❌ 方案 B：agent-browser install（不推荐）\n\n通过代理下载 Chrome 175MB，Vultr代理约需5-10分钟，且经常超时中断。**不推荐使用。**\n\n### 已验证的操作流程\n\n#### Step 1：打开公告列表页\n\n```bash\nexport AGENT_BROWSER_EXECUTABLE_PATH=~/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome\nexport AGENT_BROWSER_ARGS=\"--no-sandbox\"\n\nagent-browser open \\\n  \"https://www.cninfo.com.cn/new/disclosure/stock?stockCode=002812&orgId=9900023446\" \\\n  --session target\n```\n\n#### Step 2：等待页面加载并截图\n\n```bash\nagent-browser wait --load networkidle --session target\nsleep 3  # 等JS渲染完成\nagent-browser snapshot -i -c --session target\n```\n\n页面渲染后能看到完整的公告列表（含标题+日期），通过 `@eN` ref 定位目标公告。\n\n#### Step 3：提取 announcementId（✅ 已验证可行）\n\n用 `get attr` 直接拿公告链接的 `href`，无需点击跳转：\n\n```bash\nagent-browser get attr @eN href --session target\n# 返回示例:\n# /new/disclosure/detail?plate=szse&orgId=9900026450&stockCode=002812\n#   &announcementId=1225304895&announcementTime=2026-05-14\n```\n\n**关键参数：** `announcementId=1225304895`\n\n#### Step 4：打开详情页（✅ 已验证可行）\n\n```bash\nagent-browser open \\\n  \"https://www.cninfo.com.cn/new/disclosure/detail?plate=szse\\\n   &orgId=9900026450&stockCode=002812\\\n   &announcementId=1225304895&announcementTime=2026-05-14\" \\\n  --session detail\n```\n\n#### Step 5：点击\"公告下载\"按钮下载 PDF（✅ 已验证完整工作流）\n\n详情页渲染成功后，可见：\n- 公告名称（如\"恩捷股份\"）\n- 股票代码显示（如 \"002812\"）\n- **\"公告下载\"按钮**（`@e5`，文本 `<i class=\"iconfont icongonggaoxiazai\"></i> 公告下载`）\n- \"全屏\"链接\n\n点击公告下载按钮应能获取真实 PDF 地址或触发下载。\n\n**验证结果（2026-05-14 恩捷股份公告）：** 点击按钮后 PDF 自动保存到 `~/Downloads/恩捷股份：关于在自贡市投资建设锂电池隔离膜项目的公告.pdf`。文件为 PDF 1.7 格式，4页，137KB。可通过 `python3 -c \"import fitz; doc = fitz.open('path/to.pdf'); [print(page.get_text()) for page in doc]\"` 读取文字内容（需 `pip install pymupdf`）。\n\n```bash\n# 从PDF中提取文字（完整工作流）\nagent-browser click @e5 --session detail      # 点击公告下载\n# PDF 自动保存到 ~/Downloads/\nls -lh ~/Downloads/*.pdf\npython3 -c \"\nimport fitz\ndoc = fitz.open('~/Downloads/恩捷股份*.pdf')\nfor page in doc:\n    print(page.get_text())\n\"\n```\n\n### 备选：纯 API 拿公告文本\n\n不需要 PDF 原文，只需要标题+日期等元信息，直接用巨潮全文搜索 API：\n\n```bash\ncurl -s \"http://www.cninfo.com.cn/new/fulltextSearch/full\" \\\n  -H \"User-Agent: Mozilla/5.0\" \\\n  -d \"searchkey=002812&pageNum=1&pageSize=20&sortName=pubdate&sortType=desc\"\n```\n\n返回 JSON 含 `announcementId`、`announcementTitle`、`announcementTime` 等。\n\n### 注意事项\n\n1. **Chrome 需要 --no-sandbox** — 服务器/Docker/VM 环境必须加此参数\n2. **CDN 资源** — 巨"},{"path":"references/eastmoney-limitations.md","content":"# EastMoney（东方财富）限流备忘\n\n## 当前状况\n\n服务器 IP `106.54.241.187` 已被 EastMoney 限制访问。症状：\n- AKShare 的 `stock_board_industry_name_em()` 等东财接口 → `RemoteDisconnected`\n- 直接 curl 东财 API → 空响应或 403\n- 巨潮资讯网 cninfo → 500 Internal Server Error（IP 被临时封禁）\n\n## 影响范围\n\n| 功能 | 受影响的 AKShare 接口 | 替代方案 |\n|:----|:--------------------|:--------|\n| 研报查询 | `stock_jsyjs_anal_em()` | 暂停使用 |\n| 公告 | `stock_zh_a_notice_report()` | 用 Tushare Pro `anns_d()` |\n| 板块排行 | `stock_board_industry_name_em()` | ✅ **同花顺官网抓取** `q.10jqka.com.cn/thshy/` |\n| 资金流向 | `stock_individual_fund_flow()` | 暂停使用 |\n| 个股行情 | `stock_zh_a_spot_em()` | ✅ TDX + 腾讯财经（不受限） |\n\n## 已验证的替代方案\n\n### 板块排行 → 同花顺 BeautifulSoup 抓取\n\n```python\nimport requests\nfrom bs4 import BeautifulSoup\n\nurl = 'https://q.10jqka.com.cn/thshy/'  # 行业板块\nresp = requests.get(url, timeout=15, headers={'User-Agent': 'Mozilla/5.0'})\nsoup = BeautifulSoup(resp.text, 'html.parser')\ntable = soup.find('table')\nrows = table.find_all('tr')\nheaders = [th.get_text(strip=True) for th in rows[0].find_all(['th','td'])]\ndata = []\nfor tr in rows[1:21]:\n    cells = [td.get_text(strip=True) for td in tr.find_all('td')]\n    data.append(dict(zip(headers, cells)))\n```\n\n### 公告 → Tushare Pro（仍有积分限制）\n\n```python\nimport tushare as ts\nimport tushare.pro.client as client\nclient.DataApi._DataApi__http_url = \"http://tushare.xyz\"\npro = ts.pro_api('token')\ndf = pro.anns_d(ts_code='600519.SH', limit=20)\n```\n\n## 限流规避策略\n\n如果被封后重启尝试：\n1. 请求间隔 **1-2秒/次**\n2. 轮换 User-Agent\n3. 使用代理池多 IP 轮换\n4. 本地缓存已下载数据，减少重复请求\n\n## 被封恢复时长\n\n- 东方财富: 通常几小时到 1 天自动恢复\n- 巨潮资讯网: 通常 1-2 天恢复"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。 Skill: China Stock Data Owner: kekewater Summary: 中国A股综合数据源技能。集成通达信(TDX)实时行情+5档盘口+K线、腾讯财经PE/PB/市值/换手率、同花顺iFinD/热点、AKShare研报/公告、iWencai问财搜索、JQData聚宽量化、Tushare Pro公告、RiceQuant米筐。8大来源自动降级。 Tags: a-share:1.7.0, akshare:1.7.0, china-stock:1.7.0, finance:1.7.0, latest:1.7.0, stock:1.7.0, tdx:1.7.0, tencent:1.7.0 Version history: v1.7.0 | 2026-05-15T00:01:16.191Z | auto **Major update: v2.0.0 brings multi-source A-share dat","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":867,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:44:57.319Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T07:44:57.319Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T10:52:26.822Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}