@nomadamas/k-skill 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/k-skill.js +60 -0
- package/package.json +37 -0
- package/skills/assembly-bill-vote-search/instruction.md +111 -0
- package/skills/assembly-bill-vote-search/skill.json +10 -0
- package/skills/biz-health-check/instruction.md +69 -0
- package/skills/biz-health-check/scripts/biz_health_check.py +163 -0
- package/skills/biz-health-check/skill.json +10 -0
- package/skills/bok-ecos-stats/instruction.md +95 -0
- package/skills/bok-ecos-stats/scripts/bok_ecos.py +302 -0
- package/skills/bok-ecos-stats/skill.json +10 -0
- package/skills/building-register-search/instruction.md +69 -0
- package/skills/building-register-search/scripts/building_register.py +309 -0
- package/skills/building-register-search/scripts/building_register_xml.py +32 -0
- package/skills/building-register-search/skill.json +9 -0
- package/skills/bunjang-search/instruction.md +154 -0
- package/skills/bunjang-search/skill.json +10 -0
- package/skills/catchtable-sniper/instruction.md +270 -0
- package/skills/catchtable-sniper/skill.json +9 -0
- package/skills/cheap-gas-nearby/instruction.md +107 -0
- package/skills/cheap-gas-nearby/skill.json +10 -0
- package/skills/corporate-registration-consulting/instruction.md +117 -0
- package/skills/corporate-registration-consulting/scripts/fill_official_hwp.py +106 -0
- package/skills/corporate-registration-consulting/skill.json +8 -0
- package/skills/coupang-product-search/instruction.md +219 -0
- package/skills/coupang-product-search/scripts/coupang_partners_mcp.py +146 -0
- package/skills/coupang-product-search/skill.json +10 -0
- package/skills/court-auction-notice-search/instruction.md +201 -0
- package/skills/court-auction-notice-search/skill.json +9 -0
- package/skills/court-payment-order-assistant/instruction.md +120 -0
- package/skills/court-payment-order-assistant/skill.json +10 -0
- package/skills/d2b-notice-search/instruction.md +117 -0
- package/skills/d2b-notice-search/skill.json +10 -0
- package/skills/daangn-cars-search/instruction.md +91 -0
- package/skills/daangn-cars-search/scripts/daangn_cars.py +72 -0
- package/skills/daangn-cars-search/skill.json +9 -0
- package/skills/daangn-jobs-search/instruction.md +90 -0
- package/skills/daangn-jobs-search/scripts/daangn_jobs.py +98 -0
- package/skills/daangn-jobs-search/skill.json +9 -0
- package/skills/daangn-realty-search/instruction.md +114 -0
- package/skills/daangn-realty-search/scripts/daangn_detail_ld.py +76 -0
- package/skills/daangn-realty-search/scripts/daangn_realty.py +216 -0
- package/skills/daangn-realty-search/scripts/daangn_relay_store.py +174 -0
- package/skills/daangn-realty-search/skill.json +8 -0
- package/skills/daangn-used-goods-search/instruction.md +90 -0
- package/skills/daangn-used-goods-search/scripts/daangn_used_goods.py +80 -0
- package/skills/daangn-used-goods-search/skill.json +9 -0
- package/skills/daishin-report-search/instruction.md +138 -0
- package/skills/daishin-report-search/skill.json +10 -0
- package/skills/daiso-product-search/instruction.md +172 -0
- package/skills/daiso-product-search/skill.json +8 -0
- package/skills/danawa-price-search/instruction.md +183 -0
- package/skills/danawa-price-search/scripts/danawa_search.py +354 -0
- package/skills/danawa-price-search/skill.json +8 -0
- package/skills/delivery-tracking/instruction.md +358 -0
- package/skills/delivery-tracking/skill.json +8 -0
- package/skills/donation-place-search/instruction.md +129 -0
- package/skills/donation-place-search/skill.json +9 -0
- package/skills/emergency-room-beds/instruction.md +82 -0
- package/skills/emergency-room-beds/skill.json +8 -0
- package/skills/ev-charger-nearby/instruction.md +80 -0
- package/skills/ev-charger-nearby/scripts/ev_charger.py +222 -0
- package/skills/ev-charger-nearby/skill.json +10 -0
- package/skills/ev-subsidy-status/instruction.md +165 -0
- package/skills/ev-subsidy-status/skill.json +10 -0
- package/skills/express-bus-booking/instruction.md +207 -0
- package/skills/express-bus-booking/references/kobus-http-flow.md +159 -0
- package/skills/express-bus-booking/scripts/kobus_express_booking.py +243 -0
- package/skills/express-bus-booking/skill.json +8 -0
- package/skills/fine-dust-location/instruction.md +89 -0
- package/skills/fine-dust-location/skill.json +9 -0
- package/skills/flight-ticket-search/instruction.md +237 -0
- package/skills/flight-ticket-search/scripts/flight_ticket_search.py +501 -0
- package/skills/flight-ticket-search/skill.json +9 -0
- package/skills/foresttrip-vacancy/instruction.md +167 -0
- package/skills/foresttrip-vacancy/scripts/run_foresttrip_vacancy.py +549 -0
- package/skills/foresttrip-vacancy/skill.json +10 -0
- package/skills/fsc-corporate-info/instruction.md +57 -0
- package/skills/fsc-corporate-info/scripts/fsc_corporate_info.py +113 -0
- package/skills/fsc-corporate-info/skill.json +10 -0
- package/skills/g2b-order-plan-search/instruction.md +131 -0
- package/skills/g2b-order-plan-search/scripts/g2b_order_plan.py +158 -0
- package/skills/g2b-order-plan-search/skill.json +10 -0
- package/skills/g2b-sanctioned-supplier/instruction.md +61 -0
- package/skills/g2b-sanctioned-supplier/scripts/g2b_sanctioned_supplier.py +114 -0
- package/skills/g2b-sanctioned-supplier/skill.json +10 -0
- package/skills/gangnamunni-clinic-search/instruction.md +113 -0
- package/skills/gangnamunni-clinic-search/skill.json +9 -0
- package/skills/geeknews-search/instruction.md +69 -0
- package/skills/geeknews-search/scripts/geeknews_search.py +296 -0
- package/skills/geeknews-search/skill.json +8 -0
- package/skills/gongsijiga-search/instruction.md +128 -0
- package/skills/gongsijiga-search/skill.json +9 -0
- package/skills/gov-overseas-trip-report/instruction.md +488 -0
- package/skills/gov-overseas-trip-report/scripts/gov_overseas_trip_report.py +1206 -0
- package/skills/gov-overseas-trip-report/skill.json +9 -0
- package/skills/han-river-water-level/instruction.md +83 -0
- package/skills/han-river-water-level/skill.json +10 -0
- package/skills/highway-traffic-status/instruction.md +88 -0
- package/skills/highway-traffic-status/scripts/highway_traffic.py +315 -0
- package/skills/highway-traffic-status/skill.json +11 -0
- package/skills/hipass-receipt/instruction.md +97 -0
- package/skills/hipass-receipt/skill.json +10 -0
- package/skills/hola-poke-yeoksam/instruction.md +247 -0
- package/skills/hola-poke-yeoksam/skill.json +8 -0
- package/skills/household-waste-info/instruction.md +117 -0
- package/skills/household-waste-info/skill.json +10 -0
- package/skills/housing-official-price/instruction.md +177 -0
- package/skills/housing-official-price/skill.json +10 -0
- package/skills/hwp/instruction.md +206 -0
- package/skills/hwp/skill.json +8 -0
- package/skills/intercity-bus-booking/instruction.md +189 -0
- package/skills/intercity-bus-booking/references/tmoney-intercity-http-flow.md +126 -0
- package/skills/intercity-bus-booking/scripts/intercity_bus_search.py +381 -0
- package/skills/intercity-bus-booking/skill.json +8 -0
- package/skills/iros-registry-automation/instruction.md +229 -0
- package/skills/iros-registry-automation/scripts/iros_pdf_summary.py +249 -0
- package/skills/iros-registry-automation/scripts/upstream.pin +1 -0
- package/skills/iros-registry-automation/skill.json +9 -0
- package/skills/job-posting-match/instruction.md +130 -0
- package/skills/job-posting-match/scripts/job_posting_match.py +396 -0
- package/skills/job-posting-match/scripts/test_job_posting_match.py +54 -0
- package/skills/job-posting-match/skill.json +8 -0
- package/skills/jobkorea-talent-search/instruction.md +118 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_models.py +27 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_parse.py +186 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search.py +94 -0
- package/skills/jobkorea-talent-search/scripts/jobkorea_talent_search_condition.py +136 -0
- package/skills/jobkorea-talent-search/scripts/test_jobkorea_talent_search.py +76 -0
- package/skills/jobkorea-talent-search/skill.json +9 -0
- package/skills/joseon-sillok-search/instruction.md +76 -0
- package/skills/joseon-sillok-search/scripts/sillok_search.py +552 -0
- package/skills/joseon-sillok-search/skill.json +8 -0
- package/skills/k-dart/instruction.md +406 -0
- package/skills/k-dart/skill.json +8 -0
- package/skills/k-schoollunch-menu/instruction.md +109 -0
- package/skills/k-schoollunch-menu/skill.json +9 -0
- package/skills/k-skill-cleaner/instruction.md +80 -0
- package/skills/k-skill-cleaner/scripts/k_skill_cleaner.py +410 -0
- package/skills/k-skill-cleaner/skill.json +8 -0
- package/skills/k-skill-setup/instruction.md +253 -0
- package/skills/k-skill-setup/skill.json +11 -0
- package/skills/kakao-bar-nearby/instruction.md +76 -0
- package/skills/kakao-bar-nearby/skill.json +8 -0
- package/skills/kakao-map/instruction.md +176 -0
- package/skills/kakao-map/skill.json +10 -0
- package/skills/kakaotalk-mac/instruction.md +189 -0
- package/skills/kakaotalk-mac/skill.json +8 -0
- package/skills/kbl-results/instruction.md +89 -0
- package/skills/kbl-results/skill.json +9 -0
- package/skills/kbo-results/instruction.md +82 -0
- package/skills/kbo-results/skill.json +8 -0
- package/skills/keris-academic-search/instruction.md +81 -0
- package/skills/keris-academic-search/scripts/keris_academic.py +210 -0
- package/skills/keris-academic-search/skill.json +10 -0
- package/skills/kleague-results/instruction.md +92 -0
- package/skills/kleague-results/skill.json +8 -0
- package/skills/kopis-performance-search/instruction.md +109 -0
- package/skills/kopis-performance-search/skill.json +10 -0
- package/skills/korea-weather/instruction.md +93 -0
- package/skills/korea-weather/skill.json +10 -0
- package/skills/korean-character-count/instruction.md +87 -0
- package/skills/korean-character-count/scripts/korean_character_count.js +268 -0
- package/skills/korean-character-count/skill.json +8 -0
- package/skills/korean-cinema-search/instruction.md +177 -0
- package/skills/korean-cinema-search/skill.json +8 -0
- package/skills/korean-heritage-search/instruction.md +106 -0
- package/skills/korean-heritage-search/scripts/korean_heritage_search.py +321 -0
- package/skills/korean-heritage-search/skill.json +8 -0
- package/skills/korean-holiday-calendar/instruction.md +97 -0
- package/skills/korean-holiday-calendar/skill.json +9 -0
- package/skills/korean-humanizer/instruction.md +389 -0
- package/skills/korean-humanizer/references/ai-tell-taxonomy.md +147 -0
- package/skills/korean-humanizer/skill.json +8 -0
- package/skills/korean-jangbu-for/instruction.md +133 -0
- package/skills/korean-jangbu-for/scripts/install.sh +237 -0
- package/skills/korean-jangbu-for/scripts/upstream.pin +1 -0
- package/skills/korean-jangbu-for/skill.json +8 -0
- package/skills/korean-law-search/instruction.md +126 -0
- package/skills/korean-law-search/skill.json +10 -0
- package/skills/korean-marathon-schedule/instruction.md +111 -0
- package/skills/korean-marathon-schedule/skill.json +9 -0
- package/skills/korean-middle-korean/instruction.md +79 -0
- package/skills/korean-middle-korean/scripts/korean_middle_korean.js +214 -0
- package/skills/korean-middle-korean/skill.json +8 -0
- package/skills/korean-patent-search/instruction.md +79 -0
- package/skills/korean-patent-search/scripts/patent_search.py +409 -0
- package/skills/korean-patent-search/skill.json +9 -0
- package/skills/korean-privacy-terms/instruction.md +128 -0
- package/skills/korean-privacy-terms/scripts/install.sh +108 -0
- package/skills/korean-privacy-terms/scripts/upstream.pin +1 -0
- package/skills/korean-privacy-terms/skill.json +8 -0
- package/skills/korean-scholarship-search/instruction.md +317 -0
- package/skills/korean-scholarship-search/references/report-format.md +40 -0
- package/skills/korean-scholarship-search/references/school-discovery.md +61 -0
- package/skills/korean-scholarship-search/references/search-clues.md +58 -0
- package/skills/korean-scholarship-search/references/source-patterns.md +67 -0
- package/skills/korean-scholarship-search/scripts/scholarship_filter.py +811 -0
- package/skills/korean-scholarship-search/scripts/test_scholarship_filter.py +224 -0
- package/skills/korean-scholarship-search/scripts/university_search_plan.py +148 -0
- package/skills/korean-scholarship-search/skill.json +8 -0
- package/skills/korean-slang-writing/instruction.md +181 -0
- package/skills/korean-slang-writing/scripts/_slang_http.py +91 -0
- package/skills/korean-slang-writing/scripts/slang_lookup.py +291 -0
- package/skills/korean-slang-writing/scripts/slang_search.py +284 -0
- package/skills/korean-slang-writing/skill.json +8 -0
- package/skills/korean-spell-check/instruction.md +105 -0
- package/skills/korean-spell-check/scripts/korean_spell_check.py +523 -0
- package/skills/korean-spell-check/skill.json +9 -0
- package/skills/korean-stock-search/instruction.md +194 -0
- package/skills/korean-stock-search/skill.json +10 -0
- package/skills/korean-transit-route/instruction.md +113 -0
- package/skills/korean-transit-route/skill.json +10 -0
- package/skills/kosis-stats/instruction.md +232 -0
- package/skills/kosis-stats/references/kosis-openapi-guide.md +171 -0
- package/skills/kosis-stats/scripts/run_kosis_stats.py +896 -0
- package/skills/kosis-stats/skill.json +9 -0
- package/skills/kr-whois-lookup/instruction.md +107 -0
- package/skills/kr-whois-lookup/skill.json +10 -0
- package/skills/kstartup-search/instruction.md +186 -0
- package/skills/kstartup-search/scripts/run_kstartup.py +424 -0
- package/skills/kstartup-search/skill.json +11 -0
- package/skills/ktx-booking/instruction.md +244 -0
- package/skills/ktx-booking/skill.json +10 -0
- package/skills/lck-analytics/instruction.md +192 -0
- package/skills/lck-analytics/scripts/_lib.js +103 -0
- package/skills/lck-analytics/scripts/analyze-live-game.js +52 -0
- package/skills/lck-analytics/scripts/build-match-report.js +44 -0
- package/skills/lck-analytics/scripts/sync-oracle.js +50 -0
- package/skills/lck-analytics/skill.json +9 -0
- package/skills/lh-notice-search/instruction.md +206 -0
- package/skills/lh-notice-search/skill.json +10 -0
- package/skills/library-book-search/instruction.md +139 -0
- package/skills/library-book-search/skill.json +9 -0
- package/skills/local-election-candidate-search/instruction.md +77 -0
- package/skills/local-election-candidate-search/skill.json +8 -0
- package/skills/localdata-business-status/instruction.md +64 -0
- package/skills/localdata-business-status/scripts/localdata_business_status.py +206 -0
- package/skills/localdata-business-status/skill.json +8 -0
- package/skills/lotto-results/instruction.md +80 -0
- package/skills/lotto-results/skill.json +8 -0
- package/skills/lovebug-report/instruction.md +185 -0
- package/skills/lovebug-report/skill.json +9 -0
- package/skills/market-kurly-search/instruction.md +125 -0
- package/skills/market-kurly-search/skill.json +8 -0
- package/skills/mfds-drug-safety/instruction.md +86 -0
- package/skills/mfds-drug-safety/scripts/mfds_drug_safety.py +184 -0
- package/skills/mfds-drug-safety/skill.json +10 -0
- package/skills/mfds-food-safety/instruction.md +126 -0
- package/skills/mfds-food-safety/scripts/mfds_food_safety.py +281 -0
- package/skills/mfds-food-safety/skill.json +10 -0
- package/skills/myrealtrip-search/instruction.md +239 -0
- package/skills/myrealtrip-search/scripts/myrealtrip_mcp.py +194 -0
- package/skills/myrealtrip-search/scripts/test_myrealtrip_mcp.py +99 -0
- package/skills/myrealtrip-search/skill.json +9 -0
- package/skills/naming-house/instruction.md +146 -0
- package/skills/naming-house/skill.json +8 -0
- package/skills/national-pension-workplace/instruction.md +64 -0
- package/skills/national-pension-workplace/scripts/national_pension_workplace.py +113 -0
- package/skills/national-pension-workplace/skill.json +10 -0
- package/skills/naver-ad-performance/instruction.md +108 -0
- package/skills/naver-ad-performance/scripts/naver_ad_performance.py +240 -0
- package/skills/naver-ad-performance/skill.json +9 -0
- package/skills/naver-blog-research/instruction.md +128 -0
- package/skills/naver-blog-research/scripts/_naver_http.py +58 -0
- package/skills/naver-blog-research/scripts/naver_download_images.py +233 -0
- package/skills/naver-blog-research/scripts/naver_read.py +256 -0
- package/skills/naver-blog-research/scripts/naver_search.py +192 -0
- package/skills/naver-blog-research/skill.json +8 -0
- package/skills/naver-news-search/instruction.md +103 -0
- package/skills/naver-news-search/skill.json +10 -0
- package/skills/naver-shopping-search/instruction.md +94 -0
- package/skills/naver-shopping-search/skill.json +11 -0
- package/skills/nhis-care-checkup-search/instruction.md +116 -0
- package/skills/nhis-care-checkup-search/skill.json +10 -0
- package/skills/nts-business-registration/instruction.md +115 -0
- package/skills/nts-business-registration/scripts/nts_business_registration.py +215 -0
- package/skills/nts-business-registration/skill.json +10 -0
- package/skills/nts-tax-delinquency/instruction.md +54 -0
- package/skills/nts-tax-delinquency/scripts/nts_tax_delinquency.py +150 -0
- package/skills/nts-tax-delinquency/skill.json +8 -0
- package/skills/ohou-today-deal/instruction.md +182 -0
- package/skills/ohou-today-deal/scripts/ohou_today_deal.py +369 -0
- package/skills/ohou-today-deal/skill.json +9 -0
- package/skills/olive-young-search/instruction.md +154 -0
- package/skills/olive-young-search/skill.json +8 -0
- package/skills/parking-lot-search/instruction.md +96 -0
- package/skills/parking-lot-search/skill.json +9 -0
- package/skills/popbill/instruction.md +146 -0
- package/skills/popbill/scripts/popbill_cli.py +284 -0
- package/skills/popbill/scripts/popbill_registry.py +54 -0
- package/skills/popbill/scripts/popbill_safety.py +37 -0
- package/skills/popbill/scripts/popbill_templates.py +71 -0
- package/skills/popbill/skill.json +9 -0
- package/skills/public-restroom-nearby/instruction.md +89 -0
- package/skills/public-restroom-nearby/skill.json +9 -0
- package/skills/real-estate-search/instruction.md +172 -0
- package/skills/real-estate-search/skill.json +10 -0
- package/skills/rhwp-advanced/instruction.md +145 -0
- package/skills/rhwp-advanced/skill.json +8 -0
- package/skills/rhwp-edit/instruction.md +153 -0
- package/skills/rhwp-edit/skill.json +8 -0
- package/skills/s2b-notice-search/instruction.md +66 -0
- package/skills/s2b-notice-search/skill.json +9 -0
- package/skills/saju-fortune/instruction.md +177 -0
- package/skills/saju-fortune/skill.json +8 -0
- package/skills/saramin-talent-search/instruction.md +119 -0
- package/skills/saramin-talent-search/skill.json +9 -0
- package/skills/seoul-bike/instruction.md +83 -0
- package/skills/seoul-bike/scripts/seoul_bike.py +247 -0
- package/skills/seoul-bike/skill.json +10 -0
- package/skills/seoul-density/instruction.md +109 -0
- package/skills/seoul-density/scripts/seoul_density.py +271 -0
- package/skills/seoul-density/skill.json +10 -0
- package/skills/seoul-subway-arrival/instruction.md +85 -0
- package/skills/seoul-subway-arrival/skill.json +9 -0
- package/skills/sh-notice-search/instruction.md +150 -0
- package/skills/sh-notice-search/skill.json +9 -0
- package/skills/srt-booking/instruction.md +181 -0
- package/skills/srt-booking/scripts/srt_booking.py +272 -0
- package/skills/srt-booking/scripts/srt_seats.py +156 -0
- package/skills/srt-booking/skill.json +20 -0
- package/skills/subway-lost-property/instruction.md +93 -0
- package/skills/subway-lost-property/scripts/subway_lost_property.py +244 -0
- package/skills/subway-lost-property/skill.json +8 -0
- package/skills/ticket-availability/instruction.md +175 -0
- package/skills/ticket-availability/scripts/ticket_availability.py +430 -0
- package/skills/ticket-availability/skill.json +9 -0
- package/skills/toss-securities/instruction.md +116 -0
- package/skills/toss-securities/skill.json +9 -0
- package/skills/used-car-price-search/instruction.md +109 -0
- package/skills/used-car-price-search/skill.json +8 -0
- package/skills/yebigun-training/instruction.md +177 -0
- package/skills/yebigun-training/skill.json +9 -0
- package/skills/zipcode-search/instruction.md +159 -0
- package/skills/zipcode-search/scripts/zipcode_search.py +150 -0
- package/skills/zipcode-search/skill.json +8 -0
- package/src/assemble.js +134 -0
- package/src/detect.js +18 -0
- package/templates/action-account.md +4 -0
- package/templates/action-booking.md +5 -0
- package/templates/action-commerce.md +5 -0
- package/templates/action-communication.md +5 -0
- package/templates/action-submission.md +5 -0
- package/templates/browser.md +4 -0
- package/templates/core.md +5 -0
- package/templates/hard-boundary.md +3 -0
- package/templates/local.md +2 -0
- package/templates/lookup.md +2 -0
- package/templates/proxy.md +2 -0
- package/templates/vault.md +4 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Naver News Search
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
`k-skill-proxy`가 네이버 검색 Open API 뉴스 검색(`openapi.naver.com/v1/search/news.json`)을 호출해 최근 뉴스 기사 후보를 정규화된 JSON 으로 돌려준다.
|
|
6
|
+
|
|
7
|
+
- 검색어 기반 최신 뉴스 후보 목록을 정리한다.
|
|
8
|
+
- 기사 제목, 본문 요약(description), 발행 시각(`pub_date`/`pub_date_iso`), 네이버 뉴스 링크(`link`), 원문 링크(`original_link`)를 제공한다.
|
|
9
|
+
- Naver 가 응답에 섞어주는 `<b>` 하이라이트 태그와 HTML entity(`&`, `"`, `<` 등)는 proxy 쪽에서 미리 제거한다.
|
|
10
|
+
- 사용자 로그인·개인화·회원 전용 뉴스는 지원하지 않는다.
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
- "오늘 삼성전자 관련 뉴스 찾아줘"
|
|
15
|
+
- "최근 AI 규제 관련 기사 최신순으로 5개만"
|
|
16
|
+
- "네이버 뉴스에서 금리 인상 기사 요약해줘"
|
|
17
|
+
- "이 사건 기사 링크 정리해줘"
|
|
18
|
+
|
|
19
|
+
## When not to use
|
|
20
|
+
|
|
21
|
+
- 특정 언론사 내부 유료 기사, 로그인 뒤에만 보이는 기사
|
|
22
|
+
- 기사 본문 전체가 필요한 경우 (API 는 요약 description 만 제공)
|
|
23
|
+
- 주식/환율/부동산 실시간 시세 (뉴스 API 는 기사만 다룬다)
|
|
24
|
+
- 차단/CAPTCHA 우회가 필요한 경로
|
|
25
|
+
|
|
26
|
+
## Required inputs
|
|
27
|
+
|
|
28
|
+
검색어(`q` / `query`)가 없으면 먼저 물어본다.
|
|
29
|
+
|
|
30
|
+
권장 질문:
|
|
31
|
+
|
|
32
|
+
> 찾을 네이버 뉴스 검색어를 알려주세요. 예: "삼성전자 실적", "인공지능 규제", "금리 인상"
|
|
33
|
+
|
|
34
|
+
단어 2글자 미만이면 의미가 불분명하므로 되묻는다.
|
|
35
|
+
|
|
36
|
+
## Proxy endpoint
|
|
37
|
+
|
|
38
|
+
기본값은 public/read-only/no-auth 프록시다. 사용자는 **네이버 개발자 센터 Client ID/Secret 을 발급받지 않아도 된다**. upstream key(`NAVER_SEARCH_CLIENT_ID` / `NAVER_SEARCH_CLIENT_SECRET`)는 프록시 서버에서만 주입한다.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
curl -fsS --get "${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}/v1/naver-news/search" \
|
|
42
|
+
--data-urlencode 'q=삼성전자 실적' \
|
|
43
|
+
--data-urlencode 'display=10' \
|
|
44
|
+
--data-urlencode 'sort=date'
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
쿼리 파라미터:
|
|
48
|
+
|
|
49
|
+
- `q` 또는 `query` — 검색어. 2글자 이상.
|
|
50
|
+
- `display` — 반환 건수. 기본 10, 범위 1~100.
|
|
51
|
+
- `start` — 검색 시작 위치(1-indexed). 기본 1, 최대 1000. **`start + display - 1` 은 1000 을 넘을 수 없다**: 예를 들어 `start=1000 & display=100` 은 `1099`번째 아이템을 요구하므로 proxy가 업스트림 호출 전에 `400 bad_request`("start + display exceeds Naver's 1000-item search window")로 거절한다. 아주 오래된 기사를 찾으려면 검색어를 좁히는 것이 낫다.
|
|
52
|
+
- `sort` — `sim`(유사도 순, 기본값) 또는 `date`(최신순). 그 외 값은 `sim` 으로 fallback.
|
|
53
|
+
|
|
54
|
+
응답 주요 필드:
|
|
55
|
+
|
|
56
|
+
- `items[].title` — `<b>` 태그·HTML entity 가 제거된 기사 제목
|
|
57
|
+
- `items[].description` — `<b>` 태그·HTML entity 가 제거된 기사 요약
|
|
58
|
+
- `items[].link` — 네이버 뉴스 redirect 링크
|
|
59
|
+
- `items[].original_link` — 원문 뉴스 링크(빈 문자열이면 `null`)
|
|
60
|
+
- `items[].pub_date` — 원본 RFC822 형식 발행 시각
|
|
61
|
+
- `items[].pub_date_iso` — 파싱된 ISO-8601(UTC) 발행 시각. 파싱 실패시 `null`
|
|
62
|
+
- `meta.extraction` — 항상 `naver-openapi`
|
|
63
|
+
- `meta.total`, `meta.start`, `meta.display`, `meta.last_build_date`, `meta.sort`
|
|
64
|
+
|
|
65
|
+
## Workflow
|
|
66
|
+
|
|
67
|
+
1. 검색어를 확인한다. (없거나 2글자 미만이면 먼저 물어본다)
|
|
68
|
+
2. 사용자가 "최신순"을 원하면 `sort=date`, 그 외에는 `sort=sim` 으로 호출한다.
|
|
69
|
+
3. `GET /v1/naver-news/search` 를 호출한다.
|
|
70
|
+
4. `items` 가 있으면 상위 3~5건을 제목, 발행 시각(KST 기준으로 재포맷해도 좋다), 요약, 링크로 짧게 정리한다.
|
|
71
|
+
5. 발행 시각은 `pub_date_iso` 기준으로 오늘/어제 표기를 붙여도 된다. (KST = UTC+9)
|
|
72
|
+
6. `items` 가 비었거나 `upstream_error` 가 나면 재시도하지 말고 검색어를 좁혀 다시 물어본다.
|
|
73
|
+
|
|
74
|
+
## Response style
|
|
75
|
+
|
|
76
|
+
- 기사 제목/요약은 API 가 돌려준 원문만 인용한다. 원문에 없는 해설은 덧붙이지 않는다.
|
|
77
|
+
- 기사 발행 시각은 "KST 기준 {YYYY-MM-DD HH:mm}" 또는 "{n}시간 전" 정도로 짧게 표시한다.
|
|
78
|
+
- 원문 링크(`original_link`)가 있으면 우선 노출하고, 없으면 `link`(네이버 뉴스 redirect)를 안내한다.
|
|
79
|
+
- 서로 다른 언론사가 같은 사건을 다루면 링크 2~3개를 병렬로 제시해 사용자가 비교할 수 있게 한다.
|
|
80
|
+
- `description` 은 요약이므로, 팩트로 단정하지 말고 "기사 요약에 따르면"이라고 전한다.
|
|
81
|
+
|
|
82
|
+
## Failure modes
|
|
83
|
+
|
|
84
|
+
- `400 bad_request` — 검색어 누락, 2글자 미만, 허용되지 않는 파라미터, 혹은 `start + display - 1 > 1000` 조합(네이버 1000-item search window 초과). 에러 메시지를 그대로 사용자에게 노출한다.
|
|
85
|
+
- `503 upstream_not_configured` — 프록시 서버에 `NAVER_SEARCH_CLIENT_ID`/`NAVER_SEARCH_CLIENT_SECRET` 가 없는 경우. 운영자가 키를 등록해야 한다. 사용자에게는 "잠시 후 다시 시도해 주세요" 정도로 안내한다.
|
|
86
|
+
- `401 upstream_error` — 프록시 서버의 Client ID/Secret 이 잘못된 경우(`errorCode: 024`). 운영자가 재발급해야 한다.
|
|
87
|
+
- `429 upstream_error` — 네이버 검색 API 일일 쿼터(25,000 호출/일) 초과(`errorCode: 010`). 재시도 루프는 금지. 잠시 후 다시 시도하도록 안내한다.
|
|
88
|
+
- `502 upstream_error` — 네이버 API 5xx 또는 응답 JSON 파싱 실패.
|
|
89
|
+
- upstream 차단이나 장애 발생 시 재시도하지 않는다. cache + rate limit 만으로 대응하고, 사용자에게는 현재 조회 불가능함을 분명히 말한다.
|
|
90
|
+
|
|
91
|
+
## Privacy
|
|
92
|
+
|
|
93
|
+
- 검색어/결과를 영구 저장하지 않는다.
|
|
94
|
+
- 기사 본문은 요청하지 않는다. description(API 가 주는 요약)만 사용한다.
|
|
95
|
+
- 특정 인물·사건을 비방·추측하는 서술은 하지 않는다. 기사 원문만 전달한다.
|
|
96
|
+
|
|
97
|
+
## Done when
|
|
98
|
+
|
|
99
|
+
- 검색어를 확인했다.
|
|
100
|
+
- 최소 1건 이상의 기사를 제목·요약·발행 시각·링크로 정리해서 돌려주거나, 왜 결과가 없는지 설명했다.
|
|
101
|
+
- 발행 시각은 KST 기준으로 표시했다.
|
|
102
|
+
- 네이버 API 쿼터 상태·차단 발생 여부·재시도 금지 원칙을 지켰다.
|
|
103
|
+
- 로그인/개인화/차단 우회 범위를 벗어나지 않았다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "naver-news-search",
|
|
3
|
+
"description": "네이버 검색 Open API 뉴스 검색(news.json)을 k-skill-proxy 경유로 조회해 최신 뉴스 기사 제목·발행시각·링크·요약을 보수적으로 정리한다. 사용자는 별도 API 키 발급 없이 호출한다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"vault",
|
|
7
|
+
"lookup"
|
|
8
|
+
],
|
|
9
|
+
"frontmatter": "name: naver-news-search\ndescription: 네이버 검색 Open API 뉴스 검색(news.json)을 k-skill-proxy 경유로 조회해 최신 뉴스 기사 제목·발행시각·링크·요약을 보수적으로 정리한다. 사용자는 별도 API 키 발급 없이 호출한다.\nlicense: MIT\nmetadata:\n category: information\n locale: ko-KR\n phase: v1"
|
|
10
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Naver Shopping Search
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
`k-skill-proxy`가 네이버 검색 Open API 쇼핑 검색(`shop.json`)을 우선 사용하고, 키가 없을 때만 네이버 쇼핑/검색의 로그인 없는 공개 BFF JSON endpoint를 **단일 검색 요청**으로 가져와 상품 후보를 정규화한다.
|
|
6
|
+
|
|
7
|
+
- 상품명/검색어로 네이버 쇼핑 후보를 찾는다.
|
|
8
|
+
- 현재 노출 가격, 판매처, 링크, 이미지, 리뷰/구매 수(노출될 때만)를 정리한다.
|
|
9
|
+
- 가격이 낮은 후보와 공식몰/브랜드몰 후보를 분리해서 비교할 수 있다.
|
|
10
|
+
- 주문, 장바구니, 찜, 로그인 세션 접근은 하지 않는다.
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
- "네이버 쇼핑에서 에어팟 가격 비교해줘"
|
|
15
|
+
- "네이버 최저가로 커피머신 찾아줘"
|
|
16
|
+
- "네이버 쇼핑 링크랑 판매처별 가격을 비교해줘"
|
|
17
|
+
- "이 상품 네이버 쇼핑에서 얼마쯤 해?"
|
|
18
|
+
|
|
19
|
+
## When not to use
|
|
20
|
+
|
|
21
|
+
- 회원 전용가, 쿠폰 적용가, 네이버페이 개인화 혜택을 확정해야 하는 경우
|
|
22
|
+
- 주문/장바구니/찜/로그인이 필요한 액션
|
|
23
|
+
- 차단 우회, CAPTCHA 우회, fingerprint spoofing 등 접근 통제를 우회해야 하는 경우
|
|
24
|
+
|
|
25
|
+
## Required inputs
|
|
26
|
+
|
|
27
|
+
상품명 또는 검색어가 없으면 먼저 물어본다.
|
|
28
|
+
|
|
29
|
+
권장 질문:
|
|
30
|
+
|
|
31
|
+
> 찾을 네이버 쇼핑 상품명이나 검색어를 알려주세요. 예: 에어팟 프로 2세대, 아이폰 15 케이스
|
|
32
|
+
|
|
33
|
+
검색어가 너무 넓으면 브랜드/용량/모델명을 추가로 물어본다.
|
|
34
|
+
|
|
35
|
+
## Proxy endpoint
|
|
36
|
+
|
|
37
|
+
기본값은 public/read-only/no-auth 프록시다. 프록시 서버에 `NAVER_SEARCH_CLIENT_ID`와 `NAVER_SEARCH_CLIENT_SECRET`이 있으면 공식 Search API를 우선 사용한다.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
curl -fsS --get "${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}/v1/naver-shopping/search" \
|
|
41
|
+
--data-urlencode 'q=에어팟 프로 2세대' \
|
|
42
|
+
--data-urlencode 'limit=10' \
|
|
43
|
+
--data-urlencode 'sort=rel'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
쿼리 파라미터:
|
|
47
|
+
|
|
48
|
+
- `q` 또는 `query` — 검색어. 2글자 이상.
|
|
49
|
+
- `limit` — 반환 개수. 기본 10, 최대 40으로 clamp.
|
|
50
|
+
- `page` — 페이지. 기본 1. no-key BFF fallback에서는 BFF의 `page`를 요청하고 해당 페이지 카드만 정규화한다.
|
|
51
|
+
- `sort` — `rel`, `date`, `price_asc`, `price_dsc`, `review` 중 하나. 알 수 없는 값은 `rel`.
|
|
52
|
+
- 공식 Search API 경로는 네이버 API sort를 사용한다. 단, 공식 API가 `review` 정렬을 지원하지 않아 `review` 요청은 upstream `sort=sim`으로 조회하고 `meta.sort_applied: "unsupported"`, `meta.upstream_sort: "sim"`으로 표시한다.
|
|
53
|
+
- no-key BFF fallback은 `rel`은 BFF 노출 순서를 유지하고, `price_asc`/`price_dsc`/`review`는 선택된 BFF 페이지 카드 안에서 로컬 정렬한다. BFF 카드에 날짜 필드가 없어 `date`는 `meta.sort_applied: "unsupported"`로 표시하고 BFF 노출 순서를 유지한다.
|
|
54
|
+
|
|
55
|
+
응답 주요 필드:
|
|
56
|
+
|
|
57
|
+
- `items[].title`
|
|
58
|
+
- `items[].price` / `items[].price_text`
|
|
59
|
+
- `items[].mall_name`
|
|
60
|
+
- `items[].url`
|
|
61
|
+
- `items[].image_url`
|
|
62
|
+
- `items[].review_count`, `purchase_count`, `score` (노출될 때만)
|
|
63
|
+
- `meta.extraction` — `naver-openapi`, `bff-json`, `embedded-json`, `html-card`, `none`
|
|
64
|
+
- `meta.sort_applied` — `upstream`, `local`, `unsupported` 중 하나
|
|
65
|
+
|
|
66
|
+
## Workflow
|
|
67
|
+
|
|
68
|
+
1. 검색어를 확인한다.
|
|
69
|
+
2. `GET /v1/naver-shopping/search` 를 호출한다.
|
|
70
|
+
3. `items`가 있으면 요청 sort와 `meta.sort_applied`를 확인한 뒤 가격 낮은 순, 공식/브랜드몰 여부, 리뷰 수 등을 기준으로 3~5개 후보를 짧게 비교한다.
|
|
71
|
+
4. `meta.extraction`과 조회 시각 기준임을 함께 말한다.
|
|
72
|
+
5. `items`가 비었거나 upstream 차단/오류가 나면 우회 시도를 반복하지 말고, 검색어를 좁히거나 브라우저 수동 확인을 안내한다.
|
|
73
|
+
|
|
74
|
+
## Response style
|
|
75
|
+
|
|
76
|
+
- 가격은 "조회 시점 네이버 쇼핑 노출가"라고 표현한다.
|
|
77
|
+
- 배송비, 쿠폰, 옵션 추가금, 회원 혜택은 비로그인 공개 검색만으로 확정하지 않는다.
|
|
78
|
+
- 판매처 신뢰도는 노출된 판매처명/리뷰 수만 근거로 보수적으로 말한다.
|
|
79
|
+
- 최저가만 단정하지 말고 동률/옵션 차이를 조심한다.
|
|
80
|
+
|
|
81
|
+
## Failure modes
|
|
82
|
+
|
|
83
|
+
- 공식 Search API 키가 없어서 BFF fallback을 사용할 때는 네이버가 특정 IP/환경에 418/403 등 bot-block 응답을 줄 수 있다.
|
|
84
|
+
- no-key fallback은 `ns-portal.shopping.naver.com/api/v2/shopping-paged-slot?query=<검색어>&source=shp_gui` 공개 JSON path를 사용한다.
|
|
85
|
+
- 검색 결과 BFF JSON 스키마는 비공식 프론트엔드 표면이라 바뀔 수 있다.
|
|
86
|
+
- 가격/품절/배송 정보는 실시간으로 바뀐다.
|
|
87
|
+
- 프록시는 접근 통제 우회를 하지 않는다. 공식 Search API 또는 단일 공개 검색 요청 + 캐시 + rate limit만 사용한다.
|
|
88
|
+
|
|
89
|
+
## Done when
|
|
90
|
+
|
|
91
|
+
- 검색어를 확인했다.
|
|
92
|
+
- 네이버 쇼핑 후보를 최소 1개 이상 반환하거나, 왜 반환하지 못했는지 설명했다.
|
|
93
|
+
- 가격/판매처/링크를 조회 시점 기준으로 보수적으로 정리했다.
|
|
94
|
+
- 로그인/주문/차단 우회 범위를 벗어나지 않았다.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "naver-shopping-search",
|
|
3
|
+
"description": "네이버 쇼핑 공개 BFF JSON을 k-skill-proxy로 조회해 상품 후보, 최저가, 판매처 링크를 보수적으로 가격비교한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"vault",
|
|
7
|
+
"browser",
|
|
8
|
+
"action:commerce"
|
|
9
|
+
],
|
|
10
|
+
"frontmatter": "name: naver-shopping-search\ndescription: 네이버 쇼핑 공개 BFF JSON을 k-skill-proxy로 조회해 상품 후보, 최저가, 판매처 링크를 보수적으로 가격비교한다. 돌쇠에서는 공식 표면을 통한 후속 액션까지 진행한다.\nlicense: MIT\nmetadata:\n category: retail\n locale: ko-KR\n phase: v1"
|
|
11
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# NHIS Care And Checkup Search
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
국민건강보험공단 장기요양기관 검색서비스(data.go.kr `15059029`)와 검진기관 찾기 조회(data.go.kr `15154419`)를 `k-skill-proxy` 경유로 호출해 공개 기관 후보를 조회한다.
|
|
6
|
+
|
|
7
|
+
## When to use
|
|
8
|
+
|
|
9
|
+
- "서울 강남 장기요양기관 찾아줘"
|
|
10
|
+
- "요양원 후보와 주소/전화번호 확인해줘"
|
|
11
|
+
- "서울 강남 건강검진기관 찾아줘"
|
|
12
|
+
- "주말 검진 가능한 검진기관 찾아줘"
|
|
13
|
+
|
|
14
|
+
## When not to use
|
|
15
|
+
|
|
16
|
+
- 의료 판단, 장기요양 등급 판정, 특정 기관 추천 보증
|
|
17
|
+
- 예약·신청·민감 의료정보 조회 자동화
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
- 인터넷 연결
|
|
22
|
+
- hosted/self-host `k-skill-proxy`의 `/v1/nhis/long-term-care`, `/v1/nhis/checkup/*` route 접근 가능
|
|
23
|
+
|
|
24
|
+
## Credential requirements
|
|
25
|
+
|
|
26
|
+
- 사용자 측 필수 시크릿 없음.
|
|
27
|
+
- `KSKILL_PROXY_BASE_URL` — self-host·별도 프록시를 쓸 때만 설정. 비우면 기본 hosted `https://k-skill-proxy.nomadamas.org` 를 사용한다.
|
|
28
|
+
- `DATA_GO_KR_API_KEY` 는 프록시 운영 서버 환경에만 둔다. 공공데이터포털에서 필요한 서비스의 활용신청이 승인돼 있어야 한다.
|
|
29
|
+
|
|
30
|
+
키 발급:
|
|
31
|
+
|
|
32
|
+
- 장기요양기관 검색 서비스: <https://www.data.go.kr/data/15059029/openapi.do>
|
|
33
|
+
- 건강검진기관 검색 서비스: <https://www.data.go.kr/data/15154419/openapi.do>
|
|
34
|
+
- 공공데이터포털 이용 가이드: <https://www.data.go.kr/ugs/selectPublicDataUseGuideView.do>
|
|
35
|
+
|
|
36
|
+
## Inputs
|
|
37
|
+
|
|
38
|
+
장기요양기관 route:
|
|
39
|
+
|
|
40
|
+
- `q`, `query`, `name`, 또는 `adminNm`: 기관명 검색어
|
|
41
|
+
- `sido` 또는 `siDoCd`: 시도 코드
|
|
42
|
+
- `sigungu` 또는 `siGunGuCd`: 시군구 코드
|
|
43
|
+
- `service_kind` 또는 `serviceKind`: 급여/서비스 종류 코드
|
|
44
|
+
- `page` 또는 `pageNo`: 기본 1
|
|
45
|
+
- `limit` 또는 `numOfRows`: 기본 10, 최대 100
|
|
46
|
+
|
|
47
|
+
건강검진기관 route:
|
|
48
|
+
|
|
49
|
+
- route operation: `list`, `by-region`, `by-checkup-type`, `holiday`
|
|
50
|
+
- `q`, `query`, `name`, 또는 `hmcNm`: 검진기관명 검색어
|
|
51
|
+
- `sido` 또는 `siDoCd`: 시도 코드
|
|
52
|
+
- `sigungu` 또는 `siGunGuCd`: 시군구 코드
|
|
53
|
+
- `hchk_type`, `checkup_type`, 또는 `hchkTypeCd`: 검진 유형 코드
|
|
54
|
+
- `page` 또는 `pageNo`: 기본 1
|
|
55
|
+
- `limit` 또는 `numOfRows`: 기본 10, 최대 100
|
|
56
|
+
|
|
57
|
+
## Workflow
|
|
58
|
+
|
|
59
|
+
### 1. Decide the surface
|
|
60
|
+
|
|
61
|
+
장기요양기관이면 `/v1/nhis/long-term-care`를 사용한다. 건강검진기관이면 검색 목적에 맞춰 `/v1/nhis/checkup/list`, `/v1/nhis/checkup/by-region`, `/v1/nhis/checkup/by-checkup-type`, `/v1/nhis/checkup/holiday` 중 하나를 사용한다.
|
|
62
|
+
|
|
63
|
+
### 2. Query long-term care institutions through the proxy
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
BASE="${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}"
|
|
67
|
+
curl -fsS --get "$BASE/v1/nhis/long-term-care" \
|
|
68
|
+
--data-urlencode "q=강남" \
|
|
69
|
+
--data-urlencode "sido=11" \
|
|
70
|
+
--data-urlencode "limit=10"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 3. Query health checkup institutions through the proxy
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
BASE="${KSKILL_PROXY_BASE_URL:-https://k-skill-proxy.nomadamas.org}"
|
|
77
|
+
curl -fsS --get "$BASE/v1/nhis/checkup/by-region" \
|
|
78
|
+
--data-urlencode "q=검진" \
|
|
79
|
+
--data-urlencode "sido=11" \
|
|
80
|
+
--data-urlencode "limit=10"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 4. Summarize source fields
|
|
84
|
+
|
|
85
|
+
응답 XML의 `item` 필드에서 기관명, 주소, 전화번호, 급여종류, 검진유형, 운영일처럼 upstream이 제공한 공개 항목만 요약한다. 사용자가 실제 이용·입소·검진 예약을 하려면 NHIS 또는 기관에 직접 확인하라고 안내한다.
|
|
86
|
+
|
|
87
|
+
## Failure modes
|
|
88
|
+
|
|
89
|
+
- `400 bad_request`: 검색어/지역/서비스 종류 중 하나도 없거나 코드/페이지 값이 잘못됨.
|
|
90
|
+
- `503 upstream_not_configured`: 프록시 서버에 `DATA_GO_KR_API_KEY` 가 없음.
|
|
91
|
+
- `502 upstream_forbidden`: data.go.kr gateway가 키를 거부함.
|
|
92
|
+
- 빈 결과: 지역 코드나 기관명 표기를 완화해서 재검색한다.
|
|
93
|
+
- 특정 서비스만 실패: 같은 `DATA_GO_KR_API_KEY`라도 data.go.kr 서비스별 활용신청이 별도라서 `15059029` 또는 `15154419` 승인 상태를 확인한다.
|
|
94
|
+
|
|
95
|
+
## Done when
|
|
96
|
+
|
|
97
|
+
- 장기요양기관 조회는 `k-skill-proxy` route로 수행했고 사용자에게 API key를 요구하지 않았다.
|
|
98
|
+
- 건강검진기관 조회는 `k-skill-proxy` route로 수행했고 사용자에게 API key를 요구하지 않았다.
|
|
99
|
+
- 결과에는 기관명, 위치, 연락처, 원천 서비스와 조회 조건을 함께 적었다.
|
|
100
|
+
|
|
101
|
+
## Maintainer review notes
|
|
102
|
+
|
|
103
|
+
키 없이 가능한 검증:
|
|
104
|
+
|
|
105
|
+
- `./scripts/validate-skills.sh`
|
|
106
|
+
- `node --test packages/k-skill-proxy/test/server.test.js`
|
|
107
|
+
- `curl -i --get "$KSKILL_PROXY_BASE_URL/v1/nhis/long-term-care" --data-urlencode "q=강남"` (키 미설정이면 503 확인)
|
|
108
|
+
- `curl -i --get "$KSKILL_PROXY_BASE_URL/v1/nhis/checkup/by-region" --data-urlencode "q=검진" --data-urlencode "sido=11"` (키 미설정이면 503 확인)
|
|
109
|
+
|
|
110
|
+
Live smoke는 hosted/self-host proxy에 `DATA_GO_KR_API_KEY`가 설정되고 `15059029` 또는 `15154419` 활용신청이 승인된 뒤 수행한다.
|
|
111
|
+
|
|
112
|
+
## Safety notes
|
|
113
|
+
|
|
114
|
+
- 조회 전용 스킬이다.
|
|
115
|
+
- 의료 판단, 장기요양 등급 판정, 예약/신청 자동화는 하지 않는다.
|
|
116
|
+
- 인증키는 프록시 서버에서만 다루며 repo/GitHub Actions/public docs에 저장하지 않는다.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "nhis-care-checkup-search",
|
|
3
|
+
"description": "국민건강보험공단 장기요양기관·건강검진기관을 조회하고, 돌쇠에서는 공식 연락·예약 가능 표면까지 이어간다.",
|
|
4
|
+
"profiles": [
|
|
5
|
+
"proxy",
|
|
6
|
+
"vault",
|
|
7
|
+
"action:booking"
|
|
8
|
+
],
|
|
9
|
+
"frontmatter": "name: nhis-care-checkup-search\ndescription: 국민건강보험공단 장기요양기관·건강검진기관을 조회하고, 돌쇠에서는 공식 연락·예약 가능 표면까지 이어간다.\nlicense: MIT\nmetadata:\n category: healthcare\n locale: ko-KR\n phase: v1"
|
|
10
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# 국세청 사업자등록정보 진위확인 및 상태조회
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
공공데이터포털의 **국세청_사업자등록정보 진위확인 및 상태조회 서비스**를 `k-skill-proxy` 경유로 호출해 다음을 확인한다.
|
|
6
|
+
|
|
7
|
+
- `status`: 사업자등록번호 기준 상태조회 (`계속사업자`, `휴업자`, `폐업자`, 과세유형 등 upstream 응답 그대로 포함)
|
|
8
|
+
- `validate`: 사업자등록번호 + 개업일자 + 대표자명(및 선택 필드) 기준 진위확인
|
|
9
|
+
|
|
10
|
+
## When to use
|
|
11
|
+
|
|
12
|
+
- "이 사업자등록번호가 계속사업자인지 확인해줘"
|
|
13
|
+
- "사업자등록번호 상태조회해줘"
|
|
14
|
+
- "사업자등록번호, 개업일, 대표자명으로 진위확인해줘"
|
|
15
|
+
- 거래처 등록 전 공식 NTS/공공데이터포털 기준 확인이 필요할 때
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- 인터넷 연결
|
|
20
|
+
- `python3`
|
|
21
|
+
- 설치된 skill payload 안에 `scripts/nts_business_registration.py` helper 포함
|
|
22
|
+
- hosted/self-host `k-skill-proxy`의 `/v1/nts-business/status`, `/v1/nts-business/validate` route 접근 가능
|
|
23
|
+
|
|
24
|
+
## Credential requirements
|
|
25
|
+
|
|
26
|
+
- 사용자 측 필수 시크릿 없음.
|
|
27
|
+
- `KSKILL_PROXY_BASE_URL` — self-host·별도 프록시를 쓸 때만 설정. 비우면 기본 hosted `https://k-skill-proxy.nomadamas.org` 를 사용한다.
|
|
28
|
+
- `DATA_GO_KR_API_KEY` 는 프록시 운영 서버 환경에만 둔다. 공공데이터포털에서 `국세청_사업자등록정보 진위확인 및 상태조회 서비스` 활용신청이 되어 있어야 한다.
|
|
29
|
+
|
|
30
|
+
## Validate privacy boundary
|
|
31
|
+
|
|
32
|
+
- `validate`는 대표자명(`p_nm`), 개업일자(`start_dt`), 주소·상호 같은 선택 메타데이터를 hosted proxy와 공공데이터포털 upstream으로 전송한다.
|
|
33
|
+
- hosted proxy는 `validate` 성공 응답을 캐시하지 않고, 프록시 `query` echo를 붙이지 않으며, upstream이 요청값을 되돌려도 민감 입력 필드를 응답에서 제거한다.
|
|
34
|
+
- 프록시의 기본 Fastify request logging은 꺼져 있다. 운영자가 별도 로그를 켠 self-host 환경에서는 요청 본문 로깅 정책을 직접 점검해야 한다.
|
|
35
|
+
- hosted proxy 경유가 부담스러운 진위확인 업무는 `KSKILL_PROXY_BASE_URL`로 직접 운영하는 self-host proxy를 지정한다.
|
|
36
|
+
|
|
37
|
+
## Official surfaces
|
|
38
|
+
|
|
39
|
+
- 공공데이터포털 문서: `https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15081808`
|
|
40
|
+
- 상태조회 upstream: `POST https://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=...`
|
|
41
|
+
- 진위확인 upstream: `POST https://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey=...`
|
|
42
|
+
- 프록시 route: `POST /v1/nts-business/status`, `POST /v1/nts-business/validate`
|
|
43
|
+
|
|
44
|
+
## Inputs
|
|
45
|
+
|
|
46
|
+
### 상태조회
|
|
47
|
+
|
|
48
|
+
- `b_no`: 사업자등록번호 10자리. 하이픈은 허용되며 helper/proxy가 숫자만 남긴다.
|
|
49
|
+
- 한 요청은 최대 100개까지 보낸다.
|
|
50
|
+
|
|
51
|
+
### 진위확인
|
|
52
|
+
|
|
53
|
+
필수:
|
|
54
|
+
|
|
55
|
+
- `b_no`: 사업자등록번호 10자리
|
|
56
|
+
- `start_dt`: 개업일자 `YYYYMMDD` (하이픈/점 허용)
|
|
57
|
+
- `p_nm`: 대표자 성명
|
|
58
|
+
|
|
59
|
+
선택:
|
|
60
|
+
|
|
61
|
+
- `p_nm2`: 대표자 성명2
|
|
62
|
+
- `b_nm`: 상호
|
|
63
|
+
- `corp_no`: 법인등록번호
|
|
64
|
+
- `b_sector`: 주업태명
|
|
65
|
+
- `b_type`: 주종목명
|
|
66
|
+
- `b_adr`: 사업장주소
|
|
67
|
+
|
|
68
|
+
텍스트 필드는 NTS 입력 규격에 맞춰 보수적으로 길이를 제한한다(`p_nm`/`p_nm2` 30자, `b_nm` 200자, `b_sector`/`b_type` 100자, `b_adr` 500자). `corp_no`는 제공할 경우 숫자 13자리여야 한다.
|
|
69
|
+
|
|
70
|
+
## Workflow
|
|
71
|
+
|
|
72
|
+
1. 사용자 입력에서 사업자등록번호는 숫자 10자리인지 확인한다.
|
|
73
|
+
2. 상태조회만 필요하면 `status`를 호출한다.
|
|
74
|
+
3. 진위확인은 최소 `b_no`, `start_dt`, `p_nm`이 있을 때만 호출한다.
|
|
75
|
+
4. 개인정보/거래처 정보는 필요한 필드만 보내고, 프록시 응답을 그대로 보존하되 핵심 상태/진위 결과를 짧게 요약한다.
|
|
76
|
+
5. upstream이 `upstream_not_configured`, 활용신청 미승인, 인증키 오류 등을 반환하면 설정/승인 문제로 안내한다.
|
|
77
|
+
|
|
78
|
+
## CLI examples
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
python3 scripts/nts_business_registration.py status \
|
|
82
|
+
--b-no 123-45-67890
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
python3 scripts/nts_business_registration.py validate \
|
|
87
|
+
--business-json '{"b_no":"123-45-67890","start_dt":"2020-01-31","p_nm":"홍길동","b_nm":"테스트상사"}'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Direct proxy examples
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
curl -fsS -X POST "$KSKILL_PROXY_BASE_URL/v1/nts-business/status" \
|
|
94
|
+
-H 'content-type: application/json' \
|
|
95
|
+
-d '{"b_no":["123-45-67890"]}'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -fsS -X POST "$KSKILL_PROXY_BASE_URL/v1/nts-business/validate" \
|
|
100
|
+
-H 'content-type: application/json' \
|
|
101
|
+
-d '{"businesses":[{"b_no":"123-45-67890","start_dt":"20200131","p_nm":"홍길동"}]}'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Failure modes
|
|
105
|
+
|
|
106
|
+
- `400 bad_request`: 사업자등록번호가 10자리가 아니거나 진위확인 필수 필드가 빠짐.
|
|
107
|
+
- `503 upstream_not_configured`: 프록시 서버에 `DATA_GO_KR_API_KEY`가 없음.
|
|
108
|
+
- upstream 인증/활용신청 오류: API 키가 해당 서비스에 승인되지 않았거나 만료/오류 상태.
|
|
109
|
+
- 빈 결과 또는 진위불일치: 공식 응답의 `valid`, `valid_msg`, `b_stt` 값을 그대로 근거로 설명한다.
|
|
110
|
+
|
|
111
|
+
## Done when
|
|
112
|
+
|
|
113
|
+
- 상태조회는 공식 응답의 `b_stt`, `b_stt_cd`, `tax_type` 등 핵심 필드를 확인했다.
|
|
114
|
+
- 진위확인은 `valid`, `valid_msg` 결과를 확인했다.
|
|
115
|
+
- API 키는 사용자에게 요구하지 않고 프록시 서버에만 둔다는 점을 지켰다.
|