flight-ticket-search

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Flight Ticket Search

机票搜索

What this skill does

该Skill的功能

fast-flights
기반으로 Google Flights의 공개 검색 결과를 조회해 항공권 후보를 정리한다. API key, 로그인, 결제, CAPTCHA 우회 없이 무료 공개 표면만 사용한다.
제공 기능:
  • 편도/왕복 항공권 검색
  • Google Flights 예약 검색 링크 생성
  • 상위 후보 가격, 항공사, 출도착 시간, 소요시간, 경유 수 정리
  • 날짜 범위, 월별, 연도별 샘플 비교
  • 최저가, 평균가, 최고가 및
    low
    /
    typical
    /
    high
    가격 band 요약
예약 링크는 특정 판매자 결제 deep link가 아니라 Google Flights 검색 결과 링크다. 실제 구매·결제·좌석 선택은 사용자가 브라우저에서 직접 진행해야 한다.
基于
fast-flights
查询Google Flights的公开搜索结果,整理航班候选信息。无需API密钥、登录、支付或绕过CAPTCHA,仅使用免费公开界面。
提供功能:
  • 单程/往返机票搜索
  • 生成Google Flights预订搜索链接
  • 整理候选航班的价格、航空公司、起降时间、耗时、经停次数
  • 按日期范围、月份、年份进行样本对比
  • 汇总最低价、均价、最高价以及
    low
    /
    typical
    /
    high
    价格区间
预订链接并非特定卖家的支付深度链接,而是Google Flights搜索结果链接。实际购买、支付、选座需由用户在浏览器中自行操作。

When to use

使用场景

  • "항공권 조회해줘"
  • "인천에서 나리타 다음 달 최저가"
  • "6월 ICN-NRT 월별 비교"
  • "올해랑 내년 6월 1일 항공권 가격 비교"
  • "서울에서 도쿄 왕복 예약 링크 줘"
  • "ICN-LAX 비즈니스 가격 대략 비교해줘"
  • "帮我查询机票"
  • "仁川到成田下个月的最低价"
  • "6月ICN-NRT的月度对比"
  • "今年和明年6月1日的机票价格对比"
  • "给我首尔到东京的往返预订链接"
  • "帮我大致对比ICN-LAX的商务舱价格"

When not to use

不适用场景

  • 실제 예약/결제/취소/좌석지정 자동화
  • 로그인 회원가, 카드 할인, 쿠폰, 마일리지 적용가 확정
  • CAPTCHA, fingerprint, bot-block 우회
  • 스카이스캐너 직접 조회. 현재
    skyscanner.net
    은 기본 접속부터 CAPTCHA/403이 걸리므로 안정 skill provider로 쓰지 않는다.
  • 实际预订/支付/取消/选座自动化
  • 确认登录会员、信用卡折扣、优惠券、里程抵扣后的价格
  • 绕过CAPTCHA、指纹验证、机器人拦截
  • 直接查询Skyscanner。目前
    skyscanner.net
    从基础访问阶段就会触发CAPTCHA/403拦截,因此不适合作为稳定的Skill数据源。

Required inputs

必填输入

최소 입력:
  • 출발 공항 IATA 코드:
    ICN
    ,
    GMP
    ,
    PUS
  • 도착 공항 IATA 코드:
    NRT
    ,
    HND
    ,
    LAX
  • 출발일
    YYYY-MM-DD
    또는 비교할 월/범위
선택 입력:
  • 왕복 귀국일
    YYYY-MM-DD
  • 성인 수, 기본 1명
  • 좌석 등급:
    economy
    ,
    premium-economy
    ,
    business
    ,
    first
  • 비교 샘플 방식: 월별
    weekly
    또는
    daily
사용자가 도시명만 말하면 IATA 코드를 추론하되 애매하면 확인한다. 흔한 기본값은 다음처럼 처리한다.
  • 서울/인천 국제선:
    ICN
  • 서울 국내선/제주:
    GMP
    우선, 사용자가 인천을 말하면
    ICN
  • 도쿄: 나리타
    NRT
    또는 하네다
    HND
    중 사용자가 지정하지 않으면 둘 중 하나를 확인한다.
  • 제주:
    CJU
最小输入:
  • 出发机场IATA代码:
    ICN
    ,
    GMP
    ,
    PUS
  • 到达机场IATA代码:
    NRT
    ,
    HND
    ,
    LAX
  • 出发日期
    YYYY-MM-DD
    或需对比的月份/范围
可选输入:
  • 往返返程日期
    YYYY-MM-DD
  • 成人数量,默认1人
  • 座位等级:
    economy
    ,
    premium-economy
    ,
    business
    ,
    first
  • 对比样本方式:月度
    weekly
    (每周)或
    daily
    (每日)
若用户仅提供城市名称,则自动推断IATA代码;若存在歧义,则向用户确认。常见默认值处理如下:
  • 首尔/仁川国际航线:
    ICN
  • 首尔国内线/济州:优先使用
    GMP
    ,若用户指定仁川则使用
    ICN
  • 东京:若用户未指定,则在成田
    NRT
    或羽田
    HND
    中选择其一并向用户确认
  • 济州:
    CJU

Helper script

辅助脚本

이 skill은 저장소 내 helper를 직접 실행한다.
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py --help
최초 실행 시
~/.cache/k-skill/flight-ticket-search/venv
fast-flights==2.2
를 설치하고 그 venv로 재실행한다. 저장소에는 의존성 vendoring이나 API key를 넣지 않는다.
该Skill直接运行仓库内的辅助脚本。
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py --help
首次运行时,会在
~/.cache/k-skill/flight-ticket-search/venv
中安装
fast-flights==2.2
,并使用该虚拟环境重新运行。仓库中不包含依赖包或API密钥。

Single search

单次搜索

편도:
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py search \
  --from ICN \
  --to NRT \
  --date 2026-06-01 \
  --adults 1 \
  --seat economy \
  --limit 5 \
  --format markdown
왕복:
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py search \
  --from ICN \
  --to NRT \
  --date 2026-06-01 \
  --return-date 2026-06-08 \
  --adults 1 \
  --seat economy \
  --limit 5
응답 주요 필드:
  • meta.booking_search_url
    — Google Flights 예약 검색 링크
  • meta.price_band
    — Google이 표시하는
    low
    /
    typical
    /
    high
    가격 band
  • stats.min_price
    ,
    stats.avg_price
    ,
    stats.max_price
  • flights[].name
    ,
    departure
    ,
    arrival
    ,
    duration
    ,
    stops
    ,
    price_text
  • flights[].quality
    complete
    또는
    partial
单程:
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py search \
  --from ICN \
  --to NRT \
  --date 2026-06-01 \
  --adults 1 \
  --seat economy \
  --limit 5 \
  --format markdown
往返:
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py search \
  --from ICN \
  --to NRT \
  --date 2026-06-01 \
  --return-date 2026-06-08 \
  --adults 1 \
  --seat economy \
  --limit 5
响应主要字段:
  • meta.booking_search_url
    — Google Flights预订搜索链接
  • meta.price_band
    — Google显示的
    low
    /
    typical
    /
    high
    价格区间
  • stats.min_price
    ,
    stats.avg_price
    ,
    stats.max_price
  • flights[].name
    ,
    departure
    ,
    arrival
    ,
    duration
    ,
    stops
    ,
    price_text
  • flights[].quality
    complete
    (完整)或
    partial
    (部分)

Monthly comparison

月度对比

월별 비교는 지정 월의 날짜들을 실제 검색해 각 날짜의 최저가/평균가를 비교한다.
빠른 기본값은 주 1회 샘플링이다.
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
  --from ICN \
  --to NRT \
  --month 2026-06 \
  --sample weekly \
  --limit 5
일별 전체 조회가 필요하면
--sample daily
를 쓴다. 다만 28~31회 요청이 발생하므로 rate limit을 위해
--sleep
을 1.5초 이상 유지한다.
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
  --from ICN \
  --to NRT \
  --month 2026-06 \
  --sample daily \
  --sleep 2 \
  --limit 10
월별 비교 응답:
  • stats.min_price
    — 샘플 날짜 중 최저가
  • stats.avg_of_daily_min
    — 날짜별 최저가의 평균
  • stats.max_of_daily_min
    — 날짜별 최저가 중 최고값
  • cheapest_dates[]
    — 가장 싼 날짜와 예약 검색 링크
  • rows[]
    — 날짜별 성공/실패 및 요약
月度对比会实际搜索指定月份的日期,对比各日期的最低价/均价。
默认快速采样为每周1次。
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
  --from ICN \
  --to NRT \
  --month 2026-06 \
  --sample weekly \
  --limit 5
若需每日全量查询,可使用
--sample daily
。但会产生28~31次请求,因此为避免速率限制,
--sleep
需设置为1.5秒以上。
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-month \
  --from ICN \
  --to NRT \
  --month 2026-06 \
  --sample daily \
  --sleep 2 \
  --limit 10
月度对比响应:
  • stats.min_price
    — 样本日期中的最低价
  • stats.avg_of_daily_min
    — 每日最低价的平均值
  • stats.max_of_daily_min
    — 每日最低价中的最高价
  • cheapest_dates[]
    — 最便宜的日期及预订搜索链接
  • rows[]
    — 每日查询的成功/失败状态及摘要

Custom range comparison

自定义范围对比

사용자가 "다음주부터 2주간", "6월 1일부터 20일까지"처럼 범위를 주면 날짜 범위 비교를 사용한다.
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-range \
  --from ICN \
  --to BKK \
  --start-date 2026-06-01 \
  --end-date 2026-06-20 \
  --step-days 3 \
  --limit 5
--step-days 1
은 일별 비교,
7
은 주별 비교다.
当用户提供“下周起2周”“6月1日至20日”这类范围时,使用日期范围对比功能。
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-range \
  --from ICN \
  --to BKK \
  --start-date 2026-06-01 \
  --end-date 2026-06-20 \
  --step-days 3 \
  --limit 5
--step-days 1
为每日对比,
7
为每周对比。

Year comparison

年度对比

연도 비교는 같은 월일을 여러 연도에 대해 조회한다.
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-years \
  --from ICN \
  --to NRT \
  --years 2026,2027 \
  --month-day 06-01 \
  --limit 5
주의: Google Flights가 너무 먼 미래 날짜를 표시하지 않으면 해당 연도는 실패로 기록한다. 실패한 날짜를 숨기지 말고
failures
에 같이 보고한다.
年度对比会查询不同年份的同一月日的机票信息。
bash
python3 flight-ticket-search/scripts/flight_ticket_search.py compare-years \
  --from ICN \
  --to NRT \
  --years 2026,2027 \
  --month-day 06-01 \
  --limit 5
注意:若Google Flights不显示过远未来的日期,则该年份的查询会标记为失败。不要隐藏失败日期,需在
failures
中一并上报。

Reservation link policy

预订链接规则

  • booking_search_url
    은 Google Flights 검색 URL이다.
  • 특정 항공사/OTA 결제 단계 deep link를 자동 추출하거나 클릭하지 않는다.
  • 결제·예약 확정·로그인·여권 정보 입력은 skill 범위 밖이다.
  • 사용자가 예약까지 원하면 링크를 열어 직접 확인하도록 안내한다.
  • booking_search_url
    为Google Flights搜索URL。
  • 不会自动提取或点击特定航空公司/OTA的支付阶段深度链接。
  • 支付、预订确认、登录、护照信息输入均不属于Skill的处理范围。
  • 若用户需要完成预订,需引导其打开链接自行操作。

Response style

响应格式

대표님에게는 짧게 핵심부터 보고한다.
좋은 형식:
text
ICN → NRT / 2026-06-01 / 성인 1명 / economy
가격 band: typical
최저/평균/최고: ₩129,800 / ₩254,000 / ₩684,400
예약 검색 링크: <url>

1. Jeju Air — 09:45 → 12:15 / 2h30m / 직항 / ₩129,800
2. Air Seoul — 09:20 → 11:50 / 2h30m / 직항 / ₩143,500
3. Air Premia — 08:50 → 11:20 / 2h30m / 직항 / ₩160,800
월별 비교:
text
ICN → NRT / 2026-06 weekly 샘플
최저: 6/1 ₩129,800
샘플 평균: ₩142,300
비싼 날: 6/22 ₩188,000

싼 날짜 TOP 3
1. 2026-06-01 — ₩129,800
2. 2026-06-08 — ₩135,000
3. 2026-06-15 — ₩144,000
파싱 누락 후보는 숨기지 말고 이렇게 표시한다.
text
항공편 상세 확인 불가 — 시간 확인 불가 / 가격 ₩228,700
※ Google Flights 응답에서 항공사·시간 파싱이 일부 누락됐습니다.
向用户汇报时需简洁,先展示核心信息。
推荐格式:
text
ICN → NRT / 2026-06-01 / 成人1名 / economy
价格区间: typical
最低/平均/最高: ₩129,800 / ₩254,000 / ₩684,400
预订搜索链接: <url>

1. 济州航空 — 09:45 → 12:15 / 2小时30分 / 直飞 / ₩129,800
2. 首尔航空 — 09:20 → 11:50 / 2小时30分 / 直飞 / ₩143,500
3. Air Premia — 08:50 → 11:20 / 2小时30分 / 直飞 / ₩160,800
月度对比:
text
ICN → NRT / 2026-06 weekly采样
最低: 6/1 ₩129,800
样本平均: ₩142,300
高价日期: 6/22 ₩188,000

低价日期TOP3
1. 2026-06-01 — ₩129,800
2. 2026-06-08 — ₩135,000
3. 2026-06-15 — ₩144,000
对于解析失败的航班候选,不要隐藏,需按如下方式展示:
text
航班详情无法确认 — 时间未知 / 价格 ₩228,700
※ Google Flights响应中部分航空公司、时间信息解析失败。

Failure modes

失败场景

  • Google Flights HTML/프론트엔드 구조 변경으로 항공사명·시간 파싱이 비거나 깨질 수 있다.
  • 일부 노선은 가격만 나오고 항공편 상세가
    partial
    로 떨어질 수 있다.
  • 잘못된 IATA 코드, 동일 출도착 공항, 실제 항공편이 없는 구간은 실패한다.
  • 너무 먼 미래 날짜는 upstream에서 결과가 없을 수 있다.
  • 비교 기능은 날짜별 실시간 조회라 요청 수가 많다. daily 월별 비교는 30회 안팎의 요청이 발생한다.
  • fast-flights
    fallback이 외부 fetch helper를 쓰는 경우 401
    no token provided
    가 날 수 있다. 동일 입력의 실사용성이 낮은 케이스면 사전 validation으로 막고, 정상 노선이면 잠시 후 재시도한다.
  • 若Google Flights的HTML/前端结构发生变化,可能导致航空公司名称、时间解析为空或出错。
  • 部分航线可能仅显示价格,航班详情为
    partial
    (部分)状态。
  • 无效IATA代码、出发到达机场相同、无实际航班的航线会查询失败。
  • 过远未来的日期可能无法从上游获取结果。
  • 对比功能需按日期实时查询,请求量较大。每日月度对比会产生约30次请求。
  • fast-flights
    的降级方案使用外部fetch辅助工具,可能会出现401
    no token provided
    错误。对于实际可用性低的输入场景,需通过预验证拦截;对于正常航线,需在短暂等待后重试。

Verified discovery notes

验证测试记录

2026-05-10 로컬 프로브 기준:
  • Skyscanner home/API: CAPTCHA/403 blocked로 직접 provider 부적합.
  • Kiwi Tequila API: 무료 계정 API key 필요. 기본 무료/no-key 경로는 아님.
  • Google Flights +
    fast-flights==2.2
    : 국내선/일본/동남아/미국/유럽/호주/남미 일부 성공.
  • 추가 테스트 성공:
    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명.
  • 정상 실패/차단 대상:
    GMP-ICN
    ,
    ICN-ICN
    , invalid airport code.
基于2026-05-10本地测试:
  • Skyscanner首页/API:触发CAPTCHA/403拦截,不适合直接作为数据源。
  • Kiwi Tequila API:需要免费账户API密钥,无默认免费/无密钥访问路径。
  • Google Flights +
    fast-flights==2.2
    :国内线、日本、东南亚、美国、欧洲、澳洲、南美部分航线查询成功。
  • 额外测试成功的航线:
    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
    ,商务舱,2名成人。
  • 正常失败/拦截的场景:
    GMP-ICN
    ,
    ICN-ICN
    , invalid airport code.

Done when

完成标准

  • 출발/도착/날짜/좌석/인원 조건을 확인했다.
  • 단일 검색이면 상위 후보와 예약 검색 링크를 제공했다.
  • 비교 검색이면 샘플 방식과 최저/평균/최고, 싼 날짜 TOP을 제공했다.
  • 가격은 조회 시점 기준이며 실제 결제가는 달라질 수 있음을 표시했다.
  • 로그인/결제/CAPTCHA 우회는 하지 않았다.
  • 确认了出发/到达/日期/座位/人数条件。
  • 单次搜索时提供了候选航班及预订搜索链接。
  • 对比搜索时提供了采样方式、最低/平均/最高价及低价日期TOP。
  • 已说明价格为查询时的价格,实际支付价格可能有所不同。
  • 未进行登录/支付/CAPTCHA绕过操作。