Fetch hospital official website URL from local cache or yixue.com; URL validation and fallback web search are handled by the agent
| 执行者 | 职责 |
|---|---|
| 本脚本 | 查本地缓存 → 访问 yixue.com 解析官网 URL → 返回结果 |
| Agent | 验证 URL 可用性 → 网络搜索兜底 → 调用 save_to_cache() 写入缓存 |
脚本本身不做任何 URL 验证或网络搜索。
Agent 调用 fetch(hospital_name)
│
├─ 命中缓存(永久有效)→ 直接返回 official_url,from_cache=True
│
└─ 缓存未命中
└─ 访问 https://www.yixue.com/<hospital_name>
解析 <b>医院网站</b> 字段中的 href
└─ 返回 official_url(可能为空字符串)
Agent 收到结果后:
├─ official_url 非空
│ ├─ 验证 URL 可访问(HTTP < 400)
│ │ ├─ 可访问 → 调用 save_to_cache(hospital_name, official_url),完成
│ │ └─ 不可访问 → 执行"网搜修正"流程(见下文)
│
└─ official_url 为空字符串 → 直接执行"网搜修正"流程
网搜修正流程:
使用 WebSearch 搜索 "<hospital_name> 官方网站"
找到可信的官方域名后 → 调用 save_to_cache(hospital_name, new_url)
若无法确认 → 向用户说明,建议拨打医院电话
fetch(hospital_name: str) -> dict查缓存 + 解析 yixue.com,返回官网 URL。
创建临时脚本 temp_fetcher.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
import os
os.environ['PYTHONIOENCODING'] = 'utf-8'
sys.stdout.reconfigure(encoding='utf-8')
sys.path.insert(0, 'skills/healthpath-registration-fetcher')
from registration_fetcher import fetch
result = fetch("北京协和医院")
print(json.dumps(result, ensure_ascii=False, indent=2))
然后执行(Windows PowerShell 必须用分号分隔,不能用 &&):
cd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_fetcher.py
为什么用脚本? Windows PowerShell 的 GBK 编码会导致 UnicodeEncodeError,脚本方式可以正确处理 UTF-8 中文输出。
⚠️ PowerShell 语法注意:
cd E:\homework\Zhishu && $env:PYTHONIOENCODING='utf-8' && python temp_fetcher.py
&& 不是有效的链接符,会导致 ParserErrorcd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_fetcher.py
; 分隔多条命令cmd /c 包装(支持 &&):cmd /c "cd E:\homework\Zhishu && set PYTHONIOENCODING=utf-8 && python temp_fetcher.py"from skills.registration_fetcher.registration_fetcher import fetch
result = fetch("北京协和医院")
返回字段:
| 字段 | 类型 | 说明 |
|---|---|---|
hospital_name | str | 同输入 |
official_url | str | 官方网站 URL;无法获取时为 "" |
from_cache | bool | True = 来自本地缓存 |
timestamp | str | ISO 格式时间戳 |
save_to_cache(hospital_name: str, official_url: str) -> NoneAgent 验证 URL 可用后调用,将结果永久写入缓存。
创建临时脚本 temp_save_cache.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
os.environ['PYTHONIOENCODING'] = 'utf-8'
sys.stdout.reconfigure(encoding='utf-8')
sys.path.insert(0, 'skills/healthpath-registration-fetcher')
from registration_fetcher import save_to_cache
save_to_cache("北京协和医院", "https://www.pumch.ac.cn/")
print("缓存已保存")
然后执行:
cd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_save_cache.py
from skills.registration_fetcher.registration_fetcher import save_to_cache
save_to_cache("北京协和医院", "https://www.pumch.ac.cn/")
目标页面:https://www.yixue.com/<hospital_name>
匹配的 HTML 结构:
<li>
<b>医院网站</b>:
<a rel="nofollow" class="external free" href="http://www.pumch.ac.cn">
http://www.pumch.ac.cn
</a>
</li>
正则(主):<b>医院网站</b>.*?href=["']([^"']+)["']
正则(备):官方网站.*?href=["']([^"']+)["']
两者均匹配失败时,返回 official_url: ""。
skills/registration_fetcher/hospital_info.json
{
"北京协和医院": {
"official_url": "https://www.pumch.ac.cn/",
"timestamp": "2026-04-13T10:00:00.000000"
}
}
official_url 非空时save_to_cache(hospital_name, official_url),向用户展示官网链接official_url 为空,或 URL 验证失败时"<hospital_name>" 官方网站save_to_cache(hospital_name, verified_url)official_url 并提示用户在官网上查找预约挂号入口official_url 返回 "",Agent 应直接进入网搜流程Windows 特殊处理(必须):
UnicodeEncodeErrorPYTHONIOENCODING='utf-8' 和 sys.stdout.reconfigure(encoding='utf-8')ensure_ascii=False 保留中文Linux/macOS: 可直接调用,无需额外处理
ParserError 或 InvalidEndOfLine原因: PowerShell 不支持 && 链接符。
解决: 用分号 ; 替代:
cd E:\homework\Zhishu; $env:PYTHONIOENCODING='utf-8'; python temp_fetcher.py
UnicodeEncodeError原因: PowerShell 默认 GBK 编码,Python 输出 UTF-8 中文时冲突。
解决:
sys.stdout.reconfigure(encoding='utf-8')ensure_ascii=False$env:PYTHONIOENCODING='utf-8'official_url 返回空字符串原因: yixue.com 页面无该医院词条,或页面结构变化。
解决:
"<hospital_name> 官方网站"save_to_cache() 写入缓存原因: 医院官网域名变更或网站下线。
解决:
skills/healthpath-registration-fetcher/hospital_info.json 中对应条目save_to_cache() 覆盖旧 URLfetch() 会重新解析 yixue.com原因: 网络问题或反爬限制。
解决:
fetch() 会返回 official_url: ""