392 lines
30 KiB
Markdown
392 lines
30 KiB
Markdown
---
|
|
name: lottery-hk
|
|
description: "香港六合开奖抓取与分析 (user B1EF5044 偏好, 文化娱乐参考不构成投注建议)。数据源: sol.2344a.cc + btc.tktk.app/data/v_xg.json + marksix6.com (真开彩验证, browser 渲染)。**v_xg.json `Data.1-7` = Qi 期真开彩 (2026-08-04 marksix6.com 验证), 是 cron no_agent 模式下唯一可用的真开彩源**。**触发规则 (硬性)**: 用户问'特码'/'买码'/'今晚开什么'/'下期开什么'/'分析'/'玄学'/'六合分析' → **必须调 `python3 scripts/lottery_特码.py [期号]`** (纯挂牌 + 玄机诗 + 红字, 输出 Top 5 特码 + 重点金额分配)。**禁止**: (1) 跑 `lottery.py analyze` (5 期数据没意义, user 已确认); (2) 编造 (Data.1-7 = Qi 期真开彩号码); (3) agent 自己写 4 框架 (河洛/梅花/玄空/奇门) 公式; (4) 编 4 框架数据; (5) 访问 hkjc.com (被所有外部 browser agent 拦, 详见 references/hkjc-com-blocked.md); (6) 用 Qi 跑特码分析 (用户问的是 Nq 未开下期, 2026-08-13 怒纠); (7) 候选表'来源'列用硬编码字典 (必须用 src_tracker 动态抓取, 2026-08-13 修过)。**v_xg.json 字段 (2026-08-04 第 4 次修正)**: Qi=最新已开期号, Nq=未开下期, Week/Day=Nq 期开彩日, Data.1-7=Qi 期真开彩号码。时区: 默认北京时间 UTC+8, 挂牌日=开彩日。推送格式: 横向 markdown 表格 (4-8 列, QQ 可左右滑动), 必须标 (北京时间), 不写刚开/最新, 不加 A/B/C 简单回答模板。用户问'从哪取'只答来源一行不展开。详见 references/v_xg-data-qi-pitfall.md + references/cron-draw-result-flow.md。"
|
|
version: 1.5.0
|
|
# 2026-08-30 v1.5.0: hot-data cron 加"上期开奖回顾"段 (在分析前推 Qi 期真开 + Top 5 + 特码命中判定); 用户硬偏好 #12 = 只看特码命中, 不要平码命中
|
|
# 2026-08-20 v1.4.0: 候选 <4 兜底实装 (挂牌抓 3→8 + 火烧/六肖解码 + format_te_ma_result 显式补 5); cron wrapper Qi→Nq 二次修正; verify_lottery schedule 14:30→22:30 (开彩后 1h)
|
|
tags: [lottery, hk, 六合彩, analysis, sol-2344a, marksix6, qdrant-memory, v_xg-json, cron-no-agent]
|
|
---
|
|
|
|
# 香港六合开奖分析
|
|
|
|
**⏰ 时区规则(硬规则)**: 所有时间默认 **北京时间(UTC+8)**。v_xg.json 的 `Qi`=最新已开, `Nq`=未开下期, `Week`/`Day` 是 **Nq 期(未开下期)** 的开彩日。**挂牌日 = 开彩日 (sol.2344a.cc 帖子时间戳 = 实际开奖日, 同天)**。
|
|
|
|
**🚨 用户硬偏好 (每次回复前必读, 违反必被纠正)**:
|
|
1. **直接说从哪取的, 不要分析/解释** — 答"082 是周几" → 一行答 "sol.2344a.cc 082 期挂牌 07-30 = 周四开彩 (北京时间 21:30)", **不展开** "为什么不是周三"。
|
|
2. **错了立刻重做, 不要"分析"或"等回话"** — 用户原话: "知道错了, 还要来确认, 你直接跑不行吗"。立刻跑正确的事。
|
|
3. **不要在回复结尾加 "A/B/C 简单回答" 模板** — 用户问 "这是什么技能输出的?" 才意识到是 agent 自加的模板, **没有任何 skill 输出这个**。直接回答用户问题。
|
|
4. **看到"4 框架"不要自己造公式** — "4 框架" 指 `references/analysis-example-073/074/075.md` 里 3 步推演流程 (v_xg.json + 挂牌 + 红字), **不是** agent 自己写 河洛/梅花/玄空/奇门 公式。**必跑** `python3 scripts/lottery_4frame.py`。
|
|
5. **"特码分析" 必跑真脚本** — 看到 "特码"/"买码"/"今晚开什么" → **必跑** `python3 scripts/lottery_特码.py [期号]`。
|
|
6. **不要在回复里算时间** — agent 默认时间不准 (system prompt 时间可能旧), 要实时用 `date` 命令确认北京时间。
|
|
7. **不要去 hkjc.com 找真开彩** (详见 references/hkjc-com-blocked.md): hkjc.com 拦所有外部 browser agent (Browserbase / bet.hkjc.com / racing.hkjc.com / fonts.googleapis.com 卡 30s+ timeout)。**marksix6.com 只在 agent 模式用 browser**; **no_agent 模式用 v_xg.json `Data.1-7`** (curl + UA)。
|
|
8. **分析推送用 Nq (未开下期), 不是 Qi (已开)** — 用户问"特码"是问"下期买什么", 跑 Qi 期等于把历史当预测。2026-08-13 用户反馈"你这前面写的期数是已开的,分析的数据也是已开的?我只要你分析未开的啊"。**硬规则**: `lottery_特码.py` 和 `lottery_特码_cron.sh` runtime 路径全用 `v_xg.json['Nq']`, 不要 Qi。详见 `references/cron-default-qi-vs-nq-pitfall.md`。
|
|
9. **候选表「来源」列必须用真实抓取源, 禁止硬编码字典** — 2026-08-13 反馈 "分析资料来源怎么没了?", 根因 = `format_te_ma_result` 用了 8 个号码的硬编码 `src_map` 字典, 其他号码 fallback "其他挂牌提示" 抹掉了真实抓取源。**修法**: `get_te_ma_candidates` 内部 `src_tracker = defaultdict(list)` 同步记录, `format_te_ma_result` 优先用 `src_tracker`, 硬编码字典删除。详见 `references/candidate-source-tracker-pitfall.md`。
|
|
10. **📌 规则/陷阱要写到「一定会被读」的位置** — 用户原话 "你写到一个一定能生效的地方, 不要又写到一个可读可不读的地方了" (2026-08-13)。**可读可不读的位置 = 没用** (如 `references/*.md` 单文件)。
|
|
- **最生效的位置 (按优先级)**:
|
|
1. **SKILL.md 顶部「硬规则」/「硬偏好」区** (每次加载必读)
|
|
2. **脚本顶部 docstring** (改这个脚本的人必读)
|
|
3. **CLI main 入口紧贴代码的注释** (改默认期号/参数必读)
|
|
4. **cron wrapper 顶部 4 行注释** (改 cron 必读)
|
|
5. `references/*.md` 单文件 — 只在以上 4 处都写完后, **作为详细案例** 补充, 不作为唯一落点
|
|
- 写完硬规则后必须**验证它在 runtime 路径里生效** (跑一遍脚本看输出)
|
|
11. **开奖后流程 (2026-08-13)**: `draws` 表入库**只有手填命令** `python3 scripts/lottery_特码.py add <period> <special> <n1..n6>` 和 **verify_lottery.sh 自动调 add** (v_xg.json 拿得到时), 没有从 marksix6.com 抓真开的独立脚本。详见 `references/draws-table-manual-add-pitfall.md` + `references/cron-draw-result-flow.md`。
|
|
12. **🎯 命中判定只看特码, 不要平码命中 (2026-08-30)**: 用户原话"只要特码命中的"。lottery_特码_cron.sh (hot-data 推送) 加的"上期开奖回顾"段**只输出特码命中 ✅/❌**, 不输出"平码命中 N1/N2", 不要自行扩展。这是用户**显式偏好**, 不需要他再说一次。verify_lottery.sh 仍可输出平码命中 (那是22:30 核验报告, 性质不同)。
|
|
|
|
**⏰ 沟通风格**: 用户要"直接说怎么取的,不要分析/解释"。回答"081 是周几"时,直接说"来源是 v_xg.json Week=周四" — 不分析"为什么不是周二"。
|
|
|
|
**🚨 硬规则 (每次推送前自检, 2026-08-04 marksix6.com 验证)**:
|
|
1. **时区**: 所有时间默认 **北京时间 (UTC+8)**, 必须标"(北京时间)"后缀
|
|
2. **挂牌日 = 开彩日** (硬规则): sol.2344a.cc 挂牌帖时间戳 = 实际开奖日,**同天**。旧描述"挂牌提前 2-3 天"是错的。
|
|
3. **v_xg.json 字段语义 (2026-08-04 第 4 次修正, marksix6.com 验证)**:
|
|
- **`Qi` = 最新已开期号** (刚开)
|
|
- **`Nq` = 未开下期期号** (下一个)
|
|
- **`Week`/`Day`/`Year`/`Moon` = Nq 期开彩日** (北京时间)
|
|
- **`Data.1-7` = Qi 期真开彩号码** (7 个 + 5 行字段 sx/nim/color/style/number)
|
|
- 取 Qi 期开彩日: Nq 期开彩日 - 1 个开彩日 (周二/四/六规律), 或查 sol.2344a.cc 挂牌帖
|
|
4. **🔥 cron 自动期号必须是 `Nq` (未开下期), 不是 `Qi` (已开)**: `lottery_特码_cron.sh` + `lottery_特码.py` 默认期号 = `v_xg.json Nq`。**用 Qi = 已开期, 分析完全错位** (2026-08-13 修过, 写死错误: Qi→Nq, fallback '082'→'088')。
|
|
5. **推送格式**: 不写"刚开"/"最新" — 用具体期号+明确日期
|
|
6. **沟通**: 用户要直接说数据来源,不要长篇分析
|
|
7. **4 框架分析**: **直接调 `python3 scripts/lottery_4frame.py`**(4 步流程: v_xg.json + 综合挂牌 + 六信红字 + 玄机诗),**不要 agent 自己造公式**。
|
|
8. **Cron 模式**: 用 `no_agent: true` + 真脚本 (`lottery_特码_cron.sh` / `verify_lottery.sh`), 不要 agent 模式 (会编)。
|
|
9. **来源映射必须动态 (2026-08-13 修过)**: 候选表的"来源"列必须用 `src_tracker` (实际抓取), **禁止**用硬编码字典 `src_map = {3:'...', 13:'...'}`。号码无 src 时才 fallback "其他挂牌提示"。
|
|
10. **📌 用户硬偏好 (2026-08-13 沉淀)**: 规则要写到"一定会被读"的位置 (见上面用户硬偏好 10)。
|
|
11. **开奖后流程 (2026-08-13)**: 见上面用户硬偏好 11。
|
|
12. **🎯 候选数 ≥ 4 (2026-08-20 实装)**: 见用户硬偏好 12。
|
|
12. **🎯 候选数 ≥ 4 (2026-08-20 实装)**: 用户原话"可以4-5个号合适"。**实装三改一起**: (a) `gua_links[:3] → [:8]` 多抓挂牌; (b) 火烧/六肖 解码本年生肖号 (火烧+2, 六肖/出肖各生肖+1); (c) `format_te_ma_result` 候选 <4 时 `top.append((n, 0))` 显式补到 5, 来源标"兜底占位 (挂牌稀疏)"。**已验证 Nq=091 期输出 8 候选, 重点分配 5 个 ¥15=5/4/3/2/1** (详见 `references/2026-08-20-candidate-sparsity-diagnosis.md`)。如果用户说"不要兜底" → 删 `if len(top) < 4` 块, 保留 (a)(b) 改进。
|
|
|
|
**📦 4 框架 (奇门/梅花/河洛/玄空) 的位置**:
|
|
- **真脚本**: `scripts/lottery_4frame.py` (4 步流程, 自动跑)
|
|
- **Reference**: `references/analysis-example-073/074/075.md` (073 真实推演示范: 3 步 v_xg+挂牌+红字)
|
|
- **不要**: agent 写 河洛/梅花/玄空/奇门 公式, reference 没推演方法, 拍脑袋推的没意义
|
|
|
|
**5 期数据 (analyze 频率) 没意义**: `lottery.py analyze` 输出 5 期冷热号,数据量太少,user 已明确说"不要跑频率,没有意义"。`analyze` 只用作辅助核对,不是主要分析方法。
|
|
|
|
从天空彩票抓取香港六合开奖结果,提供数据分析。**数据存SQLite,不存图片。**
|
|
|
|
## 数据源
|
|
|
|
### 主站 (挂牌/资料)
|
|
- **资料站**: `https://sol.2344a.cc/` (2026-07-29 迁移自 sol.0051.cc)
|
|
- 综合挂牌: `https://sol.2344a.cc/zongheguapai/` ← 首选挂牌数据源
|
|
- 六信红字: `https://sol.2344a.cc/lxhz/`
|
|
- 梅花诗/玄机: `https://sol.2344a.cc/xuanjiziliao/`
|
|
- 解牌: `https://sol.2344a.cc/jiepai/`
|
|
- 平碼平肖: `https://sol.2344a.cc/pingxiaopingma/`
|
|
|
|
### 真开彩验证源 (按 cron 模式分流, 2026-08-13)
|
|
|
|
| 源 | 模式 | 端点 | 备注 |
|
|
|---|---|---|---|
|
|
| **v_xg.json `Data.1-7`** | **no_agent + script (cron 主用)** | `curl -A "Mozilla/5.0" v_xg.json` | Qi 期真开彩, 跟 marksix6.com 验证一致; **必须带 UA, 裸 curl 返 403** |
|
|
| **marksix6.com** | **agent 模式 (browser 渲染)** | `browser_navigate` + `browser_snapshot` | Vue SSR 包装页, curl 拿不到; no_agent 拿不到 |
|
|
| **hkjc.com** | ❌ 拦所有外部 browser agent | `bet.hkjc.com/ch/marksix/results` | 全堵, 详见 `references/hkjc-com-blocked.md` |
|
|
|
|
**关键决策 (2026-08-13)**: cron 核验脚本 (`verify_lottery.sh`) **不再依赖 marksix6.com browser** (no_agent 拿不到), **统一走 v_xg.json curl + UA**。这是 no_agent 模式下唯一可用的真开彩源。详见 `references/cron-draw-result-flow.md`。
|
|
|
|
### 当前开奖 JSON API
|
|
- **v_xg.json**: `https://btc.tktk.app/data/v_xg.json` (直接 JSON, 无需 browser)
|
|
- **字段语义 (2026-08-04 第 4 次修正, marksix6.com 验证)**:
|
|
- `Qi` = 最新已开期号 (刚开) — 例 Qi=083 = 083 期 8/1 周六已开
|
|
- `Nq` = 未开下期期号 — 例 Nq=084 = 084 期 8/4 周二未开
|
|
- `Week`/`Day` = Nq 期开彩日 — 例 Week=周二 Day=04 = 084 期 8/4 周二
|
|
- **`Data.1-7` = Qi 期真开彩号码** (Qi 期=刚开期, Data 显示 Qi 期真开, 不是 Qi-1 也不是 Qi-2)
|
|
- **sol.2344a.cc 历史 API**: `/e/api/api.php?get=sixlist&year=YYYY` 仍返回空
|
|
- ⚠️ **v_xg.json DB 故障**: 偶发 "Cann't connect to DB!" 200 OK 但返回空文本 (2026-08-02 出现, 2026-08-13 重现), 脚本必须校验返回是有效 JSON
|
|
|
|
### 开奖时间
|
|
- 每周二、四、六 21:30 (北京时间)
|
|
- 49 个号码, 6 个平码 + 1 个特码
|
|
|
|
### tktk API 架构 (从 public.js 逆向)
|
|
URL 模式: `https://btc.tktk.app/data/v_{cod}.json?{timestamp}`
|
|
|
|
| cod | 彩种 | 说明 |
|
|
|-----|------|------|
|
|
| xg | 香港六合 | 每周二/四/六 21:30 |
|
|
| 48am | 天天澳门彩 | 每天 22:14-22:40 |
|
|
| am | 新澳门六合 | 每天 21:14-21:40 |
|
|
| tw | 台湾六合 | 每天 20:28-20:58 |
|
|
| xjp | 新加坡六合 | 每天 18:35-18:55 |
|
|
| fckl8 | 快乐8 | 每天 21:25-21:40 |
|
|
|
|
### ⚠️ v_xg.json Data 字段格式 (重要)
|
|
- Data.1 - Data.6: 平码, Data.7: 特码
|
|
- 每个号码含 5 个字段: `nim`(五行) / `sx`(生肖) / `color`(波色) / `style`(red) / `number`(数字)
|
|
- **Data.1-7 = Qi 期真开彩** (Qi 期就是 Data 显示的期, 不是更早)
|
|
|
|
## 数据存储
|
|
|
|
**SQLite 数据库**: `~/.hermes/trading/lottery.db`
|
|
|
|
- `draws` 表: 开奖记录 (期号、日期、6 个号码+特码、生肖、五行、波色)
|
|
- `cold_data` 表: 冷数据 (key-value, 网页文本内容)
|
|
- `image_links` 表: 图片链接 (类别、标题、URL、期号, 不下载图片)
|
|
- **`analysis` 表 (2026-08-04 新增)**: 每次分析入库 (id, period, candidates JSON, budget, v_xg_qi/nq/week/day, actual_special, hit, created_at)
|
|
- 用 `lottery_特码.py add <period> <special> [n1 n2 n3 n4 n5 n6]` 手填真开
|
|
- `check_hits()` 自动对比 draws 表 actual_special → 更新 hit=1/0
|
|
- `list` CLI 看历史 (含 hit 状态)
|
|
- **不存图片文件**
|
|
|
|
## 脚本用法
|
|
|
|
### lottery_特码.py (主要)
|
|
```bash
|
|
python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py [期号]
|
|
# 跑分析, 动态取 Qi/Week/Day (不写死)
|
|
# 入库 SQLite analysis 表
|
|
# **默认无参 = 自动取 v_xg.json Nq 期 (未开下期, 要预测的那期)** — 2026-08-13 修正, 之前错取 Qi(已开)
|
|
|
|
python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py add 083 23 37 7 16 1 32 22
|
|
# 手填真开: <period> <special> [n1..n6] → INSERT draws + reset 该 period analysis.actual_special + check_hits
|
|
|
|
python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py list [N]
|
|
# 列出最近 N 条 analysis (id, period, Top 5, ¥, v_xg, 真开, hit, 时间)
|
|
|
|
python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py hits
|
|
# 单独跑 check_hits
|
|
```
|
|
|
|
### lottery_特码_cron.sh (cron wrapper, 11:30 北京, 2026-08-30 加"上期开奖回顾"段)
|
|
```bash
|
|
# 流程 (2026-08-30 加):
|
|
# 1. 取 v_xg.json Nq (本期未开下期, 用于分析) + Qi (上期已开, 用于回顾)
|
|
# 2. 从 lottery.db draws 表读 Qi 期开奖结果 (7 个号码), 缺失则 fallback v_xg.json
|
|
# 3. 从 ~/.hermes/cron/output/5bec1f60f77f/*.md 读 Qi 期 Top 5 候选 (用 🥇🥈🥉 锚定, 避免抓到日期/年份)
|
|
# 4. 输出"上期开奖回顾"段: 平码 + 特码 + 预测 Top 5 + **特码命中判定** ✅/❌ (只看特码, 不判平码)
|
|
# 5. 跑 lottery_特码.py Nq 跑本期分析
|
|
# 详细 docstring 见脚本顶部
|
|
```
|
|
|
|
### verify_lottery.sh (cron wrapper, 22:30 北京, 2026-08-13 新建)
|
|
```bash
|
|
# 核验当前期预测 vs 实际开奖, 记录命中率
|
|
# 流程: curl v_xg.json (UA + proxy fallback) → draws 表 fallback → 自动 add_draw → 找 Qi 期 .md → 输出报告
|
|
# 详见 references/cron-draw-result-flow.md
|
|
```
|
|
|
|
### lottery_4frame.py (4 框架玄学)
|
|
```bash
|
|
python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_4frame.py
|
|
# 4 步流程: v_xg.json + 综合挂牌 + 六信红字 + 玄机诗
|
|
# 不要 agent 自己推公式 (reference 没方法)
|
|
```
|
|
|
|
### lottery.py (辅助)
|
|
```bash
|
|
SCRIPT=~/.hermes/skills/trading/lottery-hk/scripts/lottery.py
|
|
python3 $SCRIPT add <期号> <号码> # 手动添加
|
|
python3 $SCRIPT history [期数] # 查看历史
|
|
python3 $SCRIPT zodiac # 生肖号码对照表
|
|
python3 $SCRIPT next # 下期开奖时间
|
|
# ⚠️ analyze 输出 5 期冷热号没意义, user 已确认
|
|
```
|
|
|
|
## 生肖映射 (网站实际映射, 已验证)
|
|
网站的生肖表和标准 12 生肖轮转不同, 用 mod 12 映射:
|
|
```
|
|
0=狗, 1=猪, 2=蛇, 3=马, 4=羊, 5=虎, 6=兔, 7=鼠, 8=牛, 9=猴, 10=鸡, 11=龙
|
|
```
|
|
071 期验证: 34=鸡(34%12=10)✅, 46=鸡(46%12=10)✅, 17=虎(17%12=5)✅
|
|
|
|
## 冷数据 vs 热数据
|
|
- **🧊 冷数据** (存 cold_data 表): 歷史、生肖表、日期、常識、全年、技巧、規律、策略
|
|
- **🔥 热数据** (每期更新): 開獎、掛牌、解牌、綜掛、平碼平肖、玄机资料、论坛高手推荐等
|
|
|
|
### 资金分配偏好 (2026-07-30)
|
|
**用户偏好**: 信号/分析结果要给**重点分配**, 不是平均分或全部平均。
|
|
- ❌ 错: "5 个候选号, 各买 1 元"
|
|
- ✅ 对: "5 个候选号, 按权重 5/4/3/2/1 元分配, 重点放在前 2-3 个"
|
|
- 默认预算: 信号类 (特码/跟单) 用 ¥15 = 5/4/3/2/1
|
|
- 排序时给 emoji (🥇🥈🥉)
|
|
|
|
适用范围: lottery 特码、币圈跟单、股票做 T 信号等任何"有预算上限的信号推送"。
|
|
|
|
### 候选数 < 4 时诊断 (2026-08-20 v1.4.0 实装 fix)
|
|
**用户偏好**: 4-5 个候选号最合适, 2 个显得"没什么可买的"。
|
|
|
|
**实装的 fix (3 改动一起)**:
|
|
1. **挂牌页抓取放宽** (`lottery_特码.py::get_te_ma_candidates`): `gua_links = re.findall(...)[:3]` → `[:8]` — 多抓几页挂牌, 挂牌稀疏时也有足够数据源。
|
|
2. **火烧/六肖 解码本年生肖号**: 之前 `火烧` / `六肖` / `出肖` 字段**只记录不直接给号**, 现在加 `SX_TO_BENSHENG = {'鼠':23,'牛':22,..., '猪':12}` 解码本年生肖号, 火烧 +2, 六肖/出肖 每个生肖 +1。
|
|
3. **`format_te_ma_result` 兜底**: 候选数 < 4 时, `weights.most_common(8)` + 显式补足到 5 个, 占位的号权重=0, 来源标记 "兜底占位 (挂牌稀疏)"。**most_common 不返回权重 0 的号**, 这里用 `top.append((n, 0))` 显式扩展。
|
|
|
|
**配套 wrapper 修复**: `lottery_特码_cron.sh` 已二次修正 Qi→Nq (2026-08-20 之前 wrapper 改过 Qi→Nq 但又有人改回去了, 这次硬规则:`d['Nq']` + fallback `'088'`)。
|
|
|
|
**验证 (2026-08-20 跑 Nq=091 期)**: 输出 8 个候选, 重点分配 5 个 (¥15 = 5/4/3/2/1):
|
|
- 🥇 35 (权重 4, 另版挂 + 尾数 5尾+30)
|
|
- 🥈 2 (权重 2, 尾数 2尾本)
|
|
- 🥉 22 (权重 2, 尾数 +20 + 六肖 牛=22)
|
|
- 4 5 (权重 2, 尾数 5尾本)
|
|
- 5 14 (权重 2, 火烧 鸡=14 本年生肖)
|
|
|
|
**回退条件**: 如果用户明确说"不要兜底, 太离谱了" → 把 `format_te_ma_result` 里的 `if len(top) < 4` 块删除, 保留挂牌抓取放宽 + 火烧/六肖 解码。
|
|
|
|
详见 `references/2026-08-20-candidate-sparsity-diagnosis.md`。
|
|
|
|
## 注意事项
|
|
- **页面用 Vue.js 动态加载**, 非开奖时间段 (21:14-21:40 外) 可能无数据
|
|
- **图库类页面** (玄机图库、经典图库等) 是图片, 不抓取
|
|
- **网站有大量博彩广告**, 解析时需过滤
|
|
- **v_xg.json DB 故障**: sol.2344a.cc/btc.tktk.app 偶发 "Cann't connect to DB!" 200 OK 但返回空文本 (2026-08-02 出现), 脚本静默失败
|
|
|
|
### 📌 082 期实战案例 (2026-07-29 凌晨, 用户多次纠正)
|
|
1. cron `668dcf3ec54d lottery-draw-result` 14:00 UTC (= 北京 22:00) 跑
|
|
2. v_xg.json `Qi=081 (081 期 7/28 周二已开), Nq=082 (082 期 7/30 周四未开), Week=周四, Day=30 (= Nq=082 期开彩日 = 7/30 周四)`
|
|
3. agent 推: "081 期 = 7/30 周四 21:30 开彩" — **错** (实际 081 = 7/28 周二)
|
|
4. 用户反复纠正"081 时间错 / 不要分析 / 你直接跑不行吗"
|
|
5. **真相**: 挂牌日 = 开彩日 (sol.2344a.cc 挂牌 07-28 13:35 = 081 周二开彩)
|
|
|
|
**坑 1 (v_xg.json 字段)**: `Week`/`Day` 是 **Nq 期开彩日** (未开下期), 不是 Qi 期(已开)。
|
|
|
|
**坑 2 (挂牌日 vs 开彩日)**: sol.2344a.cc 挂牌帖发布时间 = 开彩日,**同一天**。
|
|
|
|
**坑 3 (沟通)**: agent 答 "081 是周几" 时,反复用"为什么不是周二"的长篇分析 → 用户纠正"我说了,你不要分析,只说怎么取的就行了"。
|
|
|
|
### 📌 084 期实战命中 (2026-08-04, 第 4 次修正验证)
|
|
- 8/4 14:03 北京 v_xg.json: Qi=083 (083 期 8/1 周六已开), Data.1-7=[37,7,16,1,32,22,23]
|
|
- marksix6.com browser 验证: 083 期 8/1 周六 21:32 真开彩 = 37/7/16/1/32/22 + **23** ✅
|
|
- **结论**: Data.1-7 = Qi 期真开彩号码, **不是 Qi-1 也不是 Qi-2** (第 4 次修正确认)
|
|
- 8/4 15:22 北京 v_xg.json: Qi=084 (084 期 8/4 周二已开), Data.1-7=[31,16,4,11,13,33,38]
|
|
- lottery_特码.py 跑 084 期: Top 1 = **38** (权重 10)
|
|
- 手填 084 期真开 special=38 → check_hits: analysis #4 hit=✓ **中奖!**
|
|
|
|
### 📌 088 期 命中 (2026-08-13, 特码 23 中) + 089 期 特码 23 不在 Top 5
|
|
- 088 期 8/13 周四 21:30 开, 真开 special=23, 我推 Top 5 有 23 (#5, ¥1, 权重 1)
|
|
- ✅ 088 期中奖 ¥42 (42 倍赔率)
|
|
- 089 期 8/15 周六 21:30 开, 真开 special=14, 我推 Top 5 = 38/26/1/4/11
|
|
- ❌ 089 期未中 — 14 不在 Top 5 (Top 1=38 差太远)
|
|
- 结论: 特码分析命中率不稳定, 仅为文化娱乐参考
|
|
|
|
### 📌 088 期 Cron Qi/Nq 错位 bug (2026-08-13, 用户怒纠)
|
|
- cron `5bec1f60f77f lottery-hot-data` 推送标题 "🎯 分析期号: 087 (v_xg.json Qi)"
|
|
- **实际 087 期 8/11 周二 已开**, 088 期 8/13 周四才是未开
|
|
- 用户原话: "你这前面写的期数是已开的, 分析的数据也是已开的? 我只要你分析未开的啊"
|
|
- **根因**: `lottery_特码_cron.sh` 第 9-19 行 `print(d['Qi'])` 取的已开期, `lottery_特码.py` 默认 fallback 也是 Qi
|
|
- **修法**: 两个文件同步 Qi → Nq, fallback `'082'` → `'088'` (因为 2026-08-13 当时 Nq=088)
|
|
- **验证**: 修完跑 cron wrapper → 输出 "🎯 分析期号: 088 (v_xg.json Nq 未开下期)", 用户确认正确
|
|
- **教训**: 用户问"特码"永远指"下期买什么", runtime 路径不能 fallback 到 Qi, **改这两个文件立刻 grep "Qi" 确认 runtime 路径全用 Nq**
|
|
|
|
### 📌 088 期 lottery-draw-result cron 错配 bug (2026-08-13)
|
|
- cron `668dcf3ec54d lottery-draw-result` 配置: `script=laboratory_特码_cron.sh` (分析脚本), `schedule=0 14 * * 0,2,4` UTC (= 北京 22:00)
|
|
- **根因**: 22:00 北京开彩后 30 分钟 cron 跑**未开下期分析** (跟 11:30 那次重复), 完全不是"记录命中"
|
|
- **修法**: script → `verify_lottery.sh` (新建), schedule → `30 14 * * 0,2,4` UTC (北京 22:30, 等 v_xg.json 更新到 Qi), verify_lottery.sh 内部自动 v_xg.json curl + add_draw + check_hits
|
|
- **教训**: cron 配错脚本是"静默 bug" — 跑出来的输出看起来正常, 实际功能错位。**改 cron 必须同时检查 schedule 跟 script 是否匹配, 跑一次真输出验证**
|
|
|
|
### 📌 095 期 上期开奖回顾 实跑 (2026-08-30, v1.5.0 验证)
|
|
|
|
`lottery_特码_cron.sh` 11:30 北京跑,新增的"上期开奖回顾"段实跑输出:
|
|
```
|
|
🎯 分析期号: 096 (v_xg.json Nq 未开下期)
|
|
|
|
━━━ 上期开奖回顾 ━━━
|
|
**095 期**
|
|
| 位置 | 号码 |
|
|
|:---|:---|
|
|
| 平码 | 30 · 4 · 11 · 26 · 8 · 7 |
|
|
| 特码 | **42** |
|
|
|
|
预测 Top 5: 33,25,26,22,22
|
|
命中: ❌ 特码 42 未中
|
|
```
|
|
|
|
**用户偏好落实**:
|
|
- ✅ "只判特码" (用户 2026-08-30 原话 "只要特码命中的") — 不输出"平码命中 26"
|
|
- ✅ Top 5 grep 锚定 `🥇🥈🥉` 行避免抓到年份/日期 (最初误抓到 `2026` 是 grep 没限定)
|
|
- ✅ 复用 verify_lottery.sh 的 draws 表 + v_xg.json fallback 路径
|
|
|
|
**教训**: Top 5 提取用 `grep -hE '^\\| [🥇🥈🥉] \\| \\*\\*[0-9]+\\*\\*'` 锚定 emoji 行,**不是**裸 grep `\\*\\*[0-9]+\\*\\*` (后者会抓到时间戳/年份)。
|
|
|
|
### 📌 090 期 cron schedule 错位 bug (2026-08-20)
|
|
- 用户反馈: "之前 14:30 跑的 cron 输出 `lottery_特码.py` not found" + verify 输出 "未找到分析文件 查找路径: /home/openclaw/.hermes/cron/output/5bec1f60f77f/"
|
|
- **根因**: 当时 `lottery-draw-result` cron 配置 `schedule=30 14 * * 0,2,4` (= 北京 22:00, **开彩前 30 分钟**)
|
|
- **错配双重**: (a) 开彩前 v_xg.json 还停在 Qi=089, 无 090 期数据 → verify 报"未找到分析文件"; (b) 14:30 wrapper 调 `lottery_特码.py` 跑分析 (应该 verify 跑核验), 两个 cron 错配
|
|
- **修法**: schedule `30 14` → `30 22 * * 0,2,4` (= 北京 22:30, 开彩后 1 小时), 让 verify 等到 v_xg.json 更新到 Qi=090 (Nq=091) 后再跑
|
|
- **验证**: 22:30 跑完输出 "090 期 平码 39·41·8·9·7·14, 特码 49", last_run_at 变成 22:30:36
|
|
- **教训**: verify 类 cron schedule **必须在 v_xg.json 更新后** (开彩后 30 分钟-1 小时), 不是"开彩前几分钟"
|
|
|
|
### 📌 095 期 verify_lottery.sh SKILL_DIR 路径 bug (2026-09-02)
|
|
|
|
**症状**: 9/2 22:30 北京 cron `668dcf3ec54d lottery-draw-result` 跑完, 推 QQ 报告末尾出现:
|
|
```
|
|
python3: can't open file '/home/openclaw/.hermes/scripts/lottery_特码.py': [Errno 2] No such file or directory
|
|
⚠️ add_draw 失败
|
|
```
|
|
|
|
**用户反馈**: "报这么多错" — 看到一堆 python3: can't open 报错 + 后续"未找到分析文件"。
|
|
|
|
**根因**:
|
|
```bash
|
|
# 旧 (在 ~/.hermes/scripts/verify_lottery.sh 中, cron 调用)
|
|
SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
# $0 = /home/openclaw/.hermes/scripts/verify_lottery.sh
|
|
# dirname = /home/openclaw/.hermes/scripts
|
|
# .. = /home/openclaw/.hermes ← 错了! 应该是 skill 根
|
|
# 然后 SKILL_DIR/scripts/lottery_特码.py = /home/openclaw/.hermes/scripts/lottery_特码.py ← 不存在
|
|
```
|
|
|
|
**正解** (硬编码优先 + fallback, 已实装):
|
|
```bash
|
|
# lottery skill 在 ~/.hermes/skills/trading/lottery-hk/, 但脚本被复制到 ~/.hermes/scripts/
|
|
# 优先找 skill 原目录, fallback 到 scripts 根
|
|
if [ -f "$HOME/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py" ]; then
|
|
SKILL_DIR="$HOME/.hermes/skills/trading/lottery-hk"
|
|
else
|
|
SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
fi
|
|
```
|
|
|
|
**手动补登 095 期** (因为 add_draw 失败了, 095 期没入库):
|
|
```bash
|
|
python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py add 095 42 30 4 11 26 8 7
|
|
# → ✅ 095 期真开彩入库
|
|
```
|
|
|
|
**090-094 期无法补登**: v_xg.json 只存**当下一期** Data.1-7, 没有历史真开彩数据。draws 表 090-094 期永远空着, 这部分历史数据无法恢复。
|
|
|
|
**教训**:
|
|
- 任何 cron 脚本从 skill 复制到 `~/.hermes/scripts/` → `dirname $0/..` 路径**绝对**会错
|
|
- 解决方案: **优先硬编码已知 skill 路径**, fallback 用相对路径 (顺序别反)
|
|
- 见 `memory-check-utf8-zombie-lock-fix` skill § 15c — 通用 SKILL_DIR/SCRIPT_DIR 路径 bug 修法
|
|
|
|
**关联 lessons**:
|
|
- § 用户硬偏好 11 (开奖后流程) — verify_lottery.sh 是关键一环, 路径错等于流程断
|
|
- § 11 Pitfall B (脚本位置铁律) — skill 内 vs scripts/ 两套副本, cron 必须 scripts/
|
|
|
|
## 定时任务 (2026-08-13 改)
|
|
|
|
| 任务 | cron schedule | 模式 | 推送到 | script | 备注 |
|
|
|------|-----------|------|------|--------|------|
|
|
| lottery-hot-data | 30 11 * * 0,2,4 (北京) | **no_agent + script** | QQ | `lottery_特码_cron.sh` | 开彩前 2h 抓热数据, 跑 Nq 期分析 |
|
|
| lottery-draw-result | 30 22 * * 0,2,4 (北京) | **no_agent + script** | QQ | `verify_lottery.sh` | **开彩后 1h** 核验 (2026-08-20 从 14:30 改), 等 v_xg.json 更新到 Qi |
|
|
|
|
⚠️ **Cron 改 no_agent + script 模式 (2026-08-04)**: agent 模式 cron 经常编 (标题/时间/号码), 改 no_agent + script 后 0% 编概率。详见 `references/2026-08-04-analytics-history-and-cron-no-agent.md` + `references/cron-draw-result-flow.md` + `references/cron-browser-mode.md`。
|
|
|
|
开奖时间: 21:30 北京时间 → 11:30 UTC=19:30 北京 抓热数据, 14:30 UTC=22:30 北京 抓结果。
|
|
|
|
## 参考资料
|
|
|
|
- `references/zodiac-table.md`: 2026 年完整生肖五行波色对照表
|
|
- `references/draw-dates.md`: 2021-2023 年搅珠日期 (JS 日历数据)
|
|
- `references/v_xg-data-qi-pitfall.md`: **v_xg.json 字段语义陷阱 (第 4 次修正, marksix6.com 验证)**
|
|
- `references/v_xg-qi-pitfall.md`: v_xg.json Qi 字段语义陷阱 (历史归档, 第 1 版)
|
|
- `references/common-knowledge.md`: 生肖属性文章索引、关键概念
|
|
- `references/techniques.md`: 规律秘诀文章索引 (出波、波色法等)
|
|
- `references/patterns.md`: 固定规律文章索引 (日期定波、杀肖、出尾等)
|
|
- `references/strategies.md`: 买码建议文章索引 (赢钱秘诀、七戒律等)
|
|
- `references/cron-default-qi-vs-nq-pitfall.md`: **Cron 默认 Qi vs Nq 陷阱 (2026-08-13)** — 抓期号/分析必须用 Nq
|
|
- `references/candidate-source-tracker-pitfall.md`: **候选表「来源」列硬编码陷阱 (2026-08-13)** — `src_map` 字典 → 动态 `src_tracker`
|
|
- `references/draws-table-manual-add-pitfall.md`: **开奖后流程断点 (2026-08-13)** — draws 表手填 + cron 配错脚本 + verify Qi-1 → Qi 修复
|
|
- `references/cron-draw-result-flow.md`: **开奖后核验 cron 完整流程 (2026-08-13 新建)** — 22:30 北京 + verify_lottery.sh + v_xg.json as 真开彩源 (no_agent 唯一可行)
|
|
- `references/cron-browser-mode.md`: **Lottery cron 模式分工 (2026-08-13 改)** — no_agent 模式 curl 直接生效, agent 模式才用 browser
|
|
- `references/agent-workflow-pitfalls.md`: **跨 skill 通用, 必读** (用户硬偏好 + agent workflow 坑)
|
|
- `references/2026-08-04-analytics-history-and-cron-no-agent.md`: SQLite `analysis` 表 + CLI + cron `no_agent + script` 模式 + GitLab 502 处理
|
|
- `references/hkjc-com-blocked.md`: **2026-08-04 新** — hkjc.com 拦所有外部 browser agent, 改用 marksix6.com (agent 模式) / v_xg.json (no_agent 模式)
|
|
- `references/site-status.md`: 各站点状态 (sol.2344a.cc / btc.tktk.app / etc)
|
|
- `references/site-navigation.md`: 站点导航
|
|
- `references/lottery-sources.md`: 数据源汇总
|
|
- `references/082-success-workflow.md`: 082 期成功跑通的工作流 (反向参考)
|
|
- `references/analysis-example-073/074/075.md`: 3 期真实推演示范 (4 框架真方法)
|
|
- `references/2026-07-21-esoteric-analysis-capability-index.md`: 玄学分析能力索引
|
|
- `references/marksix6-com-verification-source.md`: marksix6.com 详细说明
|
|
- **`references/lottery-te-ma-2026-08-04-marksix6-verification.md`**: 2026-08-04 实战验证 marksix6 真实开彩
|
|
- **`references/2026-08-30-hot-data-previous-draw-recap.md`**: hot-data cron 加"上期开奖回顾"段 (上期 Qi 平码+特码+预测 Top 5+特码命中判定, 用户硬偏好 #12 "只要特码命中的", grep Top 5 锚定 `🥇🥈🥉` 行避免抓到日期年份)
|