
k-skill court-auction-notice-search:韩国法院拍卖不动产卖却公告查询客户端的架构与实践【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill本文围绕 k-skill 仓库中court-auction-notice-search技能的实现说明instruction.md系统讲解这个面向韩国法院拍卖信息站courtauction.go.kr的 read-only 查询客户端它如何在没有官方 OPEN API 的情况下直接调用站内 WebSquare JSON XHR 端点如何用Workflow A/B/C 三条查询工作流 分层浏览器 fallback 保守限流预算的架构把卖却公告、案件详情、自由条件搜索转换为结构化 JSON读者读完后可以理解其端点协议、参数映射、反爬规避策略与完整调用方式Node.js API 与 CLI。一、技能定位能做什么、不能做什么该技能把韩国法院运营的官方법원경매정보法院拍卖信息站点courtauction.go.kr的卖却公告매각공고与案件信息转换为 Agent 可消费的 JSON 形式返回对应技能文件见 instruction.md、SKILL.mdnpm 包实现位于 packages/court-auction-notice-search当前版本 0.3.3要求 Node.js 18见 package.json。它明确标注自己是参考用工具实际投标前必须再核对法院原卖却公告原文。文档给出的典型使用场景When to use包括今天/明天在哪里开不动产拍卖给我看首尔中央地方法院 2026-04-27 的卖却公告把 기일입찰日期投标和 기간입찰期间投标分开看列出这条卖却公告里所有案件号、用途、地址、估价金额查案件号 2024타경100001 的进展找首尔江南区公寓、最低价 5 亿以下、流拍至少 1 次的物件给我法院事务所代码表同时明确不在 v1 范围内When not to use动产汽车·中型机械拍卖一次性拉取某个拍卖日所有法院的日程Workflow D另行跟踪拍卖物件照片 URL 暴露、拍卖物件说明书/现状调查书/估价书 PDF 下载投标书自动撰写与自动提交——投标必须本人到法院亲自完成本技能保持 read-only二、官方入口与内部端点协议层面的证据由于站点没有官方 OPEN API技能直接调用站内 WebSquare 平台的 JSON XHR 端点。instruction.md 的 Official surfaces 一节列出的官方入口为法院拍卖信息主站https://www.courtauction.go.kr不动产卖却公告入口/pgj/index.on?w2xPath/pgj/ui/pgj100/PGJ143M01.xmlpgjId143M01拍卖案件搜索入口/pgj/index.on?w2xPath/pgj/ui/pgj100/PGJ159M00.xmlpgjId159M00技能实际使用的 5 个端点在 src/transport/http.js 中以ENDPOINT_PATHS常量冻结与文档完全一致用途方法 路径请求体核心键卖却公告列表POST /pgj/pgj143/selectRletDspslPbanc.ondma_srchDspslPbanc.{srchYmd, cortOfcCd, bidDvsCd, srchBtnYn:Y}卖却公告详情POST /pgj/pgj143/selectRletDspslPbancDtl.ondma_srchGnrlPbanc.{cortOfcCd, dspslDxdyYmd, jdbnCd, ...}案件单条查询POST /pgj/pgj15A/selectAuctnCsSrchRslt.ondma_srchCsDtlInf.{cortOfcCd, csNo}物件自由条件搜索POST /pgj/pgjsearch/searchControllerMain.ondma_pageInfodma_srchGdsDtlSrchInfoPGJ151F00 → PGJ151M01 完整形状法院事务所代码全集POST /pgj/pgjComm/selectCortOfcCdLst.on{}从源码结构看两个协议细节值得注意Warmup 机制CourtAuctionHttpClient.warmup()会先 GET 对应端点的入口页面notices/courts 用PGJ143M01、案件详情用PGJ159M00、物件搜索用PGJ151F00见 ENDPOINT_WARMUP_PATH从响应头里摄取会话 Cookie如JSESSIONID、WMONID存入内存 cookieJar之后每次postJson才携带。这解释了文档中会话 Cookie 先打开入口页拿到的说法。提交标识头自由条件搜索端点额外注入submissionid: mf_wfm_mainFrame_sbm_selectGdsDtlSrch和sc-userid: SYSTEM两个非标准头ENDPOINT_SUBMISSION_ID模拟 WebSquare 框架的表单提交标识。该端点的 canonical 请求体形状是通过真实浏览器提交捕获的捕获脚本为 capture-pgj151-submit.cjs回归 fixture 固定在 canonical-search-body.json。三、Workflow A卖却公告 → 案件/物件展开文档定义的标准流程Workflow A向用户收取**卖却日期YYYY-MM-DD**以及可选的法院代码、投标区分调用searchSaleNotices({ date, courtCode, bidType })→ 得到当天·该法院的卖却公告卡片列表用户选中某张卡片后把卡片对象或raw原样传给getSaleNoticeDetail(notice)响应items[]中的每一项都带有caseNumber、usage、address、appraisedPrice、minimumSalePrice、remarks价格单位为元원的整数展示时应同时给出韩国式千位逗号与 亿/万 换算。源码层面的对应实现src/index.js有两个关键设计月粒度查询 日粒度过滤真实站点的搜索按钮只按YYYYMM月份提交srchYmd是 6 位月键因此toNoticeSearchDate()接受YYYY-MM/YYYYMM/YYYY-MM-DD/YYYYMMDD四种输入如果用户给的是具体某一天客户端先按月份查询、再对结果做dspslDxdyYmd exactYmd的本地过滤对外保持按日查的 API 兼容性。详情键复用getSaleNoticeDetail最省事的方式是把searchSaleNotices返回的items[i]直接传入——buildNoticeDetailBody()会从卡片raw中自动提取cortOfcCd、dspslDxdyYmd、jdbnCd列表响应里带有的加密令牌等键缺jdbnCd时直接抛错因为它是列表→详情链路的必要凭证。四、Workflow B案件号直接查询流程向用户收取法院事务所代码案件号如2024타경100001调用getCaseByCaseNumber({ courtCode, caseNumber })若返回found:false / status:204说明案件不存在或未公开——应让用户复核案件号格式与法院若found:true则caseInfo案件名·受理日·请求额·审判部·进行状态、items[]拍卖标的物——地址/分配请求期限、schedule[]各拍卖日的最低价/估价/结果、claimDeadline、relatedCases、stakeholders会被填充。案件号在 normalizeCaseNumber() 中做容错正则化2024타경100001原样保留2024-100001、2024_100001等输入会自动补全为2024타경100001。法院代码则被严格校验为^B\d{6}$形态如B000210 首尔中央地方法院非法格式直接报错而不是发请求避免无谓消耗调用预算。五、Workflow C不动产物件自由条件搜索这是三条工作流中参数最复杂的一条。文档把用户条件映射到searchProperties()的输入region: { sido, sigungu, dong }— 市道可以给代码如11或韩语名如서울특별시走 19 个市道的静态代码表市郡区/邑面洞没有静态表需直接给 raw 代码如{ sido:11, sigungu:11680, dong:11680101 }。给了地区条件时请求体走cortStDvs:2地番地址搜索模式不给地区则走cortStDvs:1卖却公告模式usage: { large, medium, small }— 用途大/中/小分类5 位上游代码如 建物 20000或大类韩文名토지/건물/차량및운송장비/기타priceRange— 最低卖却价格元为单位的{ min, max }允许小数appraisedPriceRange— 估价金额元为单位的{ min, max }允许小数saleDate—{ from, to }flbdCount— 流拍次数{ min, max }仅整数源码rangeValue(..., { integerOnly: true })对非数字串直接抛错area— 面积㎡{ min, max }允许小数pageSize— 每页结果数只允许上游 PGJ151 下拉框中确认过的10/20/50/100默认 101之类的任意值会被 live 端点返回 HTTP 400因此 buildPropertySearchBody() 用toPositiveInt(..., { allowed: [10,20,50,100] })在本地先行拒绝。调用searchProperties({ ... })即向POST /pgj/pgjsearch/searchControllerMain.on提交。响应items[]会把核心 raw 列统一规整为英文键规整逻辑在 src/normalize.js文档列出的映射包括saNo→caseNumbersrnSaNo/printCsNo→displayCaseNumbermokmulSer/maemulSer→itemNumberhjguSido hjguSigu hjguDong daepyoLotno buldNm→addressgamevalAmt→appraisedPriceminmaePrice→minimumSalePriceyuchalCnt→flbdCountmulStatcd→statusCodejinstatCd→progressStatusCodeboCd→courtCodejiwonNm→courtNamejpDeptNm→judgeDeptNamelclsUtilCd/mclsUtilCd/sclsUtilCd→usageCodes.{large,medium,small}srchHjguSidoCd/SiguCd/DongCd→regionCodes.{sido,sigungu,dong}xCordi/yCordi→coordinateswgs84Xcordi/Ycordi→coordinatesWgs84buldList/areaList/jimokList→buildingList/areaList/landCategoryListpjbBuldList→propertyDescriptionmulBigo→remarks代码表与同名码保护。getUsageCodes()静态返回 4 个大类10000토지、20000건물、30000차량및운송장비、40000기타及部分代表中/小分类来自上游selectLclLst.on捕获数据在 usage-codes.jsongetRegionCodes()返回 19 个市道 代码region-codes.json。市郡区/邑面洞因上游 cascade XHR 不稳定而不进静态表raw 代码原样透传无法识别的值一律fail-open 通过。一个容易踩坑的细节被 resolveUsageCode() 显式处理同名用途码可能同时存在于多个 level例如아파트既是大类名也是中小类名。指定 level 时若输入名只存在于别的level函数不返回错误的同级代码而是把原值透传fail-open让上游报错来暴露问题而不是静默发出一个看似正确的错误请求。六、反爬限流与会话预算slow-by-design 的实现文档 Throttling and call-budget rules 一节是该技能最有工程价值的部分站点按IP 粒度做非常激进的机器封锁文档给出的经验值约 16 次调用/30 秒即触发 1 小时封锁。技能以保守策略自保规则默认值源码位置 / 覆盖方式调用间最小延迟 jitter2000ms 0~1000msminDelayMs/jitterMs构造参数或--min-delay-ms 3000每会话调用预算10 次maxCallsPerSession或--max-calls新开会话 新CourtAuctionHttpClient超时15stimeoutMsAbortController实现显式封锁检测data.ipcheck false→ 立即 throwBLOCKED不自动重试postJson 尾段实现上ensureBudget() 在每次postJson前做两件事检查callsSoFar maxCallsPerSession超限抛BUDGET_EXCEEDED并按距上次调用的已流逝时间补齐jitter(minDelayMs, jitterMs) - elapsed的等待。预算与延迟都可通过CourtAuctionHttpClient构造参数覆盖fetchImpl、timeoutMs、minDelayMs、jitterMs、maxCallsPerSession均可注入便于测试用假时钟/假 fetch 驱动见 test/transport.test.js。被封锁的 IP 约 1 小时后自然恢复文档建议在等待期间换 IP/网络或人工用浏览器访问站点走一次解除封锁页面。Workflow C 的自由搜索端点被 WAF 更严格地对待searchProperties()在直接 HTTP 遇到WAF 型 HTTP 400时才会自动切 Playwright fallback显式封锁BLOCKED/ipcheckfalse默认立即中止只有用户明确传入{ fallbackOnBlocked: true }才重试。另有一条实操经验同一个 Playwright 客户端上searchProperties以 10~15 次间隔调用是稳定的更多 burst 调用需要在调用间 sleep 3~5 秒并换新客户端。七、浏览器 Fallback 的分层策略该技能的 transport 是三层设计README 称之为 3-tier transport直接 HTTPCourtAuctionHttpClient——卖却公告/案件/物件查询的正常路径不需要任何浏览器运行时浏览器 fallbackk-skill-browser-runtimeregular dependency 自动安装——优先顺序为用户已启动的 BrowserOS/runtime CDP → Chrome CDP平台感知macOS 为 Aside → BrowserOS → Chrome其他平台 BrowserOS 优先可用provider/cdpUrl选项或KSKILL_BROWSER_PROVIDER、KSKILL_BROWSEROS_CDP_URL、KSKILL_ASIDE_COMMAND环境变量选择本地 Playwright launchsrc/transport/playwright.js——运行时 provider 都不可达时才用rebrowser-playwright或playwright-core直接chromium.launch({ headless })模块都没装时首个 HTTP 400 失败会原样抛出。安全性约定见 searchProperties fallback 分支通过运行时连接的浏览器属于用户fallback 结束只清理 adapter 创建的 page/context/tab用runtime.disconnectBrowser断开自动化连接绝不关闭用户的 BrowserOS/Aside/Chrome profile本地 launch 的浏览器则全部 closePLAYWRIGHT_UNAVAILABLE模块缺失、UNKNOWN_PROVIDER非法 provider是 fail-closed立即抛出运行时UNAVAILABLE/探测失败才自动落到本地 launch不自动绕过登录/CAPTCHA/支付/电子签名等边界。八、错误模型与处置文档 Block / Error handling 定义的 5 种错误码与源码错误构造器createBlockedError / createUpstreamError / createNetworkError一一对应error.code含义处置建议BLOCKEDdata.ipcheck false站点显式封锁等待约 1 小时后换 IP 重试把封锁事实与等待时间如实告知用户BUDGET_EXCEEDED会话预算耗尽有意设计的安全装置需要更多查询时新开会话或显式调大maxCallsPerSession同时提示封锁风险UPSTREAM_ERROR站点返回通用错误常见于会话过期或错误的jdbnCd重新 warmup 再来error.upstreamMessage可读NETWORK_ERROR超时/连接失败error.cause保留原始错误PLAYWRIGHT_UNAVAILABLE显式要用 Playwright fallback 但模块未安装npm i rebrowser-playwright或npm i playwright-core九、完整示例Node.js API 与 CLINode.js 示例继承自 instruction.mdconst { searchSaleNotices, getSaleNoticeDetail, getCaseByCaseNumber, getCourtCodes } require(court-auction-notice-search); async function main() { const courts await getCourtCodes(); console.log(법원사무소 ${courts.count}개 로드됨); const notices await searchSaleNotices({ date: 2026-04-27, courtCode: B000210, bidType: date }); console.log(서울중앙지방법원 매각공고 ${notices.count}건); if (notices.items.length 0) { const detail await getSaleNoticeDetail(notices.items[0]); for (const item of detail.items) { console.log( ${item.caseNumber} (${item.usage}) — 감정 ${item.appraisedPrice}원 / 최저 ${item.minimumSalePrice}원 ); console.log( 주소: ${item.address}); } } const caseInfo await getCaseByCaseNumber({ courtCode: B000210, caseNumber: 2024타경100001 }); if (caseInfo.found) { console.log(사건명: ${caseInfo.caseInfo.caseName}); console.log(매각기일 횟수: ${caseInfo.schedule.length}); } } main().catch((error) { if (error.code BLOCKED) { console.error([BLOCKED] 사이트가 1시간 차단했습니다. 다른 IP에서 다시 시도하거나 1시간 뒤 재시도하세요.); } else { console.error(error); } process.exitCode 1; });安装方式为npm install court-auction-notice-search需要 Playwright fallback 时可选安装rebrowser-playwright或playwright-core。限流参数可用自定义客户端覆盖const { CourtAuctionHttpClient } require(court-auction-notice-search); const client new CourtAuctionHttpClient({ minDelayMs: 3000, // 更慢 jitterMs: 2000, maxCallsPerSession: 5, // 更保守 timeoutMs: 30000 }); const notices await searchSaleNotices({ date: 2026-04-27, client });CLI 示例继承自 instruction.md# 1. 법원사무소 코드표 court-auction-notice-search codes courts --pretty | head -40 # 2. 입찰구분 (정적 코드) court-auction-notice-search codes bid-types --pretty court-auction-notice-search codes usages --pretty court-auction-notice-search codes regions --pretty # 3. 매각공고 목록 court-auction-notice-search notices --date 2026-04 --court-code B000210 --bid-type date --pretty # 4. 매각공고 상세 — list 응답의 row 의 raw 필드를 그대로 detail 호출에 사용한다. # (CLI 단발 호출에서는 list - detail 로 결과를 파이프할 수 있도록 jq 등을 함께 사용) # 5. 사건번호 직접 조회 court-auction-notice-search case --court-code B000210 --case-number 2024타경100001 --pretty # 6. 자유 조건검색 court-auction-notice-search search --sido 서울특별시 --sigungu 11680 --usage-large 건물 --usage-medium 21200 \ --price-min 100000000 --price-max 500000000 --sale-from 2026-05-01 --sale-to 2026-05-20 --prettyCLI 入口为 src/cli.js行为覆盖在 cli.test.js 中接口与响应 fixture如 notices-sample.json、blocked.json位于packages/court-auction-notice-search/test/fixtures/可以用npm run test即node --test本地复验。十、Mandatory honest framing 与完成标准该技能要求 Agent 向用户始终披露四条事实Mandatory honest framing数据只是原样搬运法院拍卖信息站的公开信息投标前必须再核对法院原卖却公告站点对自动化调用非常敏感快速连续查询会导致 IP 被封锁约 1 小时封锁期间同一 IP 需等待价格估价/最低卖却价、拍卖日、拍卖场所均为公告时点的值可能因更正·撤回·延期而变化关注correctionCount、cancellationCount字段本技能是read-only不自动化投标本身。文档最后以 Done when 给出一次合格任务执行的验收清单已向用户告知 IP 封锁风险与仅供参考、投标前核对原文的声明卖却公告展开后返回了填充了caseNumber/usage/address/appraisedPrice/minimumSalePrice的 JSONfound:false时给了用户可执行的后续指引发生封锁时立即停止而不是自动重试任务结束后告知用户剩余调用预算明确还能否追加调用。小结court-auction-notice-search展示了在没有官方 API 的强反爬政府站点上做保守只读自动化的一套完整工程范式以捕获的 XHR 端点为协议底座instruction.md 定义 5 个端点与请求体形状用月查询日过滤、案件号正则化、fail-open 代码表等手法把脆弱的上游形状收敛为稳定 JSON 契约src/index.js src/normalize.js再叠加最小延迟 jitter、会话预算、ipcheck显式封锁检测src/transport/http.js与仅在 WAF 400 时才启用的分层浏览器 fallbacksrc/transport/playwright.js并以不自动重试、如实披露封锁、read-only 边界作为安全底线。对需要在类似反爬环境中构建 Agent 数据工具的场景这套slow-by-design 预算制 明确错误模型的结构可以直接借鉴。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考