Skill: piaowenhao152-glitch/multi-concert-trip-planner (version 1.0.0)

--- 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）

path: examples.md
content: # 交互示例

## 示例 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. 在方案输出末尾附上变更总结，特别提示"仙台场已开售，建议尽快购票"


path: output-template.md
content: # 输出格式模板

在对话中输出清晰的文字总结，使用以下格式：

```
## 多艺人追星出行方案

> 搜索艺人：{艺人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），标注该场次属于音乐节，提醒用户需要购买的是音乐节通票而非单场门票，并检查同一音乐节是否还有用户列表中的其他艺人出演——如果有，这将是一个高价值组合。


path: diff-tracking.md
content: # 场次变更追踪（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 输出，仅保存快照并提示"已保存本次搜索快照，下次搜索相同艺人时将自动显示场次变更"


path: combination-matching.md
content: # 智能组合匹配算法

**单艺人模式：** 如果用户只输入了 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. 常见都市圈参考表

在判断"地点相近"时，参考以下都市圈映射：

**日本：**

| 都市圈 | 包含城市 |
|--------|----------|
| 东京圈 | 东京、横滨、埼玉、千叶、川崎 |
| 关西圈 | 大阪、京都、神户、奈良 |
| 名古屋圈 | 名古屋、丰田 |
| 福冈圈 | 福冈、北九州 |

**韩国：**

| 都市圈 | 包含城市 |
|--------|----------|
| 首尔圈 | 首尔、仁川、京畿道、高阳、水原 |
| 釜山圈 | 釜山、蔚山 |

**中国大陆：**

| 都市圈 | 包含城市 |
|--------|----------|
| 长三角 | 上海、杭州、南京、苏州、无锡 |
| 大湾区 | 深圳、广州、东莞、佛山 |
| 京津冀 | 北京、天津 |
| 成渝 | 成都、重庆 |

**港澳台：**

| 都市圈 | 包含城市 |
|--------|----------|
| 港澳 | 香港、澳门 |
| 台湾北部 | 台北、新北、桃园 |
| 台湾南部 | 高雄、台南 |

**北美：**

| 都市圈 | 包含城市 |
|--------|----------|
| 纽约圈 | 纽约、新泽西、布鲁克林、长岛、纽瓦克 |
| 洛杉矶圈 | 洛杉矶、安纳海姆、英格尔伍德、帕萨迪纳 |
| 旧金山湾区 | 旧金山、奥克兰、圣何塞 |
| 芝加哥圈 | 芝加哥、罗斯蒙特 |
| 多伦多圈 | 多伦多、密西沙加、汉密尔顿 |

**欧洲：**

| 都市圈 | 包含城市 |
|--------|----------|
| 伦敦圈 | 伦敦、温布利、克罗伊登 |
| 巴黎圈 | 巴黎、圣但尼、楠泰尔 |
| 莱茵-鲁尔 | 杜塞尔多夫、科隆、多特蒙德、埃森 |
| 兰斯塔德 | 阿姆斯特丹、鹿特丹、乌得勒支 |

**东南亚：**

| 都市圈 | 包含城市 |
|--------|----------|
| 新加坡 | 新加坡 |
| 曼谷圈 | 曼谷、暖武里 |
| 雅加达圈 | 雅加达、茂物 |
| 马尼拉圈 | 马尼拉、奎松、帕赛 |

遇到不在表中的城市时，用常识判断是否属于同一都市圈或交通便利区域。


path: hotel-search.md
content: # 酒店搜索（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`，确保推荐的酒店距离场馆较近，方便观演
- 如果场馆关键词搜索结果较少，退而使用城市核心区域（如"新宿"、"涩谷"、"梅田"）作为关键词补充搜索
- 酒店价格会波动（尤其是演唱会期间热门城市），提醒用户看到合适的酒店尽早预订


path: BLOCKED_SITES.md
content: # 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


path: concert-search.md
content: # 演唱会信息搜索

对每个艺人，使用 `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 天内（含）的场次**（太临近的演出来不及准备机票和签证），仅保留半个月后及更远的场次。


path: flight-search.md
content: # 机票搜索（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）


path: snapshots/latest.json
content: {
  "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 分钟"
}


path: snapshots/jay_chou_mayday_20260408.json
content: {
  "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 分钟"
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)