@clawhub-piaowenhao152-glitch-d64e1f13aa
支持同时输入多个艺人名称,自动查找各自的演唱会/巡演信息,智能识别时间和地点相近的演出组合,规划一次出行看多场演出的最优方案,并搜索对应的往返机票和演出场馆附近酒店。适用于想在一次旅途中连看多位艺人演出的用户。
---
name: multi-concert-trip-planner
description: 支持同时输入多个艺人名称,自动查找各自的演唱会/巡演信息,智能识别时间和地点相近的演出组合,规划一次出行看多场演出的最优方案,并搜索对应的往返机票和演出场馆附近酒店。适用于想在一次旅途中连看多位艺人演出的用户。
---
# Multi-Concert Trip Planner
支持多个艺人名称输入,自动在全球巡演信息中发现时间与地点相近的演出组合,帮助用户一次出行看多场演出,并搜索对应的往返机票和场馆附近酒店,输出完整的追星出行方案。
## 核心能力
- 同时接收多个艺人名称,并行搜索各自的巡演信息
- 三层信息采集:WebSearch 摘要 → WebFetch 可靠站点 → agent-browser 浏览器渲染(处理 JS 动态页面)
- 自动发现"时间窗口"内同城市或相邻城市的演出组合
- 按组合的紧凑程度和总花费排序推荐
- 为每个推荐组合搜索往返机票,输出一站式出行方案
- 为每个推荐组合搜索演出场馆附近酒店(飞猪实时报价),自动匹配入住/退房日期
- 场次变更追踪:自动与上次搜索结果做 diff,总结新增/取消/变更的场次
## 文件结构
| 文件 | 内容 |
|------|------|
| `SKILL.md`(本文件) | 工作流程总览、参数收集、综合推荐逻辑、注意事项 |
| `concert-search.md` | 第二步:演唱会搜索策略、WebFetch 规则、提取字段 |
| `combination-matching.md` | 第三步:组合匹配算法、评分权重、都市圈参考表 |
| `flight-search.md` | 第四步:flyai 机票搜索命令、返回数据解析 |
| `hotel-search.md` | 第四步-B:flyai 酒店搜索命令、返回数据解析、筛选策略 |
| `output-template.md` | 第六步:完整输出格式模板 + 特殊场景处理 + 场次变更总结 |
| `examples.md` | 7 个交互示例(多艺人+机票+酒店、单艺人、跨城、星级预算、仅酒店、agent-browser、变更追踪) |
| `BLOCKED_SITES.md` | WebFetch 失败站点记录(持续更新) |
| `diff-tracking.md` | 场次变更追踪:快照存储格式、diff 算法、变更分类规则 |
## 工作流程
### 第一步:收集用户需求
从用户请求中提取以下参数:
- **艺人/乐队名称列表**(必填,至少 1 个)— 如用户只给了 1 个艺人,正常执行搜索(退化为单艺人模式,跳过第三步的组合匹配);如给了多个艺人,则进入多艺人组合匹配流程
- **出发城市**(仅开启机票搜索时必填 — 如用户未提供且需要搜索机票,必须主动询问)
- **时间窗口偏好**(可选,默认"未来 6 个月")— 如"今年夏天"、"下半年"、"8-10 月"
- **组合容忍天数**(可选,默认 7 天)— 两场演出之间最多间隔多少天仍视为"可组合",用户可以说"最好 1 天内"或"一周内都行"。询问时提供的选项应包含 1 天(仅限连续两天)、3 天内、7 天内、14 天内等梯度
- **是否搜索机票**(可选,默认关闭)— 机票价格来自搜索引擎摘要,仅供粗略参考,准确性有限。询问时默认关闭,用户明确要求时才开启
- **是否搜索酒店**(可选,默认关闭)— 使用飞猪搜索演出场馆附近酒店,返回实时价格和预订链接。询问时默认关闭,用户明确要求时才开启
- **酒店偏好**(可选,仅开启酒店搜索时有效)— 包括:
- 星级偏好:如"四星以上"、"经济型就好"
- 每晚预算上限:如"每晚不超过 800"
- 床型偏好:如"大床房"、"双床房"
- 酒店类型:hotel(酒店)、homestay(民宿)、inn(客栈),默认 hotel
- **预算范围**(可选,仅开启机票或酒店搜索时有效)— 如"总花费 1 万以内"、"越便宜越好"
- **地区偏好**(可选)— 如"只看亚洲"、"优先日本和韩国"、"不限地区"
若用户只提供了艺人列表,至少追问出发城市。
### 第一步-B:加载上次搜索快照
→ 详见 `diff-tracking.md`
在开始搜索前,根据本次艺人列表在 `snapshots/` 目录中查找最近一次匹配的快照。如找到,加载为 `previousSnapshot` 用于搜索完成后的 diff 对比。首次搜索该艺人组合时跳过此步。
### 第二步:并行查找各艺人演唱会信息
→ 详见 `concert-search.md`
对每个艺人使用 WebSearch 搜索巡演信息(日/英/中三语查询),通过 Task 工具并行执行。采用三层降级策略:优先从搜索摘要提取信息,对可靠站点使用 WebFetch 补充,对 JS 渲染站点使用 agent-browser 浏览器抓取。结果去重、按日期排序,过滤 14 天内场次。
### 第三步:智能组合匹配(核心逻辑)
→ 详见 `combination-matching.md`
单艺人模式跳过本步骤。多艺人模式下,用滑动窗口在时间线上扫描,按城市/都市圈分组,生成候选组合并按四维评分(艺人覆盖 40%、时间紧凑 25%、地理集中 20%、售票可行 15%)排序,取前 10 个组合。
### 第四步:搜索往返机票(可选,默认跳过)
→ 详见 `flight-search.md`
仅在用户明确要求时执行。使用 `flyai search-flight` 搜索往返机票,返回实时价格和飞猪购票链接。多组合并行搜索,每组合取最便宜的 3 个选项。
### 第四步-B:搜索演出场馆附近酒店(可选,默认跳过)
→ 详见 `hotel-search.md`
仅在用户明确要求时执行。使用 `flyai search-hotel` 以场馆名称为关键词搜索附近酒店,返回实时价格和飞猪预订链接。多城市并行搜索,每城市取前 5 家,按档次分层推荐。
### 第五步:综合整理与推荐
**如果开启了机票和/或酒店搜索:** 将组合信息、机票信息、酒店信息和城际交通(如有)合并,计算每个方案的总花费估算(总花费 = 各场门票之和 + 往返机票 + 住宿费用 + 城际交通)。
**如果未开启机票和酒店搜索(默认):** 仅基于演出信息整理推荐,不涉及机票、酒店和总花费。
**推荐逻辑:**
- 首要指标:能覆盖的艺人数量(越多越好)
- 次要指标:时间紧凑度(间隔天数越少越好)
- 参考指标:地理集中度、售票可行性
- 如有机票数据,额外参考总花费
- 标注"最佳覆盖"(看到最多艺人)和"最紧凑"(间隔最短)方案
### 第六步:呈现总结
→ 详见 `output-template.md`
按标准模板输出方案(演出安排表 + 购票链接 + 机票信息 + 酒店推荐 + 总花费估算),并处理特殊场景(艺人无演出、无可组合方案、音乐节等)。
### 第七步:保存快照 + 场次变更总结
→ 详见 `diff-tracking.md`
将本次搜索结果保存为 JSON 快照文件。如存在上次快照(第一步-B 加载),自动执行 diff 对比,在输出末尾生成「场次变更总结」,包含新增/取消/场馆变更/售票状态变更/票价变更 5 类变化。首次搜索时仅保存快照并提示用户。
## 注意事项
- 出发城市仅在用户开启机票搜索时需要,不要在未开启时追问。
- 为提升效率,多个艺人的搜索必须使用 Task 工具并行执行,而非逐一串行搜索。
- agent-browser 是最重量级的信息采集手段,仅在 WebSearch 摘要和 WebFetch 都无法获取关键信息时使用。每次使用后及时 `agent-browser close` 释放资源。详见 `concert-search.md` 第三层策略和 `BLOCKED_SITES.md` 中标记为 🟢 的站点。
- 机票价格波动较大,提醒用户价格仅供参考,建议尽早预订。
- 酒店价格同样会波动(尤其是演唱会期间热门城市),提醒用户看到合适的酒店尽早预订。
- 搜索酒店时优先使用场馆名称作为 `--key-words`,确保推荐的酒店距离场馆较近,方便观演。
- 如果场馆关键词搜索结果较少,退而使用城市核心区域(如"新宿"、"涩谷"、"梅田")作为关键词补充搜索。
- 转售平台(StubHub 等)的门票价格可能高于原价,需标注说明。
- 搜索机票时考虑演出城市对应的主要机场(如东京对应 NRT/HND,伦敦对应 LHR/LGW/STN)。
- 默认展示最多 5 个组合方案 + 未能组合的场次,除非用户要求更多。
- 尊重各网站的请求限制,合理控制搜索频率。
- 如果用户指定了预算,优先过滤掉超出预算的方案。
- 组合评分算法中的权重为默认值,如用户明确偏好(如"我更在乎省钱"),应动态调整权重。
- 每次搜索结束后必须保存快照到 `snapshots/` 目录。如存在上次快照,必须在输出末尾附上场次变更总结。详见 `diff-tracking.md`。
## 交互示例
→ 详见 `examples.md`(含 7 个完整场景:多艺人+机票+酒店、单艺人+机票、多艺人跨城、带星级预算的酒店搜索、仅搜酒店不搜机票、agent-browser 处理 JS 渲染官网、场次变更追踪 diff)
FILE:examples.md
# 交互示例
## 示例 1:多艺人 + 机票 + 酒店
**用户**:"我想看 YOASOBI 和 Ado 的演唱会,最好能一趟都看了,帮我查查"
**执行步骤**:
1. 追问:出发城市是哪里?时间范围有偏好吗?要搜索机票和酒店吗?
2. 用户回答:从上海出发,今年下半年,帮我搜机票和酒店
3. 使用 Task 工具并行搜索 YOASOBI 和 Ado 的巡演信息
4. 汇总所有场次,执行组合匹配:发现两者在 8 月都有东京场次且相隔 3 天、10 月都有大阪场次且相隔 5 天
5. 对每个组合并行搜索:上海→东京/大阪的往返机票 + 场馆附近酒店
6. 综合排序,输出包含两位艺人演出 + 机票 + 酒店的组合出行方案
7. 将无法组合的场次(如 Ado 的欧洲场次)单独列出供参考
---
## 示例 2:单艺人 + 机票(无酒店)
**用户**:"我想看 Ado 的演唱会,从深圳出发"
**执行步骤**:
1. 单艺人模式,无需组合匹配
2. 搜索 Ado 的巡演信息,找到东京、大阪、首尔、台北等场次
3. 分别搜索深圳→东京、深圳→大阪、深圳→首尔、深圳→台北的往返机票
4. 按总花费(门票 + 机票)排序,输出最优方案
---
## 示例 3:多艺人组合匹配 + 跨城交通
**用户**:"帮我看看 Coldplay、Bruno Mars、Ed Sheeran 最近在亚洲有没有时间撞上的演唱会,我从北京出发"
**执行步骤**:
1. 参数明确,直接开始搜索
2. 使用 Task 工具并行搜索三位艺人的亚洲巡演信息
3. 汇总后发现:Coldplay 11月在东京、Bruno Mars 11月在东京(相隔2天)、Ed Sheeran 11月在首尔
4. 生成组合:
- 组合A(⭐最佳):东京看 Coldplay + Bruno Mars(间隔2天,同城)
- 组合B:东京 Coldplay + 首尔 Ed Sheeran(间隔5天,需跨城)
- 组合C:三人全覆盖 — 东京2场 + 首尔1场(需额外东京→首尔交通)
5. 分别搜索机票和城际交通,输出完整方案
---
## 示例 4:单艺人 + 机票 + 酒店(带星级和预算)
**用户**:"我想看 Ado 的演唱会,从深圳出发,帮我搜一下机票和酒店,酒店要四星以上,每晚预算 1500 以内"
**执行步骤**:
1. 单艺人模式,无需组合匹配
2. 搜索 Ado 的巡演信息,找到东京、大阪、首尔、台北等场次
3. 并行搜索:
- 机票:深圳→东京、深圳→大阪、深圳→首尔、深圳→台北的往返机票
- 酒店:每个城市对应场馆附近的酒店(`--hotel-stars 4,5 --max-price 1500`)
4. 按总花费(门票 + 机票 + 住宿)排序,输出最优方案
---
## 示例 5:只搜酒店,不搜机票
**用户**:"查一下周杰伦巡演,只需要搜酒店不用搜机票,住便宜点的民宿就行"
**执行步骤**:
1. 单艺人模式,仅开启酒店搜索(不开启机票搜索)
2. 搜索周杰伦的巡演信息
3. 对每个有效场次搜索场馆附近民宿(`--hotel-types homestay --sort price_asc`)
4. 输出演出信息 + 每个城市的民宿推荐(不含机票信息)
---
## 示例 6:agent-browser 处理 JS 渲染官网
**用户**:"帮我查米津玄師和绿黄色社会下半年的演唱会,从北京出发,搜机票和酒店"
**执行步骤**:
1. 使用 Task 工具并行搜索两位艺人的巡演信息
2. WebSearch 搜索摘要中获取了米津玄師的部分日程,但缺少详细场馆和售票信息
3. 发现 ticket.kenshiyonezu.jp 是官方售票页面(BLOCKED_SITES.md 标记为 JS 渲染站点 🟢),启用 agent-browser:
```bash
agent-browser open https://ticket.kenshiyonezu.jp/pages/2026_detail
agent-browser wait 3000
agent-browser snapshot -i
# 从快照中提取完整日程(日期、场馆、票价、售票状态)
agent-browser close
```
4. 绿黄色社会的官网 ryokushaka.com/live/ 同样是 JS 渲染,agent-browser 抓取补充
5. 汇总所有场次,执行组合匹配 + 机票酒店搜索,输出完整方案
---
## 示例 7:场次变更追踪(diff)
**用户**:"再帮我查一下米津玄師和绿黄色社会下半年的演唱会"(此前已搜索过同一组艺人)
**执行步骤**:
1. 收集参数:艺人列表 = [米津玄師, 緑黄色社会],沿用上次参数
2. **加载上次快照**:在 `snapshots/` 中找到 `kenshi_yonezu_ryokushaka_20260408.json`,加载为 `previousSnapshot`
3. 使用 Task 工具并行搜索两位艺人的最新巡演信息
4. 执行组合匹配,输出最新方案
5. **保存本次快照**:写入 `kenshi_yonezu_ryokushaka_20260415.json`
6. **执行 diff**:对比上次 15 场 vs 本次 17 场
- 发现:🆕 新增 3 场(绿黄色社会追加了福冈、札幌两场 + 米津玄師新增上海场)
- 发现:❌ 取消 1 场(米津玄師 12/10 名古屋场)
- 发现:🎫 售票状态变更 2 场(米津玄師 12/3 仙台 "预售"→"在售"、12/4 仙台 "预售"→"在售")
7. 在方案输出末尾附上变更总结,特别提示"仙台场已开售,建议尽快购票"
FILE:output-template.md
# 输出格式模板
在对话中输出清晰的文字总结,使用以下格式:
```
## 多艺人追星出行方案
> 搜索艺人:{艺人A}、{艺人B}、{艺人C}
> 时间范围:{范围}
> 组合容忍天数:{N} 天
---
### 方案 1 ⭐ 最佳覆盖(覆盖 {N}/{总数} 位艺人)
📍 目的地:{城市/都市圈}
📅 行程:{起始日期} — {结束日期}(共 {N} 天)
**演出安排:**
| # | 日期 | 艺人 | 场馆 | 票价 | 状态 |
|---|------|------|------|------|------|
| 1 | {日期} | {艺人A} | {场馆} | {价格} | {状态} |
| 2 | {日期} | {艺人B} | {场馆} | {价格} | {状态} |
🔗 购票链接:
- {艺人A}:{链接}
- {艺人B}:{链接}
<!-- 以下机票部分仅在用户开启机票搜索时展示 -->
✈️ 机票(飞猪实时报价):
{航空公司} {航班号} | {出发机场}→{到达机场} | {直达/中转}
去程:{出发时间} → {到达时间}({飞行时长})
回程:{出发时间} → {到达时间}({飞行时长})
往返价格:¥{价格}
🔗 购票:{飞猪链接}
🚄 城际交通(如有):{方式} | {起点}→{终点} | ¥{价格}
<!-- 机票部分结束 -->
<!-- 以下酒店部分仅在用户开启酒店搜索时展示 -->
🏨 酒店推荐(飞猪实时报价):
| 酒店 | 档次 | 每晚价格 | 位置 | 预订 |
|------|------|----------|------|------|
| {酒店名称} | {星级/档次} | {价格} | {附近地标} | [预订链接]({飞猪链接}) |
| {酒店名称} | {星级/档次} | {价格} | {附近地标} | [预订链接]({飞猪链接}) |
| ... | | | | |
住宿费用估算:{每晚价格} × {N} 晚 = ¥{总住宿费}(以最低价酒店计算)
<!-- 酒店部分结束 -->
💰 总花费估算(如有机票+酒店数据):
门票:¥{门票总计}
机票:¥{机票价格}
住宿:¥{住宿费用}({N} 晚)
城际交通:¥{交通费用}(如有)
**合计:约 ¥{总计}**
---
### 方案 2 ⭐ 最紧凑
...
---
### 未能组合的场次
以下场次在时间或地点上无法与其他艺人组合,单独列出供参考:
| 艺人 | 日期 | 城市 | 场馆 | 备注 |
|------|------|------|------|------|
| {艺人C} | {日期} | {城市} | {场馆} | 该时段无其他艺人在附近演出 |
```
## 场次变更总结(Diff)
当存在上次搜索快照时,在主方案输出之后附上变更总结。格式如下:
```
---
## 场次变更总结
> 对比上次搜索:{上次搜索日期}({N} 天前)
> 本次搜索:{本次日期}
### 概览
| 变更类型 | 数量 |
|----------|------|
| 🆕 新增场次 | {N} |
| ❌ 取消/下架 | {N} |
| 🎫 售票状态变更 | {N} |
| 🏟️ 场馆变更 | {N} |
| 💰 票价变更 | {N} |
| ✅ 未变化 | {N} |
<!-- 仅展示有变更的分类,数量为 0 的可省略 -->
### 🆕 新增场次
| 艺人 | 日期 | 城市 | 场馆 | 票价 | 状态 |
|------|------|------|------|------|------|
| {艺人} | {日期} | {城市} | {场馆} | {票价} | {状态} |
### ❌ 取消/下架场次
| 艺人 | 日期 | 城市 | 场馆 | 说明 |
|------|------|------|------|------|
| {艺人} | {日期} | {城市} | {场馆} | 上次搜索存在,本次未找到 |
### 🎫 售票状态变更(需关注)
| 艺人 | 日期 | 城市 | 上次状态 | → | 本次状态 |
|------|------|------|----------|---|----------|
| {艺人} | {日期} | {城市} | 在售 | → | 售罄 |
<!-- 「在售→售罄」和「预售→在售」是最需要用户关注的变更,加粗或额外提醒 -->
### 🏟️ 场馆变更
| 艺人 | 日期 | 城市 | 上次场馆 | → | 本次场馆 |
|------|------|------|----------|---|----------|
| {艺人} | {日期} | {城市} | {旧场馆} | → | {新场馆} |
### 💰 票价变更
| 艺人 | 日期 | 城市 | 上次票价 | → | 本次票价 |
|------|------|------|----------|---|----------|
| {艺人} | {日期} | {城市} | {旧价格} | → | {新价格} |
```
**首次搜索时(无上次快照)的提示:**
```
---
> 📸 已保存本次搜索快照({N} 场演出),下次搜索相同艺人时将自动显示场次变更。
```
## 特殊场景处理
### 场景 1:某个艺人完全没有找到演出信息
告知用户该艺人暂无公开的巡演计划,建议关注其官方社交媒体,并继续为其他艺人生成组合方案。
### 场景 2:所有艺人都有演出,但没有找到任何可组合的方案
- 列出每位艺人各自最值得去的场次
- 说明无法组合的原因(时间差距太大 / 地区完全不同)
- 建议放宽容忍天数或地区限制,询问用户是否要调整参数重试
### 场景 3:组合中包含音乐节
如果某个艺人的演出是在音乐节上(如 Summer Sonic、Coachella),标注该场次属于音乐节,提醒用户需要购买的是音乐节通票而非单场门票,并检查同一音乐节是否还有用户列表中的其他艺人出演——如果有,这将是一个高价值组合。
FILE:diff-tracking.md
# 场次变更追踪(Diff Tracking)
每次搜索完成后,将本次搜索结果保存为快照文件。下次运行时自动加载上次快照并与本次结果做 diff,在输出末尾生成「场次变更总结」。
## 快照存储
### 文件位置
快照存储在 skill 目录下的 `snapshots/` 子目录中:
```
~/.qoderwork/skills/multi-concert-trip-planner/snapshots/
├── {快照ID}.json ← 每次搜索的结果快照
└── latest.json ← 符号链接,指向最新快照(便于快速读取上次结果)
```
### 快照 ID 命名规则
快照 ID = `{艺人列表排序后用下划线连接}_{搜索日期YYYYMMDD}`
示例:`ado_yoasobi_20260408.json`
如果同一天对相同艺人列表搜索多次,后次覆盖前次。
### 快照 JSON 结构
```json
{
"snapshotId": "kenshi_yonezu_ryokushaka_backnumber_20260408",
"createdAt": "2026-04-08T15:30:00+08:00",
"artists": ["米津玄師", "緑黄色社会", "back number"],
"timeWindow": "2026 下半年",
"shows": [
{
"id": "kenshi_yonezu_20261203_sendai",
"artist": "米津玄師",
"date": "2026-12-03",
"time": "18:00",
"venue": "セキスイハイムスーパーアリーナ",
"city": "仙台",
"country": "日本",
"price": "¥9,800",
"ticketStatus": "在售",
"ticketUrl": "https://...",
"source": "WebSearch snippet"
}
],
"totalShows": 15,
"searchDuration": "约 3 分钟"
}
```
**场次 ID 生成规则:** `{艺人名拼音/英文小写}_{日期YYYYMMDD}_{城市拼音小写}`,用于跨快照匹配同一场演出。
## 工作流程
### 搜索前:加载上次快照
1. 根据当前搜索的艺人列表,在 `snapshots/` 中查找最近一次匹配的快照
2. 匹配逻辑:艺人列表排序后完全相同(忽略大小写和空格)
3. 如果找到匹配快照,加载为 `previousSnapshot`
4. 如果没有找到(首次搜索该艺人组合),跳过 diff,搜索结束后直接保存快照
**查找命令:**
```bash
ls -t ~/.qoderwork/skills/multi-concert-trip-planner/snapshots/{艺人列表快照ID前缀}*.json | head -1
```
### 搜索后:保存快照 + 执行 diff
1. 将本次搜索的所有场次整理为快照 JSON 格式
2. 写入 `snapshots/{快照ID}.json`
3. 更新 `latest.json` 指向新快照
4. 如果存在 `previousSnapshot`,执行 diff 算法
**保存命令示例:**
```bash
# 确保 snapshots 目录存在
mkdir -p ~/.qoderwork/skills/multi-concert-trip-planner/snapshots
# 写入快照文件(通过 Write 工具)
# 更新 latest.json 符号链接
ln -sf {快照ID}.json ~/.qoderwork/skills/multi-concert-trip-planner/snapshots/latest.json
```
## Diff 算法
### 匹配规则
两条场次记录被视为"同一场演出"需满足:
- **艺人相同**(忽略大小写)
- **日期相同**(精确到天)
- **城市相同**(忽略"市"/"City"后缀,如"仙台" = "仙台市")
不依赖场次 ID 做精确匹配,因为场馆名可能在不同数据源中表述不同。
### 变更分类
对比 `previousSnapshot.shows` 和当前 `currentShows`,产出 5 类变更:
| 变更类型 | 判定逻辑 | 图标 |
|----------|----------|------|
| **新增场次** | 当前有、上次无(按艺人+日期+城市匹配不到) | 🆕 |
| **取消/下架场次** | 上次有、当前无 | ❌ |
| **场馆变更** | 同一场演出但场馆名称不同 | 🏟️ |
| **售票状态变更** | 同一场演出但售票状态变化(如"预售"→"在售"、"在售"→"售罄") | 🎫 |
| **票价变更** | 同一场演出但票价区间发生变化 | 💰 |
**优先级排序:** 取消 > 新增 > 售票状态变更 > 场馆变更 > 票价变更
### 不变场次
如果某场演出在两次快照中完全一致(日期、城市、场馆、售票状态、票价均未变),归入"不变",不在 diff 中展示。
## 输出格式
→ 详见 `output-template.md`「场次变更总结」部分
Diff 总结在主方案输出之后、末尾展示。包含:
- 上次搜索时间
- 各类变更的汇总数字
- 按变更类型分组的详细变更列表
- 需要用户关注的重点变更(如"在售→售罄"需要紧急关注)
## 注意事项
- 快照仅记录场次信息,不记录机票/酒店数据(这些实时数据每次搜索都不同,不适合做 diff)
- 如果两次搜索的时间窗口不同(如上次搜"下半年",这次搜"10-12月"),diff 时只比较两次时间窗口的交集部分,避免因搜索范围缩小而产生大量虚假"取消"
- 如果用户增减了艺人列表(如上次搜 A+B,这次搜 A+B+C),新增艺人的场次全部标为"新增",其余艺人正常做 diff
- 快照文件较小(通常 <10KB),无需定期清理。如需手动清理:`ls ~/.qoderwork/skills/multi-concert-trip-planner/snapshots/`
- 首次搜索某组艺人时,无 diff 输出,仅保存快照并提示"已保存本次搜索快照,下次搜索相同艺人时将自动显示场次变更"
FILE:combination-matching.md
# 智能组合匹配算法
**单艺人模式:** 如果用户只输入了 1 个艺人,跳过本步骤,直接进入机票/酒店搜索(如开启)或输出呈现。
**多艺人模式:** 将所有艺人的有效演出场次汇总后,执行组合匹配算法。
## 1. 定义"可组合"条件
两场(或多场)演出被视为"可组合"需满足:
1. **时间相近**:演出日期之间的间隔 ≤ 用户设定的容忍天数(默认 7 天)
2. **地点相近**:满足以下任一条件:
- **同城市**:在同一个城市(如都在东京)
- **同都市圈**:在已知的相邻城市群内(如东京-横滨、大阪-神户-京都、纽约-新泽西、伦敦-伯明翰等)
- **同国家且交通便利**:在同一国家内,高铁/飞机 3 小时内可达
3. **不同艺人**:每个组合必须包含至少 2 个不同艺人的演出
## 2. 组合生成策略
1. 将所有演出按日期排序,形成一个时间线
2. 用滑动窗口(窗口大小 = 容忍天数)在时间线上扫描
3. 对窗口内的演出,按城市/都市圈分组
4. 在每个地理分组中,检查是否包含 ≥ 2 个不同艺人
5. 如果是,生成一个组合候选
## 3. 组合评分
对每个候选组合计算综合评分,权重如下:
| 因素 | 权重 | 说明 |
|------|------|------|
| 艺人覆盖数 | 40% | 覆盖的艺人越多得分越高;覆盖全部艺人为满分 |
| 时间紧凑度 | 25% | 演出之间间隔天数越少越好 |
| 地理集中度 | 20% | 同城 > 同都市圈 > 同国家跨城 |
| 售票可行性 | 15% | 全部在售 > 部分预售 > 包含售罄场次 |
### 3.1 地区降权系数
在基础评分之上,对特定地区的场次施加降权系数(乘法修正)。降权不影响场次的搜索和展示,仅影响组合排序优先级。
| 地区 | 降权系数 | 说明 |
|------|----------|------|
| 台湾(台北、新北、桃园、高雄、台南等) | **×0.6** | 大陆用户前往台湾需办理通行证和签注,手续周期较长、存在不确定性,出行便利性低于大陆及免签/落地签目的地 |
**计算规则:**
1. 先按上方四维权重计算基础综合评分 `baseScore`
2. 检查组合中所有场次的举办地区
3. 如果组合中**任一场次**位于降权地区,最终评分 = `baseScore × 该地区降权系数`
4. 如果组合中涉及**多个不同降权地区**,取最低的降权系数
5. 不在降权表中的地区系数为 1.0(无影响)
**示例:**
- 组合 A(北京+温州):baseScore 85 × 1.0 = **85**
- 组合 B(北京+台北):baseScore 90 × 0.6 = **54** → 排在组合 A 之后
> **维护说明:** 降权系数可根据实际出行便利性调整。如未来台湾自由行政策放宽,可适当提高系数(如 0.8)。如需对其他地区降权(如需要复杂签证的国家),在表中追加即可。
按综合评分从高到低排序,取前 **10 个** 组合进入下一步。
## 4. 常见都市圈参考表
在判断"地点相近"时,参考以下都市圈映射:
**日本:**
| 都市圈 | 包含城市 |
|--------|----------|
| 东京圈 | 东京、横滨、埼玉、千叶、川崎 |
| 关西圈 | 大阪、京都、神户、奈良 |
| 名古屋圈 | 名古屋、丰田 |
| 福冈圈 | 福冈、北九州 |
**韩国:**
| 都市圈 | 包含城市 |
|--------|----------|
| 首尔圈 | 首尔、仁川、京畿道、高阳、水原 |
| 釜山圈 | 釜山、蔚山 |
**中国大陆:**
| 都市圈 | 包含城市 |
|--------|----------|
| 长三角 | 上海、杭州、南京、苏州、无锡 |
| 大湾区 | 深圳、广州、东莞、佛山 |
| 京津冀 | 北京、天津 |
| 成渝 | 成都、重庆 |
**港澳台:**
| 都市圈 | 包含城市 |
|--------|----------|
| 港澳 | 香港、澳门 |
| 台湾北部 | 台北、新北、桃园 |
| 台湾南部 | 高雄、台南 |
**北美:**
| 都市圈 | 包含城市 |
|--------|----------|
| 纽约圈 | 纽约、新泽西、布鲁克林、长岛、纽瓦克 |
| 洛杉矶圈 | 洛杉矶、安纳海姆、英格尔伍德、帕萨迪纳 |
| 旧金山湾区 | 旧金山、奥克兰、圣何塞 |
| 芝加哥圈 | 芝加哥、罗斯蒙特 |
| 多伦多圈 | 多伦多、密西沙加、汉密尔顿 |
**欧洲:**
| 都市圈 | 包含城市 |
|--------|----------|
| 伦敦圈 | 伦敦、温布利、克罗伊登 |
| 巴黎圈 | 巴黎、圣但尼、楠泰尔 |
| 莱茵-鲁尔 | 杜塞尔多夫、科隆、多特蒙德、埃森 |
| 兰斯塔德 | 阿姆斯特丹、鹿特丹、乌得勒支 |
**东南亚:**
| 都市圈 | 包含城市 |
|--------|----------|
| 新加坡 | 新加坡 |
| 曼谷圈 | 曼谷、暖武里 |
| 雅加达圈 | 雅加达、茂物 |
| 马尼拉圈 | 马尼拉、奎松、帕赛 |
遇到不在表中的城市时,用常识判断是否属于同一都市圈或交通便利区域。
FILE:hotel-search.md
# 酒店搜索(flyai)
**本步骤仅在用户明确要求搜索酒店时执行。**
对排名前列的组合方案,使用 `flyai` CLI 工具(飞猪旅行)搜索演出城市的酒店。该工具返回实时价格和预订链接。
## 日期策略
- 入住日期:第一场演出的前一天(与机票去程日期一致)
- 退房日期:最后一场演出的后一天(与机票回程日期一致)
- 如果组合中涉及多个城市,为每个城市分别搜索酒店,入住/退房日期按该城市的演出安排确定
## 搜索命令
```bash
flyai search-hotel \
--dest-name {目的地城市} \
--key-words {场馆名称或地标} \
--check-in-date {入住日期 YYYY-MM-DD} \
--check-out-date {退房日期 YYYY-MM-DD} \
--sort price_asc
```
参数说明:
- `--dest-name` 目的地城市名称,如"东京"、"大阪"、"首尔"
- `--key-words` 使用场馆名称作为关键词,确保搜索到场馆附近的酒店(如"东京巨蛋"、"大阪城ホール")
- `--sort price_asc` 按价格从低到高排序(默认推荐,也可根据用户需要改为 `distance_asc`/`rate_desc`)
- 如有星级要求,加 `--hotel-stars {1-5}`(逗号分隔,如 `--hotel-stars 4,5`)
- 如有每晚预算上限,加 `--max-price {金额}`
- 如有床型偏好,加 `--hotel-bed-types {king/twin/multi}`
- 如有酒店类型偏好,加 `--hotel-types {hotel/homestay/inn}`
**多个组合/城市的酒店搜索应并行执行。**
## 返回数据解析
flyai 返回 JSON 格式,从 `data.itemList` 数组中提取每个酒店的以下字段:
| 字段 | JSON 路径 | 说明 |
|------|-----------|------|
| 酒店名称 | `name` | 如 "东京巨蛋酒店" |
| 价格 | `price` | 每晚价格字符串(如 "¥1505") |
| 地址 | `address` | 酒店详细地址 |
| 星级/档次 | `star` | 如 "经济型"、"舒适型"、"高档型"、"豪华型" |
| 附近地标 | `interestsPoi` | 如 "近东京巨蛋"、"近秋叶原" |
| 预订链接 | `detailUrl` | 飞猪直达链接 |
| 装修时间 | `decorationTime` | 可选,如 "2023" |
| 品牌 | `brandName` | 可选,如 "万豪"、"希尔顿"(可能为 null) |
## 筛选与推荐策略
1. 每个城市取 **前 5 家** 酒店推荐(默认按价格排序)
2. 优先展示 `interestsPoi` 中包含场馆名称或附近地标的酒店
3. 按档次分层推荐:至少各展示 1 家经济型/舒适型和 1 家高档型/豪华型(如有),满足不同预算需求
4. 如用户指定了星级或预算,严格按条件过滤后再推荐
5. 计算总住宿费用时,使用每晚价格 × 入住晚数(从价格字符串中提取数字)
## 搜索补充策略
- 搜索酒店时优先使用场馆名称作为 `--key-words`,确保推荐的酒店距离场馆较近,方便观演
- 如果场馆关键词搜索结果较少,退而使用城市核心区域(如"新宿"、"涩谷"、"梅田")作为关键词补充搜索
- 酒店价格会波动(尤其是演唱会期间热门城市),提醒用户看到合适的酒店尽早预订
FILE:BLOCKED_SITES.md
# WebFetch 失败站点记录
以下网站在使用 WebFetch 抓取时无法获取有效内容。根据失败类型,采取不同降级策略:仅用 WebSearch 摘要,或使用 agent-browser 浏览器抓取。
> 最后测试时间:2026-04
## 超时(Timeout)— 仅用 WebSearch 摘要
| 站点 | URL 示例 | 失败原因 |
|------|----------|----------|
| lignea.co.jp | https://lignea.co.jp/ryokushaka/ | WebFetch 超时(>60s),2026-04 复测仍超时 |
| sonymusic.co.jp | https://www.sonymusic.co.jp/artist/ryokusyaka/info/581667 | WebFetch 超时(>60s)。注:同域名 `/live/` 路径属于 JS 渲染类型,见下方 agent-browser 一节 |
> 超时类站点不建议用 agent-browser(大概率加载也极慢),优先用 WebSearch 摘要。
## HTTP 错误 — 仅用 WebSearch 摘要
| 站点 | URL 示例 | 失败原因 |
|------|----------|----------|
| reissuerecords.net | https://reissuerecords.net/ | HTTP 403 Forbidden,服务器拒绝访问 |
> HTTP 403/5xx 类错误通常与 User-Agent 或 IP 限制有关,agent-browser 可能同样被拒绝,不建议尝试。
## JS 渲染站点 — 可用 agent-browser 🟢
以下站点 WebFetch 只能获取空壳 HTML,但 agent-browser 可以完整渲染 JS 内容。**当 WebSearch 摘要信息不足时,应使用 agent-browser 抓取。**
| 站点 | URL 示例 | WebFetch 表现 | agent-browser 抓取方式 |
|------|----------|---------------|----------------------|
| ryokushaka.com | https://www.ryokushaka.com/live/ | 仅导航栏和 banner | `open` → `wait 3000` → `snapshot -i` |
| ryokushaka.com | https://www.ryokushaka.com/news/archive/?581667 | 同上 | 同上 |
| sonymusic.co.jp | https://www.sonymusic.co.jp/artist/ryokusyaka/live/ | 仅导航链接 | `open` → `wait 3000` → `snapshot -i`(日程可能需要点击展开) |
| ticket.kenshiyonezu.jp | https://ticket.kenshiyonezu.jp/pages/2026_detail | 无演出信息 | `open` → `wait 3000` → `snapshot -i` |
**agent-browser 抓取模板:**
```bash
agent-browser open {URL}
agent-browser wait 3000
agent-browser snapshot -i
# 如需翻页或展开更多内容:
# agent-browser click @eN && agent-browser wait 1000 && agent-browser snapshot -i
agent-browser close
```
## 部分可用(需注意)
| 站点 | URL 示例 | 说明 |
|------|----------|------|
| livefans.jp | https://www.livefans.jp/groups/265804 | 此前返回 504,2026-04 复测部分页面已恢复(团体页面可用 WebFetch),但艺人详情页(/artists/)仍只返回导航链接 — 可尝试 agent-browser |
## 降级策略总览
```
信息需求
├─ WebSearch 摘要足够? → 直接提取,无需访问站点
├─ 需要补充详情?
│ ├─ 目标是可靠站点? → WebFetch(rockinon.com、natalie.mu 等)
│ ├─ 目标是 JS 渲染站点? → agent-browser(见上方 🟢 标记)
│ └─ 目标是超时/403 站点? → 放弃,仅用 WebSearch 摘要
└─ 所有手段都无数据? → 标记该艺人"暂无公开巡演信息"
```
**可靠的 WebFetch 站点:** rockinon.com、natalie.mu、fashion-press.net、tower.jp、news.yahoo.co.jp、backnumber.info
FILE:concert-search.md
# 演唱会信息搜索
对每个艺人,使用 `WebSearch` 搜索其演唱会和巡演信息。**为提升效率,多个艺人的搜索应通过 Task 工具并行执行。**
## 搜索策略(每个艺人至少 8 条查询)
### 基本查询(当年 + 明年各 4 条,中日韩英四语)
**必须同时搜索当年和明年两个年份。** 绝不能只搜当年就下结论"没有后续活动"。
```
"{艺人} ライブ ツアー {当年} 日程" ← 日文搜索,覆盖日本巡演
"{艺人} concert tour {当年} dates" ← 英文搜索,覆盖欧美巡演
"{艺人} 演唱会 巡演 {当年}" ← 中文搜索,覆盖中国大陆及华语圈
"{艺人} 콘서트 투어 {当年} 일정" ← 韩文搜索,覆盖韩国巡演
"{艺人} ライブ ツアー {明年} 日程" ← 覆盖明年日本巡演
"{艺人} concert tour {明年} dates" ← 覆盖明年欧美巡演
"{艺人} 演唱会 巡演 {明年}" ← 覆盖明年中国巡演
"{艺人} 콘서트 투어 {明年} 일정" ← 覆盖明年韩国巡演
```
仅用通用查询即可覆盖主流平台(Ticketmaster、Songkick、Bandsintown、Eventernote、大麦网、Interpark、Yes24 等结果会自然出现在搜索结果中),不再逐个平台做 `site:` 限定搜索。
### 追加查询:检查最近活动上的新发表
**重大新活动经常在刚结束的live/演唱会上官宣。** 如果搜索中发现该艺人近期(过去30天内)刚完成了一场演出或活动,必须额外搜索该活动是否公布了新情报:
```
"{艺人} {近期活动名} 新情報 発表" ← 查日文新闻
"{艺人} {近期活动名} announcement new" ← 查英文新闻
"{艺人} 追加公演 新ライブ 発表 {当年}" ← 通用追加公演查询
```
这一步不可跳过。漏掉"活动现场官宣的下一场"是最常见的搜索遗漏。
## 三层信息提取策略
信息提取遵循**逐层降级**原则,尽量用最轻量的方式获取数据:
### 第一层:WebSearch 摘要提取(默认,最快)
**优先从 `WebSearch` 返回的摘要片段(snippet)中直接提取日期、场馆、城市、票价等关键信息。** 大多数情况下摘要已包含足够的结构化数据,无需额外请求。
### 第二层:WebFetch 补充详情
仅在以下情况使用 `WebFetch` 补充详情:
- 摘要信息不完整(如缺少票价或售票状态)
- 且目标网站属于**已知可靠站点**(见下方列表)
**已知可靠的 WebFetch 站点(响应快、内容可抓取):**
- rockinon.com — 日本音乐媒体,巡演报道详细
- natalie.mu — 日本娱乐新闻,演出信息全
- fashion-press.net — 票价信息详细
- tower.jp — 巡演公告完整
- news.yahoo.co.jp — 聚合各媒体报道
- backnumber.info — 巡演日程完整
**禁止 WebFetch 的站点(参见 BLOCKED_SITES.md):**
- lignea.co.jp — 超时
- sonymusic.co.jp — 超时 / 内容为空
- reissuerecords.net — HTTP 403
- 以及其他在历史执行中记录到 BLOCKED_SITES.md 的站点
### 第三层:agent-browser 浏览器抓取(JS 渲染站点专用)
当目标站点依赖 JS 动态渲染(WebFetch 只能获取空壳 HTML),**且该站点是官方信息源或数据唯一来源**时,使用 `agent-browser` 启动真实浏览器抓取完整内容。
**适用场景(参见 BLOCKED_SITES.md「可用 agent-browser」标记):**
- 艺人/乐队官方网站的巡演页面(如 ryokushaka.com/live/、ticket.kenshiyonezu.jp)
- 唱片公司的演出日程页面(如 sonymusic.co.jp/artist/.../live/)
- JS 渲染的售票平台详情页
- WebFetch 仅返回导航栏/banner 的页面
**标准抓取流程:**
```bash
# 1. 打开目标页面并等待 JS 渲染完成
agent-browser open {URL}
agent-browser wait 3000
# 2. 获取页面快照(文字内容 + 交互元素)
agent-browser snapshot -i
# 3. 如果需要查看完整日程(可能需要点击展开/翻页)
agent-browser click @eN # 点击"更多日程"按钮
agent-browser wait 1000
agent-browser snapshot -i # 重新获取内容
# 4. 完成后关闭浏览器
agent-browser close
```
**使用原则:**
- agent-browser 是最重量级的手段,仅在第一层和第二层都无法获取关键信息时使用
- 每次抓取后及时 `agent-browser close` 释放资源
- 如果同一个 Task 中需要抓取多个 JS 站点,使用命名 session 隔离:`agent-browser --session {name} open {URL}`
- 抓取结果同样提取下方"提取字段"表中的 7 个标准字段
## 提取字段
| 字段 | 说明 |
|------|------|
| 艺人 | 表演者或乐队名称 |
| 日期与时间 | 演出日期和开始时间(含时区) |
| 场馆 | 场馆名称 |
| 城市与国家 | 演出所在城市和国家 |
| 票价 | 价格区间(注明货币) |
| 售票状态 | 在售 / 售罄 / 预售 / 候补 |
| 购票链接 | 直接链接 |
## 后处理
对每个艺人的结果去重并按日期排序,过滤掉**今天起 14 天内(含)的场次**(太临近的演出来不及准备机票和签证),仅保留半个月后及更远的场次。
FILE:flight-search.md
# 机票搜索(flyai)
**本步骤仅在用户明确要求搜索机票时执行。**
对排名前列的组合方案,使用 `flyai` CLI 工具(飞猪旅行)搜索从用户出发城市到演出城市的往返机票。该工具返回实时价格和购票链接,数据准确性远优于 WebSearch 摘要。
## 日期策略
默认策略为去程演出前一天、回程演出后一天,但可根据演出时间和航班到达时间做**当天出行优化**,节省一晚住宿费用。
### 去程日期判断
- **默认**:第一场演出的前一天
- **可优化为当天**:如果满足以下任一条件,去程改为首场演出当天:
- 演出开始时间较晚(18:00 及以后),且存在当天中午前(12:00 前)到达目的地的航班
- 演出开始时间为下午场(14:00-17:59),且存在当天上午(10:00 前)到达目的地的航班
- **优化时的搜索方式**:同时搜索前一天和当天两个去程日期,将两者的结果合并推荐,标注当天去程的航班需注意"时间较紧"
### 回程日期判断
- **默认**:最后一场演出的后一天
- **可优化为当天**:如果满足以下任一条件,回程改为末场演出当天:
- 演出结束时间较早(17:00 前结束),且存在当天晚间(20:00 后出发)的航班
- 演出为下午场且预计 16:00 前结束,存在当天 19:00 后出发的航班
- **优化时的搜索方式**:同时搜索当天和后一天两个回程日期,将两者的结果合并推荐,标注当天回程的航班需注意"散场后需尽快赶往机场"
### 注意事项
- 当天出行优化需要已知演出的具体开始时间,如果只有日期没有时间,不做优化,使用默认的前/后一天策略
- 即使做了当天优化,仍然保留前一天去程/后一天回程的搜索结果作为"稳妥方案"供用户选择
- 到达时间需考虑从机场到场馆的交通时间(一般预留 2-3 小时),回程需考虑从场馆到机场的交通时间(一般预留 1.5-2 小时)
- 如果组合中涉及同一国家的多个城市,只搜索主要入境城市的机票(如日本搜东京或大阪入境)
## 搜索命令
```bash
flyai search-flight \
--origin {出发城市} \
--destination {目的地城市} \
--dep-date {去程日期 YYYY-MM-DD} \
--back-date {回程日期 YYYY-MM-DD} \
--sort-type 3
```
参数说明:
- `--sort-type 3` 表示按价格从低到高排序,确保最便宜的结果排在前面
- 如需仅看直飞,加 `--journey-type 1`
- 如有预算限制,加 `--max-price {金额}`
**多个组合的机票搜索应并行执行(同时发出多条 flyai 命令)。**
## 返回数据解析
flyai 返回 JSON 格式,从 `data.itemList` 数组中提取每个选项的以下字段:
| 字段 | JSON 路径 | 说明 |
|------|-----------|------|
| 往返价格 | `ticketPrice` | 含税总价(CNY) |
| 航程类型 | `journeys[].journeyType` | "直达" 或 "中转" |
| 航班号 | `journeys[].segments[].marketingTransportNo` | 如 CA927 |
| 航空公司 | `journeys[].segments[].marketingTransportName` | 如 "国航" |
| 出发机场 | `journeys[].segments[].depStationName` | 如 "首都国际机场" |
| 到达机场 | `journeys[].segments[].arrStationName` | 如 "关西国际机场" |
| 出发时间 | `journeys[].segments[].depDateTime` | 如 "2026-10-22 08:40:00" |
| 到达时间 | `journeys[].segments[].arrDateTime` | 如 "2026-10-22 12:40:00" |
| 飞行时长 | `journeys[].totalDuration` | 分钟数 |
| 购票链接 | `jumpUrl` | 飞猪直达链接 |
## 筛选策略
- 每个组合取 **最便宜的 3 个** 机票选项(直飞优先展示,中转次之)
- 如果组合中涉及跨城市移动(如东京看完一场,再去大阪看另一场),额外搜索城市间交通方案(新干线、廉航等)并估算费用
- 搜索机票时考虑演出城市对应的主要机场(如东京对应 NRT/HND,伦敦对应 LHR/LGW/STN)
FILE:snapshots/latest.json
{
"snapshotId": "jay_chou_mayday_20260408",
"createdAt": "2026-04-08T16:00:00+08:00",
"artists": ["周杰伦", "五月天"],
"timeWindow": "不限时间",
"shows": [
{
"id": "jay_chou_20260515_wenzhou",
"artist": "周杰伦",
"date": "2026-05-15",
"time": "19:00",
"venue": "温州市奥体中心主体育场",
"city": "温州",
"country": "中国",
"price": "未公布(参考¥580-2,380)",
"ticketStatus": "待开售",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260516_wenzhou",
"artist": "周杰伦",
"date": "2026-05-16",
"time": "19:00",
"venue": "温州市奥体中心主体育场",
"city": "温州",
"country": "中国",
"price": "未公布",
"ticketStatus": "待开售",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260517_wenzhou",
"artist": "周杰伦",
"date": "2026-05-17",
"time": "19:00",
"venue": "温州市奥体中心主体育场",
"city": "温州",
"country": "中国",
"price": "未公布",
"ticketStatus": "待开售",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260626_beijing",
"artist": "周杰伦",
"date": "2026-06-26",
"time": "未知",
"venue": "未官宣",
"city": "北京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet (网传未确认)"
},
{
"id": "jay_chou_20260627_beijing",
"artist": "周杰伦",
"date": "2026-06-27",
"time": "未知",
"venue": "未官宣",
"city": "北京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet (网传未确认)"
},
{
"id": "jay_chou_20260628_beijing",
"artist": "周杰伦",
"date": "2026-06-28",
"time": "未知",
"venue": "未官宣",
"city": "北京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet (网传未确认)"
},
{
"id": "jay_chou_20260717_sanya",
"artist": "周杰伦",
"date": "2026-07-17",
"time": "未知",
"venue": "未官宣",
"city": "三亚",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260718_sanya",
"artist": "周杰伦",
"date": "2026-07-18",
"time": "未知",
"venue": "未官宣",
"city": "三亚",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260719_sanya",
"artist": "周杰伦",
"date": "2026-07-19",
"time": "未知",
"venue": "未官宣",
"city": "三亚",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260801_nanjing",
"artist": "周杰伦",
"date": "2026-08-01",
"time": "未知",
"venue": "未官宣",
"city": "南京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260802_nanjing",
"artist": "周杰伦",
"date": "2026-08-02",
"time": "未知",
"venue": "未官宣",
"city": "南京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260803_nanjing",
"artist": "周杰伦",
"date": "2026-08-03",
"time": "未知",
"venue": "未官宣",
"city": "南京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20261017_melbourne",
"artist": "周杰伦",
"date": "2026-10-17",
"time": "19:30",
"venue": "Marvel Stadium, Docklands",
"city": "墨尔本",
"country": "澳大利亚",
"price": "AUD $208-$748",
"ticketStatus": "4/9公开发售",
"ticketUrl": "https://www.ticketmaster.com.au/jay-chou-carnival-ii-world-tour-in-melbourne-docklands-17-10-2026/event/2500647FEE7EB74F",
"source": "Ticketmaster AU"
},
{
"id": "jay_chou_20261121_sydney",
"artist": "周杰伦",
"date": "2026-11-21",
"time": "19:30",
"venue": "ENGIE Stadium, Sydney Showground",
"city": "悉尼",
"country": "澳大利亚",
"price": "未公布",
"ticketStatus": "待公布",
"ticketUrl": "https://www.sydneyshowground.com.au/whats-on/jay-chou-carnival--world-tour/",
"source": "Sydney Showground"
},
{
"id": "mayday_20260430_beijing",
"artist": "五月天",
"date": "2026-04-30",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260501_beijing",
"artist": "五月天",
"date": "2026-05-01",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260502_beijing",
"artist": "五月天",
"date": "2026-05-02",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260503_beijing",
"artist": "五月天",
"date": "2026-05-03",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260508_beijing",
"artist": "五月天",
"date": "2026-05-08",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260509_beijing",
"artist": "五月天",
"date": "2026-05-09",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260510_beijing",
"artist": "五月天",
"date": "2026-05-10",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260511_beijing",
"artist": "五月天",
"date": "2026-05-11",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260515_beijing",
"artist": "五月天",
"date": "2026-05-15",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260516_beijing",
"artist": "五月天",
"date": "2026-05-16",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260517_beijing",
"artist": "五月天",
"date": "2026-05-17",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260518_beijing",
"artist": "五月天",
"date": "2026-05-18",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260627_taipei",
"artist": "五月天",
"date": "2026-06-27",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260628_taipei",
"artist": "五月天",
"date": "2026-06-28",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260629_taipei",
"artist": "五月天",
"date": "2026-06-29",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260704_taipei",
"artist": "五月天",
"date": "2026-07-04",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260705_taipei",
"artist": "五月天",
"date": "2026-07-05",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260706_taipei",
"artist": "五月天",
"date": "2026-07-06",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260711_taipei",
"artist": "五月天",
"date": "2026-07-11",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260712_taipei",
"artist": "五月天",
"date": "2026-07-12",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
}
],
"totalShows": 34,
"searchDuration": "约 5 分钟"
}
FILE:snapshots/jay_chou_mayday_20260408.json
{
"snapshotId": "jay_chou_mayday_20260408",
"createdAt": "2026-04-08T16:00:00+08:00",
"artists": ["周杰伦", "五月天"],
"timeWindow": "不限时间",
"shows": [
{
"id": "jay_chou_20260515_wenzhou",
"artist": "周杰伦",
"date": "2026-05-15",
"time": "19:00",
"venue": "温州市奥体中心主体育场",
"city": "温州",
"country": "中国",
"price": "未公布(参考¥580-2,380)",
"ticketStatus": "待开售",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260516_wenzhou",
"artist": "周杰伦",
"date": "2026-05-16",
"time": "19:00",
"venue": "温州市奥体中心主体育场",
"city": "温州",
"country": "中国",
"price": "未公布",
"ticketStatus": "待开售",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260517_wenzhou",
"artist": "周杰伦",
"date": "2026-05-17",
"time": "19:00",
"venue": "温州市奥体中心主体育场",
"city": "温州",
"country": "中国",
"price": "未公布",
"ticketStatus": "待开售",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260626_beijing",
"artist": "周杰伦",
"date": "2026-06-26",
"time": "未知",
"venue": "未官宣",
"city": "北京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet (网传未确认)"
},
{
"id": "jay_chou_20260627_beijing",
"artist": "周杰伦",
"date": "2026-06-27",
"time": "未知",
"venue": "未官宣",
"city": "北京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet (网传未确认)"
},
{
"id": "jay_chou_20260628_beijing",
"artist": "周杰伦",
"date": "2026-06-28",
"time": "未知",
"venue": "未官宣",
"city": "北京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet (网传未确认)"
},
{
"id": "jay_chou_20260717_sanya",
"artist": "周杰伦",
"date": "2026-07-17",
"time": "未知",
"venue": "未官宣",
"city": "三亚",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260718_sanya",
"artist": "周杰伦",
"date": "2026-07-18",
"time": "未知",
"venue": "未官宣",
"city": "三亚",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260719_sanya",
"artist": "周杰伦",
"date": "2026-07-19",
"time": "未知",
"venue": "未官宣",
"city": "三亚",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260801_nanjing",
"artist": "周杰伦",
"date": "2026-08-01",
"time": "未知",
"venue": "未官宣",
"city": "南京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260802_nanjing",
"artist": "周杰伦",
"date": "2026-08-02",
"time": "未知",
"venue": "未官宣",
"city": "南京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20260803_nanjing",
"artist": "周杰伦",
"date": "2026-08-03",
"time": "未知",
"venue": "未官宣",
"city": "南京",
"country": "中国",
"price": "未知",
"ticketStatus": "等待官宣",
"ticketUrl": "",
"source": "WebSearch snippet"
},
{
"id": "jay_chou_20261017_melbourne",
"artist": "周杰伦",
"date": "2026-10-17",
"time": "19:30",
"venue": "Marvel Stadium, Docklands",
"city": "墨尔本",
"country": "澳大利亚",
"price": "AUD $208-$748",
"ticketStatus": "4/9公开发售",
"ticketUrl": "https://www.ticketmaster.com.au/jay-chou-carnival-ii-world-tour-in-melbourne-docklands-17-10-2026/event/2500647FEE7EB74F",
"source": "Ticketmaster AU"
},
{
"id": "jay_chou_20261121_sydney",
"artist": "周杰伦",
"date": "2026-11-21",
"time": "19:30",
"venue": "ENGIE Stadium, Sydney Showground",
"city": "悉尼",
"country": "澳大利亚",
"price": "未公布",
"ticketStatus": "待公布",
"ticketUrl": "https://www.sydneyshowground.com.au/whats-on/jay-chou-carnival--world-tour/",
"source": "Sydney Showground"
},
{
"id": "mayday_20260430_beijing",
"artist": "五月天",
"date": "2026-04-30",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260501_beijing",
"artist": "五月天",
"date": "2026-05-01",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260502_beijing",
"artist": "五月天",
"date": "2026-05-02",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260503_beijing",
"artist": "五月天",
"date": "2026-05-03",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/10 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260508_beijing",
"artist": "五月天",
"date": "2026-05-08",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260509_beijing",
"artist": "五月天",
"date": "2026-05-09",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260510_beijing",
"artist": "五月天",
"date": "2026-05-10",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260511_beijing",
"artist": "五月天",
"date": "2026-05-11",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/14 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260515_beijing",
"artist": "五月天",
"date": "2026-05-15",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260516_beijing",
"artist": "五月天",
"date": "2026-05-16",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260517_beijing",
"artist": "五月天",
"date": "2026-05-17",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260518_beijing",
"artist": "五月天",
"date": "2026-05-18",
"time": "19:30",
"venue": "国家体育场(鸟巢)",
"city": "北京",
"country": "中国",
"price": "¥380/580/780/980/1,380",
"ticketStatus": "预售4/17 12:25",
"ticketUrl": "https://www.damai.cn",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260627_taipei",
"artist": "五月天",
"date": "2026-06-27",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260628_taipei",
"artist": "五月天",
"date": "2026-06-28",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260629_taipei",
"artist": "五月天",
"date": "2026-06-29",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260704_taipei",
"artist": "五月天",
"date": "2026-07-04",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260705_taipei",
"artist": "五月天",
"date": "2026-07-05",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260706_taipei",
"artist": "五月天",
"date": "2026-07-06",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260711_taipei",
"artist": "五月天",
"date": "2026-07-11",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
},
{
"id": "mayday_20260712_taipei",
"artist": "五月天",
"date": "2026-07-12",
"time": "19:30",
"venue": "台北大巨蛋",
"city": "台北",
"country": "中国台湾",
"price": "NT$1,525-5,525",
"ticketStatus": "5/3 11:00 开售",
"ticketUrl": "https://tixcraft.com",
"source": "WebSearch + WebFetch"
}
],
"totalShows": 34,
"searchDuration": "约 5 分钟"
}