Fli

5个月前发布 239 00

Fli 是一个强大的 Python 库及 MCP(Model Context Protocol)服务器,通过逆向工程 Google Flights 的内部 API,为开发者和 AI 代理提供了程序化访问全球航班数据的优雅方案。

所在地:
美国
收录时间:
2026-05-21

在构建 AI 旅行助手或自动化行程规划工具时,获取稳定、实时的航班数据往往是一个难题传统的网页抓取方案不仅速度慢,还容易因页面结构变化而失效。Fli 是一个强大的 Python 库及 MCP(Model Context Protocol)服务器,通过逆向工程 Google Flights 的内部 API,为开发者和 AI 代理提供了程序化访问全球航班数据的优雅方案。

核心突破:纯 API 交互,拒绝低效抓取

与依赖 Selenium 或 BeautifulSoup 进行 HTML 解析的传统库不同,Fli 直接与 Google Flights 的后端 API 通信。这种架构带来了显著优势:

  • 极速响应:跳过浏览器渲染和 DOM 解析,直接获取结构化 JSON 数据。
  • 高可靠性:不受前端 UI 改版影响,稳定性远超网页抓取方案。
  • 零浏览器依赖:无需启动 Headless Chrome,资源占用极低,适合服务器端部署。
  • 模块化设计:架构清晰,易于定制和集成到各类应用中。

MCP 服务器:赋能 AI 代理的“机票专家”

Fli 原生支持 MCP 标准,使其能够轻松接入 Claude Desktop、Cursor 等支持 MCP 的 AI 客户端。这意味着你的 AI 助手可以直接“理解”并执行复杂的航班查询任务。

1. 快速部署

# 安装
pipx install flights

# 启动 STDIO 模式 MCP 服务器(推荐用于本地 AI 客户端)
fli-mcp

# 或启动 HTTP 模式(适合远程服务)
fli-mcp-http  # 默认监听 http://127.0.0.1:8000/mcp/

2. 集成 Claude Desktop

在 claude_desktop_config.json 中添加以下配置,即可让 Claude 直接调用 Fli:

{
  "mcpServers": {
    "fli": {
      "command": "/Users/<user>/.local/bin/fli-mcp"
    }
  }
}

3. 暴露给 AI 的工具

  • search_flights:在特定日期搜索航班,支持航空公司、舱位、经停次数等详细筛选。
  • search_dates:在灵活日期范围内扫描,找出最便宜的出行日期,适合预算敏感型用户。

功能亮点:专业级搜索能力

无论是通过命令行还是 Python API,Fli 都提供了媲美官方网站的搜索深度:

  • 多场景支持:单程、往返、多城市复杂行程(Multi-city)。
  • 精细筛选:
    • 时间窗口:指定出发/到达时间范围(如 --time 6-20)。
    • 航空公司:限定特定航司(如 --airlines BA,KL)。
    • 舱位等级:经济舱、高级经济舱、商务舱、头等舱。
    • 经停偏好:仅直飞、最多一次经停等。
  • 智能排序:按价格最低、时长最短、出发/到达时间最优排序。
  • 健壮性保障:内置速率限制、自动重试机制、全面错误处理及输入验证,确保生产环境稳定运行。

使用示例

1. 命令行(CLI)快速查询

# 基本搜索:JFK 到 LHR,2026年10月25日
fli flights JFK LHR 2026-10-25

# 高级筛选:商务舱、仅直飞、英航或荷航、按时长排序
fli flights JFK LHR 2026-10-25 \
    --time 6-20 \
    --airlines BA,KL \
    --class BUSINESS \
    --stops NON_STOP \
    --sort DURATION

# 多城市行程:西雅图 -> 东京 -> 香港 -> 西雅图
fli multi \
    -l SEA,NRT,2026-12-26 \
    -l NRT,HKG,2026-12-30 \
    -l HKG,SEA,2027-01-05 \
    --class BUSINESS

2. Python API 集成

from datetime import datetime, timedelta
from fli.models import Airport, PassengerInfo, SeatType, MaxStops, SortBy, FlightSearchFilters, FlightSegment
from fli.search import SearchFlights

# 构建搜索条件
filters = FlightSearchFilters(
    passenger_info=PassengerInfo(adults=1),
    flight_segments=[
        FlightSegment(
            departure_airport=[[Airport.JFK, 0]],
            arrival_airport=[[Airport.LAX, 0]],
            travel_date=(datetime.now() + timedelta(days=30)).strftime("%Y-%m-%d"),
        )
    ],
    seat_type=SeatType.ECONOMY,
    stops=MaxStops.NON_STOP,
    sort_by=SortBy.CHEAPEST,
)

# 执行搜索
search = SearchFlights()
flights = search.search(filters)

# 处理结果
for flight in flights:
    print(f"{flight.airline}: ${flight.price}")

通过绕过繁琐的网页抓取,Fli 让航班搜索变得像调用本地函数一样简单、快速且可靠。无论是构建个人旅行助手,还是企业级差旅管理系统,Fli 都是一个值得纳入技术栈的强大工具。

相关导航