90315524d901e07b4c3bd3a6216067b9bcb41a41
beijing-exhibitions/feishu_sync_pending.json
| ... | ... | @@ -0,0 +1,7 @@ |
| 1 | +{ |
|
| 2 | + "type": "feishu_sync", |
|
| 3 | + "date": "2026-08-30", |
|
| 4 | + "report_path": "/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md", |
|
| 5 | + "doc_token": "F1EwdgssKob3XHxGquZcGsI4nPC", |
|
| 6 | + "created_at": "2026-08-30 09:00:01" |
|
| 7 | +} |
beijing-exhibitions/logs/cron.log
| ... | ... | @@ -9590,3 +9590,82 @@ __JSON_RESULT__ |
| 9590 | 9590 | [2026-08-28 09:00:01] ========== 任务执行成功 ========== |
| 9591 | 9591 | ✅ 北京展览爬取成功 (2026-08-28) - 共 5 个展览 |
| 9592 | 9592 | [2026-08-29 09:00:01] ========== 开始执行展览爬取任务 ========== |
| 9593 | +[2026-08-30 09:00:01] ========== 开始执行展览爬取任务 ========== |
|
| 9594 | +[2026-08-30 09:00:01] [INFO] ============================================================ |
|
| 9595 | +[2026-08-30 09:00:01] [INFO] 北京展览爬取 v3(多源直接抓取)- 2026-08-30 |
|
| 9596 | +[2026-08-30 09:00:01] [INFO] ============================================================ |
|
| 9597 | +[2026-08-30 09:00:01] [INFO] 【数据源1】北京本地宝展览汇总 |
|
| 9598 | +[2026-08-30 09:00:02] [INFO] 本地宝[P1]:6 个展览 |
|
| 9599 | +[2026-08-30 09:00:37] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_2.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_2.shtm |
|
| 9600 | +[2026-08-30 09:01:12] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_3.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_3.shtm |
|
| 9601 | +[2026-08-30 09:01:47] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_4.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_4.shtm |
|
| 9602 | +[2026-08-30 09:02:22] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_5.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_5.shtm |
|
| 9603 | +[2026-08-30 09:02:57] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_6.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_6.shtm |
|
| 9604 | +[2026-08-30 09:03:32] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_7.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_7.shtm |
|
| 9605 | +[2026-08-30 09:04:07] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_8.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_8.shtm |
|
| 9606 | +[2026-08-30 09:04:43] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_9.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_9.shtm |
|
| 9607 | +[2026-08-30 09:05:18] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_10.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_10.shtm |
|
| 9608 | +[2026-08-30 09:05:53] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_11.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_11.shtm |
|
| 9609 | +[2026-08-30 09:06:29] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_12.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_12.shtm |
|
| 9610 | +[2026-08-30 09:07:04] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_13.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_13.shtm |
|
| 9611 | +[2026-08-30 09:07:39] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_14.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_14.shtm |
|
| 9612 | +[2026-08-30 09:08:14] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_15.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_15.shtm |
|
| 9613 | +[2026-08-30 09:08:49] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_16.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_16.shtm |
|
| 9614 | +[2026-08-30 09:09:24] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_17.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_17.shtm |
|
| 9615 | +[2026-08-30 09:09:59] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_18.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_18.shtm |
|
| 9616 | +[2026-08-30 09:10:36] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_19.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_19.shtm |
|
| 9617 | +[2026-08-30 09:11:11] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_20.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_20.shtm |
|
| 9618 | +[2026-08-30 09:11:46] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_21.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_21.shtm |
|
| 9619 | +[2026-08-30 09:12:22] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_22.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_22.shtm |
|
| 9620 | +[2026-08-30 09:12:57] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_23.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_23.shtm |
|
| 9621 | +[2026-08-30 09:12:57] [INFO] 本地宝合计:6 个展览 |
|
| 9622 | +[2026-08-30 09:12:57] [INFO] -> 看·见——中国国家博物馆藏海外中国图像展 | 国家博物馆 |
|
| 9623 | +[2026-08-30 09:12:57] [INFO] -> 行·迹——卡塔尔游牧生活与文化展 | 国家博物馆 |
|
| 9624 | +[2026-08-30 09:12:57] [INFO] -> 巴西魂——波尔蒂纳里艺术展 | 国家博物馆 |
|
| 9625 | +[2026-08-30 09:12:57] [INFO] -> 看·见——中国国家博物馆藏海外中国图像展 | 国家博物馆 |
|
| 9626 | +[2026-08-30 09:12:57] [INFO] -> 行·迹——卡塔尔游牧生活与文化展 | 国家博物馆 |
|
| 9627 | +[2026-08-30 09:12:57] [INFO] ... 等共 6 个 |
|
| 9628 | +[2026-08-30 09:12:58] [INFO] 【数据源2】中国美术馆 |
|
| 9629 | +[2026-08-30 09:12:58] [INFO] 中国美术馆:0 个展览 |
|
| 9630 | +[2026-08-30 09:12:59] [INFO] 【数据源3】重点展览补充 |
|
| 9631 | +[2026-08-30 09:12:59] [INFO] 重点展览补充:3 个展览 |
|
| 9632 | +[2026-08-30 09:13:00] [INFO] 【数据源2】携程展览汇总 |
|
| 9633 | +[2026-08-30 09:13:01] [INFO] 携程提取:1 个展览 |
|
| 9634 | +[2026-08-30 09:13:01] [INFO] 合计:10 条,去重后:7 条 |
|
| 9635 | +[2026-08-30 09:13:01] [INFO] 报告已生成:/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md(7 个展览) |
|
| 9636 | + |
|
| 9637 | +__JSON_RESULT__ |
|
| 9638 | +{ |
|
| 9639 | + "status": "warning", |
|
| 9640 | + "total": 7, |
|
| 9641 | + "total_items": 7, |
|
| 9642 | + "saved_items": 7, |
|
| 9643 | + "report_path": "/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md", |
|
| 9644 | + "sources": { |
|
| 9645 | + "bendibao": 6, |
|
| 9646 | + "namoc": 0, |
|
| 9647 | + "featured": 3, |
|
| 9648 | + "tripcom": 1 |
|
| 9649 | + } |
|
| 9650 | +} |
|
| 9651 | +[2026-08-30 09:13:01] [INFO] 完成!共 7 个展览 |
|
| 9652 | +[2026-08-30 09:00:01] 爬取结果:总计 7 条,保存 7 条,状态 warning |
|
| 9653 | +[2026-08-30 09:00:01] ✓ 验证通过:爬取到 7 条展览信息 |
|
| 9654 | +[2026-08-30 09:00:01] 飞书同步将由 OpenClaw agent turn 执行... |
|
| 9655 | +[2026-08-30 09:00:01] ✓ 飞书同步标记已写入:/root/.openclaw/workspace/travel/beijing-exhibitions/feishu_sync_pending.json |
|
| 9656 | +[2026-08-30 09:00:01] 执行 heartbeat 检查... |
|
| 9657 | +{ |
|
| 9658 | + "status": "warning", |
|
| 9659 | + "message": "今日尚未执行爬取任务", |
|
| 9660 | + "last_crawl": { |
|
| 9661 | + "source": "Tavily", |
|
| 9662 | + "time": "2026-07-14 09:00:16", |
|
| 9663 | + "status": "success", |
|
| 9664 | + "items": 20 |
|
| 9665 | + }, |
|
| 9666 | + "today_new_exhibitions": 0 |
|
| 9667 | +} |
|
| 9668 | +[2026-08-30 09:00:01] ✓ 通知标记已写入:/root/.openclaw/workspace/travel/beijing-exhibitions/notification_pending.json |
|
| 9669 | +[2026-08-30 09:00:01] ✓ 今日记忆已更新(警告) |
|
| 9670 | +[2026-08-30 09:00:01] ========== 任务执行成功 ========== |
|
| 9671 | +✅ 北京展览爬取成功 (2026-08-30) - 共 7 个展览 |
beijing-exhibitions/logs/daily_20260830.log
| ... | ... | @@ -0,0 +1,78 @@ |
| 1 | +[2026-08-30 09:00:01] ========== 开始执行展览爬取任务 ========== |
|
| 2 | +[2026-08-30 09:00:01] [INFO] ============================================================ |
|
| 3 | +[2026-08-30 09:00:01] [INFO] 北京展览爬取 v3(多源直接抓取)- 2026-08-30 |
|
| 4 | +[2026-08-30 09:00:01] [INFO] ============================================================ |
|
| 5 | +[2026-08-30 09:00:01] [INFO] 【数据源1】北京本地宝展览汇总 |
|
| 6 | +[2026-08-30 09:00:02] [INFO] 本地宝[P1]:6 个展览 |
|
| 7 | +[2026-08-30 09:00:37] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_2.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_2.shtm |
|
| 8 | +[2026-08-30 09:01:12] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_3.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_3.shtm |
|
| 9 | +[2026-08-30 09:01:47] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_4.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_4.shtm |
|
| 10 | +[2026-08-30 09:02:22] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_5.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_5.shtm |
|
| 11 | +[2026-08-30 09:02:57] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_6.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_6.shtm |
|
| 12 | +[2026-08-30 09:03:32] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_7.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_7.shtm |
|
| 13 | +[2026-08-30 09:04:07] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_8.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_8.shtm |
|
| 14 | +[2026-08-30 09:04:43] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_9.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_9.shtm |
|
| 15 | +[2026-08-30 09:05:18] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_10.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_10.shtm |
|
| 16 | +[2026-08-30 09:05:53] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_11.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_11.shtm |
|
| 17 | +[2026-08-30 09:06:29] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_12.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_12.shtm |
|
| 18 | +[2026-08-30 09:07:04] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_13.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_13.shtm |
|
| 19 | +[2026-08-30 09:07:39] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_14.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_14.shtm |
|
| 20 | +[2026-08-30 09:08:14] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_15.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_15.shtm |
|
| 21 | +[2026-08-30 09:08:49] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_16.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_16.shtm |
|
| 22 | +[2026-08-30 09:09:24] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_17.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_17.shtm |
|
| 23 | +[2026-08-30 09:09:59] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_18.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_18.shtm |
|
| 24 | +[2026-08-30 09:10:36] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_19.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_19.shtm |
|
| 25 | +[2026-08-30 09:11:11] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_20.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_20.shtm |
|
| 26 | +[2026-08-30 09:11:46] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_21.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_21.shtm |
|
| 27 | +[2026-08-30 09:12:22] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_22.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_22.shtm |
|
| 28 | +[2026-08-30 09:12:57] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_23.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_23.shtm |
|
| 29 | +[2026-08-30 09:12:57] [INFO] 本地宝合计:6 个展览 |
|
| 30 | +[2026-08-30 09:12:57] [INFO] -> 看·见——中国国家博物馆藏海外中国图像展 | 国家博物馆 |
|
| 31 | +[2026-08-30 09:12:57] [INFO] -> 行·迹——卡塔尔游牧生活与文化展 | 国家博物馆 |
|
| 32 | +[2026-08-30 09:12:57] [INFO] -> 巴西魂——波尔蒂纳里艺术展 | 国家博物馆 |
|
| 33 | +[2026-08-30 09:12:57] [INFO] -> 看·见——中国国家博物馆藏海外中国图像展 | 国家博物馆 |
|
| 34 | +[2026-08-30 09:12:57] [INFO] -> 行·迹——卡塔尔游牧生活与文化展 | 国家博物馆 |
|
| 35 | +[2026-08-30 09:12:57] [INFO] ... 等共 6 个 |
|
| 36 | +[2026-08-30 09:12:58] [INFO] 【数据源2】中国美术馆 |
|
| 37 | +[2026-08-30 09:12:58] [INFO] 中国美术馆:0 个展览 |
|
| 38 | +[2026-08-30 09:12:59] [INFO] 【数据源3】重点展览补充 |
|
| 39 | +[2026-08-30 09:12:59] [INFO] 重点展览补充:3 个展览 |
|
| 40 | +[2026-08-30 09:13:00] [INFO] 【数据源2】携程展览汇总 |
|
| 41 | +[2026-08-30 09:13:01] [INFO] 携程提取:1 个展览 |
|
| 42 | +[2026-08-30 09:13:01] [INFO] 合计:10 条,去重后:7 条 |
|
| 43 | +[2026-08-30 09:13:01] [INFO] 报告已生成:/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md(7 个展览) |
|
| 44 | + |
|
| 45 | +__JSON_RESULT__ |
|
| 46 | +{ |
|
| 47 | + "status": "warning", |
|
| 48 | + "total": 7, |
|
| 49 | + "total_items": 7, |
|
| 50 | + "saved_items": 7, |
|
| 51 | + "report_path": "/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md", |
|
| 52 | + "sources": { |
|
| 53 | + "bendibao": 6, |
|
| 54 | + "namoc": 0, |
|
| 55 | + "featured": 3, |
|
| 56 | + "tripcom": 1 |
|
| 57 | + } |
|
| 58 | +} |
|
| 59 | +[2026-08-30 09:13:01] [INFO] 完成!共 7 个展览 |
|
| 60 | +[2026-08-30 09:00:01] 爬取结果:总计 7 条,保存 7 条,状态 warning |
|
| 61 | +[2026-08-30 09:00:01] ✓ 验证通过:爬取到 7 条展览信息 |
|
| 62 | +[2026-08-30 09:00:01] 飞书同步将由 OpenClaw agent turn 执行... |
|
| 63 | +[2026-08-30 09:00:01] ✓ 飞书同步标记已写入:/root/.openclaw/workspace/travel/beijing-exhibitions/feishu_sync_pending.json |
|
| 64 | +[2026-08-30 09:00:01] 执行 heartbeat 检查... |
|
| 65 | +{ |
|
| 66 | + "status": "warning", |
|
| 67 | + "message": "今日尚未执行爬取任务", |
|
| 68 | + "last_crawl": { |
|
| 69 | + "source": "Tavily", |
|
| 70 | + "time": "2026-07-14 09:00:16", |
|
| 71 | + "status": "success", |
|
| 72 | + "items": 20 |
|
| 73 | + }, |
|
| 74 | + "today_new_exhibitions": 0 |
|
| 75 | +} |
|
| 76 | +[2026-08-30 09:00:01] ✓ 通知标记已写入:/root/.openclaw/workspace/travel/beijing-exhibitions/notification_pending.json |
|
| 77 | +[2026-08-30 09:00:01] ✓ 今日记忆已更新(警告) |
|
| 78 | +[2026-08-30 09:00:01] ========== 任务执行成功 ========== |
beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md
| ... | ... | @@ -0,0 +1,79 @@ |
| 1 | +# 北京展览推荐 - 2026-08-30 |
|
| 2 | + |
|
| 3 | +## 📅 今日概览 |
|
| 4 | +- **在展数量**:7 个(精选) |
|
| 5 | +- **强烈推荐**:7 个(历史人文/古代艺术/世界文明) |
|
| 6 | +- **值得一看**:0 个(文化交流/艺术大展) |
|
| 7 | +- **供参考**:0 个(亲子/科普/科技类) |
|
| 8 | +- **数据来源**:北京本地宝、携程展览 |
|
| 9 | +- **数据更新时间**:2026-08-30 09:13 |
|
| 10 | + |
|
| 11 | +--- |
|
| 12 | + |
|
| 13 | +## 🌟 第一梯队:强烈推荐(历史人文 · 古代艺术 · 世界文明) |
|
| 14 | + |
|
| 15 | +### 1. 看·见——中国国家博物馆藏海外中国图像展 |
|
| 16 | +- **场馆**:国家博物馆 · 中国国家博物馆北8展厅 |
|
| 17 | +- **展期**:2026-05-30起 |
|
| 18 | +- **门票**:免费(需预约) |
|
| 19 | +- **简介**:本次展览以中国国家博物馆近年入藏的海外中国图像为核心,精选约300件(套)展品,以时间为轴,以图像为镜,通过“远观”“凝视”“识见”三个单元层层铺展:从隔海想象中壮丽而浪漫的中国意象,到近代转型变局中的实地观察与审视探究,再到走进新中国后,于温润目光中感知到的蓬勃脉动与时代风华。这些定格的光影,既折射出外国人对中国认知的演变历程,也让公众在这种回望中反观自身的复兴和发展,从而读懂“看中国”的多元视… |
|
| 20 | + |
|
| 21 | +### 2. 行·迹——卡塔尔游牧生活与文化展 |
|
| 22 | +- **场馆**:国家博物馆 · 中国国家博物馆南3展厅 |
|
| 23 | +- **展期**:2026-06-09 — 2026-09-09 |
|
| 24 | +- **门票**:免费(需预约) |
|
| 25 | +- **简介**:本次展览由中国国家博物馆携手卡塔尔国家博物馆共同举办,是国内首次系统性呈现卡塔尔游牧生活的专题展览,亦是推动中卡文明交流互鉴的重要成果。 |
|
| 26 | + |
|
| 27 | +### 3. 巴西魂——波尔蒂纳里艺术展 |
|
| 28 | +- **场馆**:国家博物馆 · 中国国家博物馆南4展厅 |
|
| 29 | +- **展期**:2026-06-10 — 2026-10-11 |
|
| 30 | +- **门票**:免费(需预约) |
|
| 31 | +- **简介**:本次展览分为“原乡情愫”“苍生百相”“世间之灵”“艺法探微”四个单元,展示巴西现代艺术大师坎迪多·波尔蒂纳里的56件原作与沉浸式数字体验。 |
|
| 32 | + |
|
| 33 | +### 4. 遇见吴哥窟——柬埔寨国家博物馆吴哥文明文物特展 |
|
| 34 | +- **场馆**:遇见博物馆·北京798馆 · 朝阳区798艺术区 |
|
| 35 | +- **展期**:2026-06-15 — 2026-10-15 |
|
| 36 | +- **门票**:需购票 |
|
| 37 | +- **简介**:柬埔寨官方支持,122件/组国宝级文物,"溯源高棉""鼎盛吴哥""海丝纽带"三大单元。 |
|
| 38 | + |
|
| 39 | +### 5. 仁风景从——故宫博物院藏捐献文物展 |
|
| 40 | +- **场馆**:故宫博物院·景仁宫 · 东城区景山前街4号 |
|
| 41 | +- **展期**:2026-04-01 — 2026-12-31 |
|
| 42 | +- **门票**:故宫大门票60元 |
|
| 43 | +- **简介**:故宫百年系列展,100位捐献者的逾100件/套展品。 |
|
| 44 | + |
|
| 45 | +### 6. 如是莫高——敦煌艺术大展(第二季) |
|
| 46 | +- **场馆**:北京展览馆 · 西直门外大街135号 |
|
| 47 | +- **展期**:2026-05-01 — 2026-09-30 |
|
| 48 | +- **门票**:需购票 |
|
| 49 | +- **简介**:现象级文博大展第二季,复制洞窟与珍品力作。 |
|
| 50 | + |
|
| 51 | +### 7. 玉文化與中華文明——中國歷史研究院珍藏玉器展 |
|
| 52 | +- **场馆**:待确认 |
|
| 53 | +- **展期**:展期待确认 |
|
| 54 | +- **门票**:免费(需预约) |
|
| 55 | + |
|
| 56 | +--- |
|
| 57 | + |
|
| 58 | +## 📌 参观实用信息 |
|
| 59 | + |
|
| 60 | +### 🎫 预约方式 |
|
| 61 | +- **故宫**:提前7天20:00开始预订(www.dpm.org.cn) |
|
| 62 | +- **国家博物馆**:提前7天预约(www.chnmuseum.cn) |
|
| 63 | +- **中国美术馆**:提前预约(www.namoc.cn) |
|
| 64 | +- **首都博物馆**:关注「首都博物馆」微信公众号预约 |
|
| 65 | +- **免费展览**:部分也需预约,请提前确认 |
|
| 66 | + |
|
| 67 | +### 🚇 交通建议 |
|
| 68 | +- **优先地铁**:北京停车困难,建议地铁出行 |
|
| 69 | +- **798 艺术区**:地铁 14 号线望京南站,换乘公交/打车 |
|
| 70 | +- **故宫周边**:地铁 1 号线天安门东站 |
|
| 71 | + |
|
| 72 | +### 👨👩👧 亲子观展 |
|
| 73 | +- **建议时长**:每展 1.5-2 小时,避免孩子疲劳 |
|
| 74 | +- **携带物品**:水杯、小零食(馆外食用)、湿巾 |
|
| 75 | +- **休息安排**:选择有休息区的场馆 |
|
| 76 | + |
|
| 77 | +--- |
|
| 78 | + |
|
| 79 | +*由 Travel Agent 自动生成 | 2026-08-30 09:13 | 每日 9:00 更新* |
|
| ... | ... | \ No newline at end of file |
beijing-exhibitions/scripts/feishu_sync_v2.py
| ... | ... | @@ -0,0 +1,132 @@ |
| 1 | +#!/usr/bin/env python3 |
|
| 2 | +"""北京展览飞书同步 v2(raw API 版) |
|
| 3 | + |
|
| 4 | +用法: python3 feishu_sync_v2.py [YYYY-MM-DD] |
|
| 5 | + |
|
| 6 | +流程: |
|
| 7 | +1. 读取 feishu_config.json 中 doc_token |
|
| 8 | +2. 读取当日数据 md 文件 |
|
| 9 | +3. 清空文档根级子块 -> 分批插入新块 -> 更新标题块 |
|
| 10 | +4. 回读验证: block_count >= 10 且包含当日日期标记 |
|
| 11 | + |
|
| 12 | +说明: feishu_doc 工具 action=write 对含 bullet 块的文档存在 clear 路径 400 bug, |
|
| 13 | +本脚本直接调用飞书官方 API 绕过(credential 来自 openclaw.json travel-bot 账号)。 |
|
| 14 | +""" |
|
| 15 | +import json |
|
| 16 | +import re |
|
| 17 | +import sys |
|
| 18 | +import time |
|
| 19 | +import urllib.error |
|
| 20 | +import urllib.request |
|
| 21 | +from pathlib import Path |
|
| 22 | + |
|
| 23 | +BASE = Path(__file__).parent |
|
| 24 | +CFG_PATH = BASE / "feishu_config.json" |
|
| 25 | +OPENCLAW_CFG = Path("/root/.openclaw/openclaw.json") |
|
| 26 | + |
|
| 27 | +date_arg = sys.argv[1] if len(sys.argv) > 1 else time.strftime("%Y-%m-%d") |
|
| 28 | +md_path = BASE / "data" / f"beijing_exhibitions_{date_arg}.md" |
|
| 29 | + |
|
| 30 | +if not md_path.exists(): |
|
| 31 | + print(f"NO_DATA_FILE: {md_path}") |
|
| 32 | + sys.exit(2) |
|
| 33 | + |
|
| 34 | +doc_token = json.loads(CFG_PATH.read_text())["doc_token"] |
|
| 35 | +tb = json.loads(OPENCLAW_CFG.read_text())["channels"]["feishu"]["accounts"]["travel-bot"] |
|
| 36 | + |
|
| 37 | +req = urllib.request.Request( |
|
| 38 | + "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal", |
|
| 39 | + data=json.dumps({"app_id": tb["appId"], "app_secret": tb["appSecret"]}).encode(), |
|
| 40 | + headers={"Content-Type": "application/json"}, |
|
| 41 | +) |
|
| 42 | +with urllib.request.urlopen(req, timeout=15) as r: |
|
| 43 | + t = json.load(r)["tenant_access_token"] |
|
| 44 | +H = {"Authorization": f"Bearer {t}", "Content-Type": "application/json"} |
|
| 45 | + |
|
| 46 | + |
|
| 47 | +def api(url, data=None, method=None): |
|
| 48 | + req = urllib.request.Request(url, data=json.dumps(data).encode() if data else None, headers=H, method=method) |
|
| 49 | + with urllib.request.urlopen(req, timeout=20) as r: |
|
| 50 | + return json.load(r) |
|
| 51 | + |
|
| 52 | + |
|
| 53 | +base = f"https://open.feishu.cn/open-apis/docx/v1/documents/{doc_token}" |
|
| 54 | +blocks_url = f"{base}/blocks/{doc_token}/children" |
|
| 55 | + |
|
| 56 | +# 1. clear existing children |
|
| 57 | +items = api(f"{base}/blocks?page_size=500")["data"]["items"] |
|
| 58 | +n = len([b for b in items if b["parent_id"] == doc_token and b["block_type"] != 1]) |
|
| 59 | +if n: |
|
| 60 | + res = api(f"{blocks_url}/batch_delete", {"start_index": 0, "end_index": n}, "DELETE") |
|
| 61 | + assert res.get("code") == 0, f"clear failed: {res}" |
|
| 62 | +print(f"cleared: {n}") |
|
| 63 | + |
|
| 64 | + |
|
| 65 | +# 2. md -> blocks |
|
| 66 | +def els(s): |
|
| 67 | + return [{"text_run": {"content": s}}] |
|
| 68 | + |
|
| 69 | + |
|
| 70 | +def rich(s): |
|
| 71 | + out, pos = [], 0 |
|
| 72 | + for m in re.finditer(r"\*\*([^*]+)\*\*", s): |
|
| 73 | + if m.start() > pos: |
|
| 74 | + out.append({"text_run": {"content": s[pos:m.start()]}}) |
|
| 75 | + out.append({"text_run": {"content": m.group(1), "text_element_style": {"bold": True}}}) |
|
| 76 | + pos = m.end() |
|
| 77 | + if pos < len(s): |
|
| 78 | + out.append({"text_run": {"content": s[pos:]}}) |
|
| 79 | + return out or els(s) |
|
| 80 | + |
|
| 81 | + |
|
| 82 | +blocks = [] |
|
| 83 | +for raw in md_path.read_text().split("\n"): |
|
| 84 | + line = raw.rstrip() |
|
| 85 | + if not line.strip(): |
|
| 86 | + continue |
|
| 87 | + if line.startswith("# "): |
|
| 88 | + blocks.append({"block_type": 3, "heading1": {"elements": els(line[2:])}}) |
|
| 89 | + elif line.startswith("## "): |
|
| 90 | + blocks.append({"block_type": 4, "heading2": {"elements": els(line[3:])}}) |
|
| 91 | + elif line.startswith("### "): |
|
| 92 | + blocks.append({"block_type": 5, "heading3": {"elements": els(line[4:])}}) |
|
| 93 | + elif line.strip() == "---": |
|
| 94 | + blocks.append({"block_type": 22, "divider": {}}) |
|
| 95 | + elif line.startswith("- "): |
|
| 96 | + blocks.append({"block_type": 12, "bullet": {"elements": rich(line[2:])}}) |
|
| 97 | + elif line.startswith("|"): |
|
| 98 | + blocks.append({"block_type": 12, "bullet": {"elements": els(" | ".join(c.strip() for c in line.strip("|").split("|")))}}) |
|
| 99 | + else: |
|
| 100 | + blocks.append({"block_type": 2, "text": {"elements": rich(line)}}) |
|
| 101 | + |
|
| 102 | +for ci in range(0, len(blocks), 40): |
|
| 103 | + res = api(blocks_url, {"children": blocks[ci:ci+40], "index": ci}, "POST") |
|
| 104 | + assert res.get("code") == 0, f"insert failed @ {ci}: {res}" |
|
| 105 | + time.sleep(0.4) |
|
| 106 | +print(f"inserted: {len(blocks)}") |
|
| 107 | + |
|
| 108 | +# 3. title |
|
| 109 | +res = api( |
|
| 110 | + f"{base}/blocks/{doc_token}", |
|
| 111 | + {"update_text_elements": {"elements": [{"text_run": {"content": f"北京展览推荐 {date_arg}"}}]}}, |
|
| 112 | + "PATCH", |
|
| 113 | +) |
|
| 114 | +assert res.get("code") == 0, f"title failed: {res}" |
|
| 115 | + |
|
| 116 | +# 4. verify |
|
| 117 | +items = api(f"{base}/blocks?page_size=500")["data"]["items"] |
|
| 118 | +texts = [] |
|
| 119 | +for b in items: |
|
| 120 | + for key in ("text", "heading1", "heading2", "heading3", "bullet", "page"): |
|
| 121 | + blk = b.get(key) |
|
| 122 | + if isinstance(blk, dict) and "elements" in blk: |
|
| 123 | + for e in blk["elements"]: |
|
| 124 | + tr = e.get("text_run", {}).get("content", "") |
|
| 125 | + if tr: |
|
| 126 | + texts.append(tr) |
|
| 127 | +j = "\n".join(texts) |
|
| 128 | +ok_count = len(items) >= 10 |
|
| 129 | +ok_date = date_arg in j |
|
| 130 | +print(f"FINAL block_count={len(items)} date_ok={ok_date} count_ok={ok_count}") |
|
| 131 | +if not (ok_count and ok_date): |
|
| 132 | + sys.exit(1) |
beijing-exhibitions/scripts/logs/crawler_20260830.log
| ... | ... | @@ -0,0 +1,43 @@ |
| 1 | +[2026-08-30 09:00:01] [INFO] ============================================================ |
|
| 2 | +[2026-08-30 09:00:01] [INFO] 北京展览爬取 v3(多源直接抓取)- 2026-08-30 |
|
| 3 | +[2026-08-30 09:00:01] [INFO] ============================================================ |
|
| 4 | +[2026-08-30 09:00:01] [INFO] 【数据源1】北京本地宝展览汇总 |
|
| 5 | +[2026-08-30 09:00:02] [INFO] 本地宝[P1]:6 个展览 |
|
| 6 | +[2026-08-30 09:00:37] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_2.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_2.shtm |
|
| 7 | +[2026-08-30 09:01:12] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_3.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_3.shtm |
|
| 8 | +[2026-08-30 09:01:47] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_4.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_4.shtm |
|
| 9 | +[2026-08-30 09:02:22] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_5.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_5.shtm |
|
| 10 | +[2026-08-30 09:02:57] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_6.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_6.shtm |
|
| 11 | +[2026-08-30 09:03:32] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_7.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_7.shtm |
|
| 12 | +[2026-08-30 09:04:07] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_8.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_8.shtm |
|
| 13 | +[2026-08-30 09:04:43] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_9.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_9.shtm |
|
| 14 | +[2026-08-30 09:05:18] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_10.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_10.shtm |
|
| 15 | +[2026-08-30 09:05:53] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_11.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_11.shtm |
|
| 16 | +[2026-08-30 09:06:29] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_12.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_12.shtm |
|
| 17 | +[2026-08-30 09:07:04] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_13.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_13.shtm |
|
| 18 | +[2026-08-30 09:07:39] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_14.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_14.shtm |
|
| 19 | +[2026-08-30 09:08:14] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_15.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_15.shtm |
|
| 20 | +[2026-08-30 09:08:49] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_16.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_16.shtm |
|
| 21 | +[2026-08-30 09:09:24] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_17.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_17.shtm |
|
| 22 | +[2026-08-30 09:09:59] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_18.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_18.shtm |
|
| 23 | +[2026-08-30 09:10:36] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_19.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_19.shtm |
|
| 24 | +[2026-08-30 09:11:11] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_20.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_20.shtm |
|
| 25 | +[2026-08-30 09:11:46] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_21.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_21.shtm |
|
| 26 | +[2026-08-30 09:12:22] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_22.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_22.shtm |
|
| 27 | +[2026-08-30 09:12:57] [WARNING] 抓取失败 http://bj.bendibao.com/news/202674/384308_23.shtm: 500 Server Error: Internal Server Error for url: http://bj.bendibao.com/news/202674/384308_23.shtm |
|
| 28 | +[2026-08-30 09:12:57] [INFO] 本地宝合计:6 个展览 |
|
| 29 | +[2026-08-30 09:12:57] [INFO] -> 看·见——中国国家博物馆藏海外中国图像展 | 国家博物馆 |
|
| 30 | +[2026-08-30 09:12:57] [INFO] -> 行·迹——卡塔尔游牧生活与文化展 | 国家博物馆 |
|
| 31 | +[2026-08-30 09:12:57] [INFO] -> 巴西魂——波尔蒂纳里艺术展 | 国家博物馆 |
|
| 32 | +[2026-08-30 09:12:57] [INFO] -> 看·见——中国国家博物馆藏海外中国图像展 | 国家博物馆 |
|
| 33 | +[2026-08-30 09:12:57] [INFO] -> 行·迹——卡塔尔游牧生活与文化展 | 国家博物馆 |
|
| 34 | +[2026-08-30 09:12:57] [INFO] ... 等共 6 个 |
|
| 35 | +[2026-08-30 09:12:58] [INFO] 【数据源2】中国美术馆 |
|
| 36 | +[2026-08-30 09:12:58] [INFO] 中国美术馆:0 个展览 |
|
| 37 | +[2026-08-30 09:12:59] [INFO] 【数据源3】重点展览补充 |
|
| 38 | +[2026-08-30 09:12:59] [INFO] 重点展览补充:3 个展览 |
|
| 39 | +[2026-08-30 09:13:00] [INFO] 【数据源2】携程展览汇总 |
|
| 40 | +[2026-08-30 09:13:01] [INFO] 携程提取:1 个展览 |
|
| 41 | +[2026-08-30 09:13:01] [INFO] 合计:10 条,去重后:7 条 |
|
| 42 | +[2026-08-30 09:13:01] [INFO] 报告已生成:/root/.openclaw/workspace/travel/beijing-exhibitions/scripts/data/beijing_exhibitions_2026-08-30.md(7 个展览) |
|
| 43 | +[2026-08-30 09:13:01] [INFO] 完成!共 7 个展览 |
memory/2026-08-30.md
| ... | ... | @@ -60,3 +60,62 @@ |
| 60 | 60 | |
| 61 | 61 | *创建时间:2026-08-30 00:00:01* |
| 62 | 62 | *维护者:Travel Agent* |
| 63 | + |
|
| 64 | +--- |
|
| 65 | + |
|
| 66 | +## ⚠️ 自动任务记录 - 北京展览爬取(数据偏少) |
|
| 67 | + |
|
| 68 | +**时间**:2026-08-30 09:00:01 |
|
| 69 | +**状态**:warning |
|
| 70 | +**展览数量**:7 个(低于正常值) |
|
| 71 | +**飞书文档**:https://feishu.cn/docx/F1EwdgssKob3XHxGquZcGsI4nPC |
|
| 72 | + |
|
| 73 | +**待处理**:检查数据源是否正常 |
|
| 74 | + |
|
| 75 | + |
|
| 76 | +- 01:41 心跳:发现 notification_pending.json → 飞书通知已发送(北京展览 7 个,warning 状态偏少,用户 ou_f375a5db1506ad5a7785986fe40fe4de,账号 travel-bot)→ 文件已删除 |
|
| 77 | + |
|
| 78 | +--- |
|
| 79 | + |
|
| 80 | +## 📝 每日总结 |
|
| 81 | + |
|
| 82 | +### ✅ 今日完成 |
|
| 83 | +1. |
|
| 84 | +2. |
|
| 85 | +3. |
|
| 86 | + |
|
| 87 | +### ⚠️ 遇到的问题 |
|
| 88 | +1. |
|
| 89 | +2. |
|
| 90 | + |
|
| 91 | +### 🧠 经验教训 |
|
| 92 | +- |
|
| 93 | + |
|
| 94 | +### 📋 明日计划 |
|
| 95 | +1. |
|
| 96 | +2. |
|
| 97 | +3. |
|
| 98 | + |
|
| 99 | +--- |
|
| 100 | + |
|
| 101 | +### 三层记忆检查清单 |
|
| 102 | + |
|
| 103 | +**第 1 层 预防(写入时)** |
|
| 104 | +- [ ] 长期记忆(MEMORY.md)是否更新? |
|
| 105 | +- [ ] 今日记忆是否完整记录? |
|
| 106 | +- [ ] 任务状态是否已更新? |
|
| 107 | + |
|
| 108 | +**第 2 层 侦测(恢复时)** |
|
| 109 | +- [ ] Session 开始前是否读取了记忆? |
|
| 110 | +- [ ] 是否检查了昨日记忆? |
|
| 111 | +- [ ] 是否确认了今日任务? |
|
| 112 | + |
|
| 113 | +**第 3 层 兜底(执行时)** |
|
| 114 | +- [ ] 高风险操作前是否检查了约束? |
|
| 115 | +- [ ] 不可逆操作前是否确认了? |
|
| 116 | +- [ ] 是否有违反原则的情况? |
|
| 117 | + |
|
| 118 | +--- |
|
| 119 | + |
|
| 120 | +*最后更新:2026-08-30 23:00:01* |
|
| 121 | +*维护者:Travel Agent* |
memory/2026-08-31.md
| ... | ... | @@ -0,0 +1,62 @@ |
| 1 | +# 2026-08-31 - Travel Agent 记忆日志 |
|
| 2 | + |
|
| 3 | +## 📋 今日任务 |
|
| 4 | + |
|
| 5 | +### P1 任务(最高优先级) |
|
| 6 | +- [ ] |
|
| 7 | + |
|
| 8 | +### P2 任务(正常优先级) |
|
| 9 | +- [ ] |
|
| 10 | + |
|
| 11 | +### P3 任务(低优先级) |
|
| 12 | +- [ ] |
|
| 13 | + |
|
| 14 | +--- |
|
| 15 | + |
|
| 16 | +## 📝 工作记录 |
|
| 17 | + |
|
| 18 | +### 上午 |
|
| 19 | + |
|
| 20 | + |
|
| 21 | +### 下午 |
|
| 22 | + |
|
| 23 | + |
|
| 24 | +### 晚上 |
|
| 25 | + |
|
| 26 | + |
|
| 27 | +--- |
|
| 28 | + |
|
| 29 | +## ✅ 已完成任务 |
|
| 30 | + |
|
| 31 | +| 时间 | 任务 | 状态 | 备注 | |
|
| 32 | +|------|------|------|------| |
|
| 33 | +| | | | | |
|
| 34 | + |
|
| 35 | +--- |
|
| 36 | + |
|
| 37 | +## ⚠️ 经验教训 |
|
| 38 | + |
|
| 39 | +- |
|
| 40 | + |
|
| 41 | +--- |
|
| 42 | + |
|
| 43 | +## 🧠 三层记忆应用 |
|
| 44 | + |
|
| 45 | +### 第 1 层 预防(写入时) |
|
| 46 | +- [ ] 长期记忆已更新(MEMORY.md) |
|
| 47 | +- [ ] 今日记忆已创建 |
|
| 48 | +- [ ] 任务状态已记录 |
|
| 49 | + |
|
| 50 | +### 第 2 层 侦测(恢复时) |
|
| 51 | +- [ ] 已读取 MEMORY.md |
|
| 52 | +- [ ] 已读取昨日记忆(2026-08-30.md) |
|
| 53 | +- [ ] 已读取今日记忆(2026-08-31.md) |
|
| 54 | + |
|
| 55 | +### 第 3 层 兜底(执行时) |
|
| 56 | +- [ ] 高风险操作前已检查记忆约束 |
|
| 57 | +- [ ] 不可逆操作前已确认 |
|
| 58 | + |
|
| 59 | +--- |
|
| 60 | + |
|
| 61 | +*创建时间:2026-08-31 00:00:01* |
|
| 62 | +*维护者:Travel Agent* |
memory/daily-evolution-2026-08-21.md
| ... | ... | @@ -1,30 +0,0 @@ |
| 1 | -# 每日进化报告 - 2026-08-21 |
|
| 2 | - |
|
| 3 | -## 📊 系统状态 |
|
| 4 | - |
|
| 5 | -| 项目 | 状态 | 数据 | |
|
| 6 | -|------|------|------| |
|
| 7 | -| 北京展览爬取 | ✅ 正常 | 21 个展览(连续第 6 天 21 个,08-16~08-21),daily_20260821.log 按时生成 | |
|
| 8 | -| 飞书同步 | ✅ 正常 | 新文档 `XKSkdk6t4oifK7xHix8cu2SYngc` 创建成功,config 已更新 | |
|
| 9 | -| 用户通知 | ✅ 正常 | 通知标记 09:00 写入,心跳 18:30 已消费并删除(文件不存在 + HEARTBEAT_OK) | |
|
| 10 | -| 记忆初始化 | ✅ 正常 | 08-21 已总结(2427B),08-22 已预创建(00:00) | |
|
| 11 | -| 记忆总结/压缩 | ✅ 正常 | 23:00 总结执行;03:10 压缩执行(清理 08-12/08-13 过期文件,正常保留期) | |
|
| 12 | -| Cron 配置 | ✅ 正常 | 关键任务均未注释 | |
|
| 13 | -| Git | ⚠️ 今日变更未提交 | 随本报告一并提交 | |
|
| 14 | - |
|
| 15 | -## 🔍 今日活动 |
|
| 16 | - |
|
| 17 | -- **用户交互**:无(连续第 2 天自动运行日,系统稳定期) |
|
| 18 | -- **管道**:爬取(09:00 本地)→ 飞书同步(09:05)→ 心跳通知(18:30),全链路正常 |
|
| 19 | -- **昨日计划验收**:✅ 完成——展览 21 ≥15 达标、同步/通知正常、无新增 P1/P2,符合预期 |
|
| 20 | - |
|
| 21 | -## ⚠️ 观察项(引用,无新增变化) |
|
| 22 | - |
|
| 23 | -1. **飞书文档日积一张(P3,第 6 天)**:维持既定策略,下次用户主动交互时搭车询问清理方案,不作为每日待办重复记录。 |
|
| 24 | -2. **数据稳定**:连续 6 天 21 个展览,属稳定基线(原则 17),无需告警。 |
|
| 25 | -3. **heartbeat 状态文件 last_crawl=07-14 旧值**:已知问题,实际爬取正常,低优先级维持。 |
|
| 26 | - |
|
| 27 | -## 📅 明日计划 |
|
| 28 | - |
|
| 29 | -- 常规:监控展览爬取(≥15)与飞书同步、通知处理 |
|
| 30 | -- 无新增 P1/P2 事项 |
memory/daily-evolution-2026-08-30.md
| ... | ... | @@ -0,0 +1,56 @@ |
| 1 | +# 每日进化报告 - 2026-08-30 |
|
| 2 | + |
|
| 3 | +## 📅 昨日计划验收(闭环) |
|
| 4 | + |
|
| 5 | +| 昨日计划 | 结果 | |
|
| 6 | +|---------|------| |
|
| 7 | +| P1 数据源替换评估(本地宝全断 2 日) | ✅ 有结论:本地宝今晨恢复(拿到 6 个展览),替换评估**降级为稳定性观察**;但晚 19:2x 复测首页 HTTP 000(连接失败),判定为**间歇性可用源**,观察继续 | |
|
| 8 | +| P1 09:05 同步验收 | ✅ 完成:01:05 首次触发时爬虫未完成(时序重叠),12:53 补跑成功 **7 展/63 块**,回读验证通过(block_count≥10 且含 08-30 日期标记),**连续 5 天同步成功** | |
|
| 9 | +| P2 爬虫快速失败优化 | ❌ 未做(今日爬取仍耗时 13 分钟逐页重试,顺延) | |
|
| 10 | +| P2 同步 prompt 加日期自检+脱敏警示 | ✅ 以更优方式解决:同步流程固化为 `feishu_sync_v2.py` 脚本(自带日期参数+回读验证),彻底消除手写命令/脱敏复制出错空间(昨日 `***` 笔误教训的直接响应) | |
|
| 11 | +| P3 空文档清理询问 | ❌ 未做(无用户交互窗口) | |
|
| 12 | + |
|
| 13 | +## 📊 系统状态 |
|
| 14 | + |
|
| 15 | +| 项目 | 状态 | 数据 | |
|
| 16 | +|------|------|------| |
|
| 17 | +| 北京展览爬取 | 🟡 | **7 个**(本地宝 6 + 携程 1),较昨日 4 个回升;本地宝间歇可用 | |
|
| 18 | +| 飞书同步 | ✅ | 12:53 补跑成功 7 展/63 块,raw API 脚本一键执行,回读验证通过 | |
|
| 19 | +| 记忆链路 | ✅ | 08-30.md 23:00 总结完成,08-31.md 00:00 init 创建,压缩/周蒸馏正常 | |
|
| 20 | +| MEMORY.md | ✅ | 无异常摘要涌入 | |
|
| 21 | +| Git | ✅ | 昨日已提交,今日报告后提交 | |
|
| 22 | + |
|
| 23 | +## 🚨 核心发现 |
|
| 24 | + |
|
| 25 | +### 1. 同步流程脚本化落地(今日最大成果)⭐ |
|
| 26 | + |
|
| 27 | +- `beijing-exhibitions/scripts/feishu_sync_v2.py`(09:05 创建,4.7KB):直接调用飞书官方 API(credential 取自 openclaw.json travel-bot),绕过 feishu_doc 工具对含 bullet 文档的 clear 路径 400 bug |
|
| 28 | +- 内置四步:读配置 → 清空根级子块 → 分批插入 → 回读验证(block_count≥10 且含当日日期),失败即 exit 1 |
|
| 29 | +- 意义:每日同步从"agent 手写多步命令"变为"一条命令",昨日 `***` 脱敏笔误类事故不再可能发生 |
|
| 30 | + |
|
| 31 | +### 2. 同步时序缺陷确认(明日 P1) |
|
| 32 | + |
|
| 33 | +- 爬虫 09:00(北京)启动需 **13 分钟**(本地宝逐页重试所致),同步 cron 01:05 UTC(09:05 北京)触发时数据文件必然未就绪 |
|
| 34 | +- 今昨两天均靠 **12:53 UTC 第二次触发补跑**救回——这是隐性依赖,若第二次触发缺失当天即失败 |
|
| 35 | +- 修复方向:同步 cron 调至 01:20 UTC,或 v2 脚本内置等待文件逻辑(后者更稳,顺带解决爬虫偶发超时) |
|
| 36 | + |
|
| 37 | +### 3. 路径一致性老问题新实例(记录,暂不修) |
|
| 38 | + |
|
| 39 | +- `heartbeat_check.py` 的 last_crawl 停留在 07-14 Tavily,且每日误报"今日尚未执行爬取任务"——疑似 DB 路径错位(读 `scripts/data/exhibitions.db`,爬虫实际写别处) |
|
| 40 | +- `feishu_sync_pending.json` 由 daily_cron.sh 写入 `beijing-exhibitions/` 根目录,但 heartbeat_check.py 读 `scripts/data/`、heartbeat_check.sh 读 `data/`——**三个路径互不一致,标记从未被消费**,仅覆盖式残留 |
|
| 41 | +- 与 04-07~04-10 教训同类,影响低(同步实际由 cron agent 完成),列为 P3 |
|
| 42 | + |
|
| 43 | +## 📝 今日工作明细 |
|
| 44 | + |
|
| 45 | +1. 09:00 展览爬取:7 个(本地宝恢复),报告生成 |
|
| 46 | +2. 09:05 同步会话固化 `feishu_sync_v2.py` |
|
| 47 | +3. 12:53 同步补跑:7 展/63 块成功 + 回读验证 |
|
| 48 | +4. 记忆链路(init/summary/compression)全部按时执行 |
|
| 49 | +5. 无用户实质交互(空转期) |
|
| 50 | + |
|
| 51 | +## 📅 明日计划 |
|
| 52 | + |
|
| 53 | +1. **P1**:同步时序修复——v2 脚本加"等待数据文件"逻辑(最长 ~15 分钟)或将 cron 调至 01:20 UTC,目标:首次触发即成功,摆脱 12:53 补跑依赖 |
|
| 54 | +2. **P2**:本地宝稳定性观察(第 1/2 日)——今日恢复 6 个但晚测 HTTP 000;若再全断则恢复替换评估 |
|
| 55 | +3. **P2**:爬虫快速失败优化(顺延多日)——首页 500/000 时跳过全部分页,砍掉每日 13 分钟空耗 |
|
| 56 | +4. **P3**:heartbeat_check 三处路径核查(DB 路径 + pending 标记路径),修复"今日未爬取"误报 |
memory/daily_init.log
| ... | ... | @@ -1648,3 +1648,15 @@ |
| 1648 | 1648 | [2026-08-30 00:00:01] ✓ Symlink 更新:今天.md → 2026-08-30.md,昨天.md → 2026-08-29.md |
| 1649 | 1649 | [2026-08-30 00:00:01] ========== 每日记忆初始化完成 ========== |
| 1650 | 1650 | [2026-08-30 00:00:01] 记忆初始化完成 |
| 1651 | +[2026-08-31 00:00:01] ========== 开始每日记忆初始化 ========== |
|
| 1652 | +[2026-08-31 00:00:01] 创建今日记忆文件:/root/.openclaw/workspace/travel/memory/2026-08-31.md |
|
| 1653 | +[2026-08-31 00:00:01] ✓ 今日记忆文件创建成功 |
|
| 1654 | +[2026-08-31 00:00:01] ✓ 昨日记忆文件已关闭 |
|
| 1655 | +[2026-08-31 00:00:01] 准备读取记忆文件... |
|
| 1656 | +[2026-08-31 00:00:01] - MEMORY.md(长期记忆) |
|
| 1657 | +[2026-08-31 00:00:01] - 2026-08-30.md(昨日记忆) |
|
| 1658 | +[2026-08-31 00:00:01] - 2026-08-31.md(今日记忆) |
|
| 1659 | +[2026-08-31 00:00:01] 更新 symlink... |
|
| 1660 | +[2026-08-31 00:00:01] ✓ Symlink 更新:今天.md → 2026-08-31.md,昨天.md → 2026-08-30.md |
|
| 1661 | +[2026-08-31 00:00:01] ========== 每日记忆初始化完成 ========== |
|
| 1662 | +[2026-08-31 00:00:01] 记忆初始化完成 |
memory/daily_summary.log
| ... | ... | @@ -676,3 +676,7 @@ |
| 676 | 676 | [2026-08-29 23:00:01] ✓ 每日总结模板已添加 |
| 677 | 677 | [2026-08-29 23:00:01] ========== 每日记忆总结完成 ========== |
| 678 | 678 | [2026-08-29 23:00:01] 每日总结完成 |
| 679 | +[2026-08-30 23:00:01] ========== 开始每日记忆总结 ========== |
|
| 680 | +[2026-08-30 23:00:01] ✓ 每日总结模板已添加 |
|
| 681 | +[2026-08-30 23:00:01] ========== 每日记忆总结完成 ========== |
|
| 682 | +[2026-08-30 23:00:01] 每日总结完成 |
memory/heartbeat-state.json
| ... | ... | @@ -1,5 +1,5 @@ |
| 1 | 1 | { |
| 2 | - "lastLogWrite": "2026-08-26T01:11:00+00:00", |
|
| 2 | + "lastLogWrite": "2026-08-30T01:41:04.777146+00:00", |
|
| 3 | 3 | "lastMorningBriefing": "2026-03-10T08:12:00+08:00", |
| 4 | 4 | "lastWeeklyTasks": "2026-W35", |
| 5 | 5 | "lastWeeklyDistill": "2026-08-30T03:00:01.456527" |
memory/memory_compression.log
| ... | ... | @@ -1512,3 +1512,12 @@ |
| 1512 | 1512 | [2026-08-30 03:10:01] ✅ 旧日志清理完成 |
| 1513 | 1513 | [2026-08-30 03:10:01] ========== Travel Agent 记忆压缩完成 ========== |
| 1514 | 1514 | [2026-08-30 03:10:01] |
| 1515 | +[2026-08-31 03:10:01] ========== Travel Agent 记忆压缩开始 ========== |
|
| 1516 | +[2026-08-31 03:10:01] ✅ 找到昨天的日志: /root/.openclaw/workspace/travel/memory/2026-08-30.md |
|
| 1517 | +[2026-08-31 03:10:02] ℹ️ 昨天没有标记为重要的内容 |
|
| 1518 | +[2026-08-31 03:10:02] 📝 更新时间戳... |
|
| 1519 | +[2026-08-31 03:10:02] ✅ 时间戳已更新: 2026-08-31 03:10 |
|
| 1520 | +[2026-08-31 03:10:02] 🧹 清理旧日志... |
|
| 1521 | +[2026-08-31 03:10:02] ✅ 旧日志清理完成 |
|
| 1522 | +[2026-08-31 03:10:02] ========== Travel Agent 记忆压缩完成 ========== |
|
| 1523 | +[2026-08-31 03:10:02] |
memory/weekly_distill_2026-W34.md
| ... | ... | @@ -1,115 +0,0 @@ |
| 1 | -# 2026-W34 记忆蒸馏报告 |
|
| 2 | - |
|
| 3 | -**蒸馏时间**:2026-08-23 03:00 |
|
| 4 | -**覆盖日期**:2026-08-16 至 2026-08-23 |
|
| 5 | -**蒸馏原则**:只保留 3 个月后仍有价值的内容 |
|
| 6 | - |
|
| 7 | ---- |
|
| 8 | - |
|
| 9 | -## 📊 本周主要任务 |
|
| 10 | - |
|
| 11 | -### 经验教训 |
|
| 12 | - |
|
| 13 | -- **2026-08-16**: 经验教训 |
|
| 14 | -- **2026-08-16**: 经验教训 |
|
| 15 | -- **2026-08-17**: 经验教训 |
|
| 16 | - |
|
| 17 | ---- |
|
| 18 | - |
|
| 19 | -## 📝 值得长期保留的信息 |
|
| 20 | - |
|
| 21 | -建议更新 MEMORY.md 的内容: |
|
| 22 | - |
|
| 23 | -### 经验教训 (2026-08-16) |
|
| 24 | -## ⚠️ 经验教训 |
|
| 25 | - |
|
| 26 | -- |
|
| 27 | - |
|
| 28 | ----... |
|
| 29 | - |
|
| 30 | -### 经验教训 (2026-08-16) |
|
| 31 | -### ⚠️ 遇到的问题 |
|
| 32 | -1. |
|
| 33 | -2. |
|
| 34 | - |
|
| 35 | -### 🧠 经验教训... |
|
| 36 | - |
|
| 37 | -### 经验教训 (2026-08-17) |
|
| 38 | -## ⚠️ 经验教训 |
|
| 39 | - |
|
| 40 | -- |
|
| 41 | - |
|
| 42 | ----... |
|
| 43 | - |
|
| 44 | -### 经验教训 (2026-08-17) |
|
| 45 | -### ⚠️ 遇到的问题 |
|
| 46 | -1. |
|
| 47 | -2. |
|
| 48 | - |
|
| 49 | -### 🧠 经验教训... |
|
| 50 | - |
|
| 51 | -### 经验教训 (2026-08-18) |
|
| 52 | -## ⚠️ 经验教训 |
|
| 53 | - |
|
| 54 | -- |
|
| 55 | - |
|
| 56 | ----... |
|
| 57 | - |
|
| 58 | -### 经验教训 (2026-08-18) |
|
| 59 | -### ⚠️ 遇到的问题 |
|
| 60 | -1. |
|
| 61 | -2. |
|
| 62 | - |
|
| 63 | -### 🧠 经验教训... |
|
| 64 | - |
|
| 65 | -### 经验教训 (2026-08-19) |
|
| 66 | -## ⚠️ 经验教训 |
|
| 67 | - |
|
| 68 | -- |
|
| 69 | - |
|
| 70 | ----... |
|
| 71 | - |
|
| 72 | -### 经验教训 (2026-08-19) |
|
| 73 | -### ⚠️ 遇到的问题 |
|
| 74 | -1. |
|
| 75 | -2. |
|
| 76 | - |
|
| 77 | -### 🧠 经验教训... |
|
| 78 | - |
|
| 79 | -### 经验教训 (2026-08-20) |
|
| 80 | -## ⚠️ 经验教训 |
|
| 81 | - |
|
| 82 | -- |
|
| 83 | - |
|
| 84 | ----... |
|
| 85 | - |
|
| 86 | -### 经验教训 (2026-08-20) |
|
| 87 | -### ⚠️ 遇到的问题 |
|
| 88 | -1. |
|
| 89 | -2. |
|
| 90 | - |
|
| 91 | -### 🧠 经验教训... |
|
| 92 | - |
|
| 93 | ---- |
|
| 94 | - |
|
| 95 | -## 🗑️ 可清理的临时信息 |
|
| 96 | - |
|
| 97 | -- 具体的 bug 修复细节(已固化到 Skill) |
|
| 98 | -- 临时测试文件 |
|
| 99 | -- 单次任务的中间状态 |
|
| 100 | - |
|
| 101 | ---- |
|
| 102 | - |
|
| 103 | -## 📊 蒸馏统计 |
|
| 104 | - |
|
| 105 | -| 类别 | 数量 | |
|
| 106 | -|------|------| |
|
| 107 | -| 已完成任务 | 0 | |
|
| 108 | -| 经验教训 | 15 | |
|
| 109 | -| 技术方案 | 0 | |
|
| 110 | -| 总计 | 15 | |
|
| 111 | - |
|
| 112 | ---- |
|
| 113 | - |
|
| 114 | -*蒸馏完成时间:2026-08-23 03:00* |
|
| 115 | -*下次蒸馏:下周同日* |
memory/\344\273\212\345\244\251.md
| ... | ... | @@ -1 +1 @@ |
| 1 | -2026-08-30.md |
|
| ... | ... | \ No newline at end of file |
| 0 | +2026-08-31.md |
|
| ... | ... | \ No newline at end of file |
memory/\346\230\250\345\244\251.md
| ... | ... | @@ -1 +1 @@ |
| 1 | -2026-08-29.md |
|
| ... | ... | \ No newline at end of file |
| 0 | +2026-08-30.md |
|
| ... | ... | \ No newline at end of file |