ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

k-skill emergency-room-beds:基于 E-Gen 公开接口的韩国附近 응급실(急诊室)与 입원실(住院病床)运行状态检索实现

k-skill emergency-room-beds:基于 E-Gen 公开接口的韩国附近 응급실(急诊室)与 입원실(住院病床)运行状态检索实现 k-skill emergency-room-beds基于 E-Gen 公开接口的韩国附近 응급실(急诊室)与 입원실(住院病床)运行状态检索实现【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本篇围绕 k-skill 仓库中的emergency-room-beds技能与同名 npm 包展开以用户显式提供的地点为锚点经由 Kakao Map 公开表面把“地名文字”解析成坐标再调用 E-Gen韩国保健社会部/国民保险公团 응급의료정보제공公开附近急诊室列表接口输出距离、医院等级与一组“运行状态标志”。读完本文你能掌握该技能的完整调用链、全部参数取值与默认值、响应字段结构含三态布尔标志与时间戳归一化以及其测试套件如何验证“仅报告运行标志、不报告实时病床数”这一数据边界。一、技能定位与核心原则emergency-room-beds属于 k-skill 的 health 类目技能locale: ko-KR见 emergency-room-beds/SKILL.md 与 skill.json 的 frontmatter。文档 docs/features/emergency-room-beds.md 给出的四条核心原则是理解整个实现的出发点不做位置自动追踪。位置缺失时第一步必须先向用户提问且提问文案是固定的현재 위치를 알려주세요. 동네/역명/랜드마크/위도·경도 중 편한 형식으로 보내주시면 근처 응급실 상태를 찾아볼게요.数据源限定为公开表面NEMC/E-Gen 公开页面与 E-Gen nearby 急诊室列表 endpoint。能力边界明确E-Gen nearby 列表只提供“急诊室是否运营”“住院部/病床是否运营”等运行标志operation flags不提供医院级的实时剩余病床数或床位使用率。紧急场景兜底无论查询结果如何都要引导用户拨打 119 或医院代表电话确认。这四条原则直接映射为代码行为源码中没有定位权限调用resolveAnchor()只接受字符串查询bedCountLimitation常量随每次响应返回instruction.md 的 “Done when” 一节也把“明确披露公开数据限制”列为完成条件。二、公开数据表面与端点清单文档“참고 표면”一节列出的五个公开表面全部可以在 packages/emergency-room-beds/README.md 中逐一对应它们在 packages/emergency-room-beds/src/index.js 中定义为常量表面用途对应源码NEMC 모니터링https://dw.nemc.or.kr/nemcMonitoring/mainmgr/Main.do国家层面的急诊医疗监测入口作为meta.dashboardUrl返回buildMeta()E-Gen 응급실 찾기页面https://www.e-gen.or.kr/egen/search_emergency_room.do人工查阅的公开页面作为sourceUrl/refererEGEN_REFERER_URLE-Gen nearby 列表 endpointhttps://www.e-gen.or.kr/egen/retrieve_emergency_room_list.do实际被 POST 调用的数据接口EGEN_EMERGENCY_ROOM_LIST_URLKakao Map 移动端搜索https://m.map.kakao.com/actions/searchView?qquery地名 → 候选锚点HTML 列表SEARCH_VIEW_URLKakao Map 地点面板 JSONhttps://place-api.map.kakao.com/places/panel3/confirmId锚点 → 精确经纬度JSONPLACE_PANEL_URL_BASE需要注意这些端点是第三方公开表面可能延迟、失败、限速或返回不完整数据packages/emergency-room-beds/README.md 明确说明其输出“不构成医疗建议not medical advice”。三、快速上手官方 Node.js 示例以下是原文档中给出的完整用法emergency-room-beds包要求 Node.js 18见 package.json 的engines字段const { searchNearbyEmergencyRoomsByLocationQuery } require(emergency-room-beds); async function main() { const result await searchNearbyEmergencyRoomsByLocationQuery(광화문, { limit: 3, radius: 5 }); console.log(result.anchor); console.log(result.items.map((item) ({ name: item.name, distanceKm: item.distanceKm, emergencyRoomOperating: item.bedStatus.emergencyRoomOperating, inpatientBedsOperating: item.bedStatus.inpatientBedsOperating, updatedAt: item.updatedAt, phone: item.phone, mapUrl: item.mapUrl }))); console.log(result.meta.bedCountLimitation); } main().catch((error) { console.error(error); process.exitCode 1; });运行结果为三部分组成anchor解析出的位置锚点、items按距离升序截断到limit的医院条目、meta总数、来源与限制说明。其中meta.bedCountLimitation固定输出E-Gen nearby ER list exposes operation flags, not exact real-time remaining bed counts.该常量定义于 src/index.js并在 test/index.test.js 中被断言为逐字一致防止措辞在迭代中漂移。在 Agent 侧k-skill CLI获取该技能的完整指令的方式是npx -y nomadamas/k-skill0 instruct emergency-room-beds npx -y nomadamas/k-skill0 files emergency-room-beds四、参数详解取值范围、默认值与上游字段映射searchNearbyEmergencyRoomsByLocationQuery(locationQuery, options)与searchNearbyEmergencyRoomsByCoordinates(options)接受同一套 options。结合 src/index.js 中的校验函数normalizeBoundedInteger/normalizeCoordinates/normalizeOrder与测试用例 test/index.test.js各参数约束如下参数默认值合法范围说明对应上游表单字段locationQuery必填第一个位置参数字符串地名若形如37.573713, 126.978338逗号/斜杠/空格分隔且通过经纬度范围校验则由parseCoordinateQuery直接解析为坐标跳过 Kakao 锚点解析latitude/longitude或lat/lon由锚点解析得到-90~90 / -180~180必须为有限数值否则抛出latitude and longitude must be finite numbers.等错误limit51~50返回条目上限超出范围抛limit must be between 1 and 50.radius或maxDistanceKm31~50请求 E-Gen 的搜索半径km同时用于客户端二次过滤item.distanceKm radiusorderdistancedistance|accuracyE-Gen 排序方式非法值抛错currentPageNum或pageNo11~1000分页页码emergencyGradeCodes或emoggrdcStr空字符串或字符串数组急诊医疗机构等级代码过滤数组会被 join 为逗号串如[A,C]→A,Csilson24false布尔是否只看 119联动机构映射为表单值Y/NhospitalName或emogdesc空字符串医院名关键字apiBaseUrlE-Gen 端点URL用于测试时替换上游地址fetchImpl全局fetch函数可注入的 fetch 实现是全部离线测试的基础上述请求组装逻辑集中在buildEmergencyRoomListRequest()src/index.js以URLSearchParams构造表单体lat、lon、emoggrdcStr、silson24、emogdesc、radius、order、currentPageNum以POST方法发往 E-Gen 端点。测试buildEmergencyRoomListRequest targets E-Gens public nearby ER endpointtest/index.test.js断言了每个字段的逐一对应关系。此外为了让请求在真实浏览器语义下通过源码为三类请求准备了不同的请求头src/index.jsDEFAULT_BROWSER_HEADERSKakao 搜索 HTML 页面含 Chrome UA 与ko优先的accept-languageDEFAULT_PANEL_HEADERSKakao 面板 JSON追加origin: place.map.kakao.com、pf: PC、appVersionDEFAULT_JSON_HEADERSE-Gen 表单 POST追加origin: www.e-gen.or.kr、referer指向急诊室搜索页、x-requested-with: XMLHttpRequest模拟站点自身的 AJAX 行为。五、调用链解析从地名到急诊室列表从源码结构看src/index.js 的searchNearbyEmergencyRoomsByLocationQuery完整调用链为locationQuery ├─ parseCoordinateQuery() 命中“纬度,经度”文本 → 直接进入坐标分支 └─ resolveAnchor() 1. GET m.map.kakao.com/actions/searchView?qquery HTML 文本 2. parseSearchResultsHtml() 提取 li classsearch_item base 的 >{ anchor: { id, name, category, address, phone, latitude, longitude, sourceUrl }, items: [ 医院条目 ... ], // 已按 distanceKm 升序截断到 limit meta: { total, upstreamTotal, limit, radius, source: e-gen, sourceUrl, dashboardUrl, bedCountLimitation, anchorCandidates? } }meta.anchorCandidates仅在走地名查询分支时出现见 src/index.js值为候选数量直接给坐标时anchor退化为{ name: options.anchorName || 입력 좌표, address, latitude, longitude }。6.2 医院条目字段对应文档“응답 필드”一节的完整字段清单均来自normalizeEmergencyRoomRows()的映射src/parse.js字段上游字段说明id/nameEMOGCODE/TITLE机构代码与医院名无TITLE的条目被丢弃emergencyGrade/hospitalTypeCATEGORY1/CATEGORY2如“지역응급의료센터”“권역응급의료센터”与“상급종합병원”address/phoneADDRROAD回退ADDRLAGE/TEL道路地址与代表电话latitude/longitude/distanceKmLAT/LON/DISTANCE2距离四舍五入到千分之一千米bedStatus.emergencyRoomOperatingEMOGERYN急诊室运营与否bedStatus.inpatientBedsOperatingEMOGPRYN住院部/病床运营与否bedStatus.traumaCenterEMOGTRYN是否区域创伤中心권역외상센터bedStatus.pediatricSpecialtyCHILD_SPCLTY_AT是否小专科门bedStatus.currentGeneralCareAvailableOPERATIONYN当前一般诊疗可用与否bedStatus.pediatricNightCareNIGHTCAREYN小儿夜间诊疗与否bedStatus.holidayOpenHOLIDAYYN假日开放与否bedStatus.silson24LinkedSILSON24_CHK是否 119SILSON24联动机构schedules.monday..sunday / holiday / noteMONDAY…SUNDAY/HOLIDAY/OPN_BIGO各科室急诊/入馆等时间窗文本updatedAtEMOGUPDT20260311142633→2026-03-11T14:26:3309:00KSTsourceUrl—固定为 E-Gen 搜索页mapUrl—Kakao Map 分享链接格式https://map.kakao.com/link/map/编码名,lat,lon三态布尔是关键设计。toBooleanYesNo()src/parse.js把上游Y/N映射为true/false其余任意值空串、null、未知串一律映射为null。README.md 明确指出这是有意为之的三态语义上游省略或变更标志值时结果表达为“未知”而非误判为关闭。测试normalizeEmergencyRoomRows preserves unknown operation flags as nulltest/index.test.js专门验证EMOGERYN: 、EMOGPRYN: UNKNOWN都得到null。这正是文档“공개 데이터 한계 문구”原则的落地宁可说“未知”也不把缺失当成“未运营”。6.3 时间戳与真实数据样本parseEgenTimestamp()只接受yyyyMMddHHmmss形态并附加09:00时区。仓库测试夹具 test/fixtures/emergency-room-list.json 提供了一份贴近真实 E-Gen 返回形态的样本含listpaging.totalCount两种负载结构的兼容解析getEmergencyRoomRows其中강북삼성병원 条目EMOGERYN: Y、EMOGPRYN: Y对应emergencyRoomOperating: true、inpatientBedsOperating: true而EMOGTRYN: null对应traumaCenter: null——三个来源字段、三种取值形态在夹具中同时出现测试断言test/index.test.js逐字段核对。七、输入校验与失败模式包对输入采用“早失败fail fast”策略全部由 test/index.test.js 的...validates bounded inputs用例覆盖经纬度非有限数值 →latitude and longitude must be finite numbers.latitude: 91→latitude must be between -90 and 90.longitude: 181同理limit: 0→limit must be between 1 and 50.radius: 0→radius must be between 1 and 50.E-Gen 返回既非数组也非{ list: [...] }的负载 →Unexpected E-Gen emergency room payload shape.防止接口改版时被静默消费Kakao 面板 429 限速 → 携带status429与url的错误直接上抛不会降级请求层的错误处理在request()src/index.js中统一完成非 2xx 响应抛出附带status与url的 Error调用方如锚点解析循环可据此区分“可跳过的失效地点”与“必须中断的故障”。八、Agent 工作流与完成标准emergency-room-beds/instruction.md 定义了技能面向 Agent 的完整工作流与文档“사용 예”一节一致确认用户当前位置缺失时先问且只问一次固定文案调用searchNearbyEmergencyRoomsByLocationQuery()通常按距离序整理 3~5 家以内必须声明“这是公开 E-Gen nearby 列表结果精确的剩余病床数/使用率不提供”紧急情况附加 119 或医院电话确认引导。其 “Done when” 清单可作为自动化验收条件锚点已确认、找到了医院或给出了未找到的原因与下一步扩大范围的建议、披露了数据限制、紧急情况包含 119/电话引导。九、仓库内的相关文件索引路径内容docs/features/emergency-room-beds.md本文主体所依据的功能文档核心原则、示例、字段与参考表面emergency-room-beds/SKILL.md技能入口CLI 指令获取方式与硬性安全规则emergency-room-beds/instruction.mdAgent 工作流、完成标准、公开表面清单emergency-room-beds/skill.json技能元数据与 frontmatterpackages/emergency-room-beds/src/index.js端点常量、请求头、参数校验、锚点解析与主 APIpackages/emergency-room-beds/src/parse.jsKakao HTML/面板解析、打分排序、E-Gen 行归一化、Haversine、时间戳解析packages/emergency-room-beds/test/index.test.js注入fetchImpl的离线测试请求构造、三态标志、半径过滤、陈旧面板跳过、429 失败、输入校验packages/emergency-room-beds/test/fixtures/anchor-search.html、anchor-panel.json、emergency-room-list.json三份夹具packages/emergency-room-beds/README.md包级说明能力/非能力、公开 API 列表、结果字段十、局限性与设计取舍小结能力边界该包刻意不回答“现在还有几张床”。BED_COUNT_LIMITATION常量随meta返回Agent 指令层也强制复述该限制这与其“只做公开数据、不虚构实时数字”的原则一致。数据新鲜度updatedAt暴露了每条记录的上游更新时间夹具样本中两家医院的更新时间相差数周调用方应向用户呈现该时间而不是默认“实时”。依赖的脆弱性解析逻辑深度耦合 Kakao 移动端 HTML 结构li.search_item.base与 E-Gen 表单字段名一旦上游改版Unexpected E-Gen emergency room payload shape一类错误会显式暴露而非静默出错。运行前提Node.js 18全局fetch或注入fetchImpl包测试可离线执行node --test见 package.json 的test脚本。综上emergency-room-beds用一个“地名 → 锚点坐标 → 公开列表接口 → 三态运行标志”的短链路把韩国附近急诊室查询做成了一个边界清晰、可离线测试、且持续提醒用户数据局限的检索技能。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表