@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,237 @@
|
|
|
1
|
+
# Flight Ticket Search
|
|
2
|
+
|
|
3
|
+
## What this skill does
|
|
4
|
+
|
|
5
|
+
`fast-flights` 기반으로 Google Flights의 공개 검색 결과를 조회해 항공권 후보를 정리한다. API key, 로그인, 결제, CAPTCHA 우회 없이 무료 공개 표면만 사용한다.
|
|
6
|
+
|
|
7
|
+
제공 기능:
|
|
8
|
+
|
|
9
|
+
- 편도/왕복 항공권 검색
|
|
10
|
+
- Google Flights 예약 검색 링크 생성
|
|
11
|
+
- 상위 후보 가격, 항공사, 출도착 시간, 소요시간, 경유 수 정리
|
|
12
|
+
- 날짜 범위, 월별, 연도별 샘플 비교
|
|
13
|
+
- 최저가, 평균가, 최고가 및 `low`/`typical`/`high` 가격 band 요약
|
|
14
|
+
|
|
15
|
+
예약 링크는 특정 판매자 결제 deep link가 아니라 **Google Flights 검색 결과 링크**다. 실제 구매·결제·좌석 선택은 사용자가 브라우저에서 직접 진행해야 한다.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- "항공권 조회해줘"
|
|
20
|
+
- "인천에서 나리타 다음 달 최저가"
|
|
21
|
+
- "6월 ICN-NRT 월별 비교"
|
|
22
|
+
- "올해랑 내년 6월 1일 항공권 가격 비교"
|
|
23
|
+
- "서울에서 도쿄 왕복 예약 링크 줘"
|
|
24
|
+
- "ICN-LAX 비즈니스 가격 대략 비교해줘"
|
|
25
|
+
|
|
26
|
+
## When not to use
|
|
27
|
+
|
|
28
|
+
- 실제 예약/결제/취소/좌석지정 자동화
|
|
29
|
+
- 로그인 회원가, 카드 할인, 쿠폰, 마일리지 적용가 확정
|
|
30
|
+
- CAPTCHA, fingerprint, bot-block 우회
|
|
31
|
+
- 스카이스캐너 직접 조회. 현재 `skyscanner.net`은 기본 접속부터 CAPTCHA/403이 걸리므로 안정 skill provider로 쓰지 않는다.
|
|
32
|
+
|
|
33
|
+
## Required inputs
|
|
34
|
+
|
|
35
|
+
최소 입력:
|
|
36
|
+
|
|
37
|
+
- 출발 공항 IATA 코드: `ICN`, `GMP`, `PUS` 등
|
|
38
|
+
- 도착 공항 IATA 코드: `NRT`, `HND`, `LAX` 등
|
|
39
|
+
- 출발일 `YYYY-MM-DD` 또는 비교할 월/범위
|
|
40
|
+
|
|
41
|
+
선택 입력:
|
|
42
|
+
|
|
43
|
+
- 왕복 귀국일 `YYYY-MM-DD`
|
|
44
|
+
- 성인 수, 기본 1명
|
|
45
|
+
- 좌석 등급: `economy`, `premium-economy`, `business`, `first`
|
|
46
|
+
- 비교 샘플 방식: 월별 `weekly` 또는 `daily`
|
|
47
|
+
|
|
48
|
+
사용자가 도시명만 말하면 IATA 코드를 추론하되 애매하면 확인한다. 흔한 기본값은 다음처럼 처리한다.
|
|
49
|
+
|
|
50
|
+
- 서울/인천 국제선: `ICN`
|
|
51
|
+
- 서울 국내선/제주: `GMP` 우선, 사용자가 인천을 말하면 `ICN`
|
|
52
|
+
- 도쿄: 나리타 `NRT` 또는 하네다 `HND` 중 사용자가 지정하지 않으면 둘 중 하나를 확인한다.
|
|
53
|
+
- 제주: `CJU`
|
|
54
|
+
|
|
55
|
+
## Helper script
|
|
56
|
+
|
|
57
|
+
이 skill은 저장소 내 helper를 직접 실행한다.
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py --help
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
최초 실행 시 `~/.cache/k-skill/flight-ticket-search/venv`에 `fast-flights==2.2`를 설치하고 그 venv로 재실행한다. 저장소에는 의존성 vendoring이나 API key를 넣지 않는다.
|
|
64
|
+
|
|
65
|
+
## Single search
|
|
66
|
+
|
|
67
|
+
편도:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py search \
|
|
71
|
+
--from ICN \
|
|
72
|
+
--to NRT \
|
|
73
|
+
--date 2026-06-01 \
|
|
74
|
+
--adults 1 \
|
|
75
|
+
--seat economy \
|
|
76
|
+
--limit 5 \
|
|
77
|
+
--format markdown
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
왕복:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py search \
|
|
84
|
+
--from ICN \
|
|
85
|
+
--to NRT \
|
|
86
|
+
--date 2026-06-01 \
|
|
87
|
+
--return-date 2026-06-08 \
|
|
88
|
+
--adults 1 \
|
|
89
|
+
--seat economy \
|
|
90
|
+
--limit 5
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
응답 주요 필드:
|
|
94
|
+
|
|
95
|
+
- `meta.booking_search_url` — Google Flights 예약 검색 링크
|
|
96
|
+
- `meta.price_band` — Google이 표시하는 `low`/`typical`/`high` 가격 band
|
|
97
|
+
- `stats.min_price`, `stats.avg_price`, `stats.max_price`
|
|
98
|
+
- `flights[].name`, `departure`, `arrival`, `duration`, `stops`, `price_text`
|
|
99
|
+
- `flights[].quality` — `complete` 또는 `partial`
|
|
100
|
+
|
|
101
|
+
## Monthly comparison
|
|
102
|
+
|
|
103
|
+
월별 비교는 지정 월의 날짜들을 실제 검색해 각 날짜의 최저가/평균가를 비교한다.
|
|
104
|
+
|
|
105
|
+
빠른 기본값은 주 1회 샘플링이다.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
|
|
109
|
+
--from ICN \
|
|
110
|
+
--to NRT \
|
|
111
|
+
--month 2026-06 \
|
|
112
|
+
--sample weekly \
|
|
113
|
+
--limit 5
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
일별 전체 조회가 필요하면 `--sample daily`를 쓴다. 다만 28~31회 요청이 발생하므로 rate limit을 위해 `--sleep`을 1.5초 이상 유지한다.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
|
|
120
|
+
--from ICN \
|
|
121
|
+
--to NRT \
|
|
122
|
+
--month 2026-06 \
|
|
123
|
+
--sample daily \
|
|
124
|
+
--sleep 2 \
|
|
125
|
+
--limit 10
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
월별 비교 응답:
|
|
129
|
+
|
|
130
|
+
- `stats.min_price` — 샘플 날짜 중 최저가
|
|
131
|
+
- `stats.avg_of_daily_min` — 날짜별 최저가의 평균
|
|
132
|
+
- `stats.max_of_daily_min` — 날짜별 최저가 중 최고값
|
|
133
|
+
- `cheapest_dates[]` — 가장 싼 날짜와 예약 검색 링크
|
|
134
|
+
- `rows[]` — 날짜별 성공/실패 및 요약
|
|
135
|
+
|
|
136
|
+
## Custom range comparison
|
|
137
|
+
|
|
138
|
+
사용자가 "다음주부터 2주간", "6월 1일부터 20일까지"처럼 범위를 주면 날짜 범위 비교를 사용한다.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-range \
|
|
142
|
+
--from ICN \
|
|
143
|
+
--to BKK \
|
|
144
|
+
--start-date 2026-06-01 \
|
|
145
|
+
--end-date 2026-06-20 \
|
|
146
|
+
--step-days 3 \
|
|
147
|
+
--limit 5
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`--step-days 1`은 일별 비교, `7`은 주별 비교다.
|
|
151
|
+
|
|
152
|
+
## Year comparison
|
|
153
|
+
|
|
154
|
+
연도 비교는 같은 월일을 여러 연도에 대해 조회한다.
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-years \
|
|
158
|
+
--from ICN \
|
|
159
|
+
--to NRT \
|
|
160
|
+
--years 2026,2027 \
|
|
161
|
+
--month-day 06-01 \
|
|
162
|
+
--limit 5
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
주의: Google Flights가 너무 먼 미래 날짜를 표시하지 않으면 해당 연도는 실패로 기록한다. 실패한 날짜를 숨기지 말고 `failures`에 같이 보고한다.
|
|
166
|
+
|
|
167
|
+
## Reservation link policy
|
|
168
|
+
|
|
169
|
+
- `booking_search_url`은 Google Flights 검색 URL이다.
|
|
170
|
+
- 특정 항공사/OTA 결제 단계 deep link를 자동 추출하거나 클릭하지 않는다.
|
|
171
|
+
- 결제·예약 확정·로그인·여권 정보 입력은 skill 범위 밖이다.
|
|
172
|
+
- 사용자가 예약까지 원하면 링크를 열어 직접 확인하도록 안내한다.
|
|
173
|
+
|
|
174
|
+
## Response style
|
|
175
|
+
|
|
176
|
+
대표님에게는 짧게 핵심부터 보고한다.
|
|
177
|
+
|
|
178
|
+
좋은 형식:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
ICN → NRT / 2026-06-01 / 성인 1명 / economy
|
|
182
|
+
가격 band: typical
|
|
183
|
+
최저/평균/최고: ₩129,800 / ₩254,000 / ₩684,400
|
|
184
|
+
예약 검색 링크: <url>
|
|
185
|
+
|
|
186
|
+
1. Jeju Air — 09:45 → 12:15 / 2h30m / 직항 / ₩129,800
|
|
187
|
+
2. Air Seoul — 09:20 → 11:50 / 2h30m / 직항 / ₩143,500
|
|
188
|
+
3. Air Premia — 08:50 → 11:20 / 2h30m / 직항 / ₩160,800
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
월별 비교:
|
|
192
|
+
|
|
193
|
+
```text
|
|
194
|
+
ICN → NRT / 2026-06 weekly 샘플
|
|
195
|
+
최저: 6/1 ₩129,800
|
|
196
|
+
샘플 평균: ₩142,300
|
|
197
|
+
비싼 날: 6/22 ₩188,000
|
|
198
|
+
|
|
199
|
+
싼 날짜 TOP 3
|
|
200
|
+
1. 2026-06-01 — ₩129,800
|
|
201
|
+
2. 2026-06-08 — ₩135,000
|
|
202
|
+
3. 2026-06-15 — ₩144,000
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
파싱 누락 후보는 숨기지 말고 이렇게 표시한다.
|
|
206
|
+
|
|
207
|
+
```text
|
|
208
|
+
항공편 상세 확인 불가 — 시간 확인 불가 / 가격 ₩228,700
|
|
209
|
+
※ Google Flights 응답에서 항공사·시간 파싱이 일부 누락됐습니다.
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Failure modes
|
|
213
|
+
|
|
214
|
+
- Google Flights HTML/프론트엔드 구조 변경으로 항공사명·시간 파싱이 비거나 깨질 수 있다.
|
|
215
|
+
- 일부 노선은 가격만 나오고 항공편 상세가 `partial`로 떨어질 수 있다.
|
|
216
|
+
- 잘못된 IATA 코드, 동일 출도착 공항, 실제 항공편이 없는 구간은 실패한다.
|
|
217
|
+
- 너무 먼 미래 날짜는 upstream에서 결과가 없을 수 있다.
|
|
218
|
+
- 비교 기능은 날짜별 실시간 조회라 요청 수가 많다. daily 월별 비교는 30회 안팎의 요청이 발생한다.
|
|
219
|
+
- `fast-flights` fallback이 외부 fetch helper를 쓰는 경우 401 `no token provided`가 날 수 있다. 동일 입력의 실사용성이 낮은 케이스면 사전 validation으로 막고, 정상 노선이면 잠시 후 재시도한다.
|
|
220
|
+
|
|
221
|
+
## Verified discovery notes
|
|
222
|
+
|
|
223
|
+
2026-05-10 로컬 프로브 기준:
|
|
224
|
+
|
|
225
|
+
- Skyscanner home/API: CAPTCHA/403 blocked로 직접 provider 부적합.
|
|
226
|
+
- Kiwi Tequila API: 무료 계정 API key 필요. 기본 무료/no-key 경로는 아님.
|
|
227
|
+
- Google Flights + `fast-flights==2.2`: 국내선/일본/동남아/미국/유럽/호주/남미 일부 성공.
|
|
228
|
+
- 추가 테스트 성공: `ICN-CJU`, `ICN-NRT`, `ICN-PVG`, `ICN-SIN`, `ICN-BKK`, `ICN-DXB`, `ICN-LAX`, `ICN-JFK`, `ICN-LHR`, `ICN-CDG`, `ICN-FRA`, `ICN-HKG`, `ICN-TPE`, `ICN-SYD`, `ICN-GRU`, `ICN↔NRT`, `GMP↔CJU`, business, 성인 2명.
|
|
229
|
+
- 정상 실패/차단 대상: `GMP-ICN`, `ICN-ICN`, invalid airport code.
|
|
230
|
+
|
|
231
|
+
## Done when
|
|
232
|
+
|
|
233
|
+
- 출발/도착/날짜/좌석/인원 조건을 확인했다.
|
|
234
|
+
- 단일 검색이면 상위 후보와 예약 검색 링크를 제공했다.
|
|
235
|
+
- 비교 검색이면 샘플 방식과 최저/평균/최고, 싼 날짜 TOP을 제공했다.
|
|
236
|
+
- 가격은 조회 시점 기준이며 실제 결제가는 달라질 수 있음을 표시했다.
|
|
237
|
+
- 로그인/결제/CAPTCHA 우회는 하지 않았다.
|