Flywizz について
Flywizzは、Wizz Airのフライトデータを取得する非公式のオープンソースPythonラッパーで、自然言語検索用のMCPサーバーも含みます。時刻表、運賃、路線、運航状況を扱い、一部の空席照会エンドポイントにはボット対策があると説明しています。
主な機能
- 01運航日と時刻表の検索
- 02日付別の運賃比較
- 03路線と目的地の探索
- 04フライト状況の取得
- 05非同期クライアントメソッド
活用シーン
- 01指定路線と期間のフライト検索
- 02日付ごとの運賃比較
- 03空港から行ける目的地の探索
- 04フライト状況の確認
MCP 対応
付属のMCPサーバーにより、MCPクライアントから自然言語でWizz Airのフライトを検索できます。READMEでは Claude Desktop、Claude Code、Cursor がクライアントとして挙げられています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| adults | integer | いいえ | |
| origin | string | はい | |
| date_to | string | はい | |
| infants | integer | いいえ | |
| children | integer | いいえ | |
| date_from | string | はい | |
| destination | string | はい | |
| wizz_discount_club | boolean | いいえ |
詳細
Flywizz SDK
Wizz Air のフライトデータを取得するための、オープンソースの非公式 API ラッパーです。
ヒント
AI エージェント向けの MCP サーバーを同梱しています。 Flywizz を Claude Desktop、 Claude Code、または Cursor に接続して、自然言語で Wizz Air のフライトを検索できます。 MCP クイックスタートへ進んでください。
目次
- インストール
- クイックスタート
- 最初に知っておくべき3つのこと
- API リファレンス
- データモデル
- 例
- 多数のルートを一度に確認する
- 乗り継ぎが必要なフライト
- 探索モード
- Claude、Cursor、その他の MCP クライアントで使用する
- API の特性
- キャッシュ
- レート制限
- コントリビューション
- 免責事項
インストール
pip install Flywizz
または uv を使用します。
uv add Flywizz
クイックスタート
from datetime import datetime, timedelta
from flywizz import WizzAir, TimetableSearch
# Initialize the client
client = WizzAir()
# Set up search parameters
search = TimetableSearch(
origin="BUD", # Budapest
destination="LTN", # London Luton
date_from=datetime.now() + timedelta(days=30),
date_to=datetime.now() + timedelta(days=60),
)
# One call gets the schedule and the prices
for day in client.get_timetable(search):
if day.price is None:
continue
print(f"{day.departure_date.date()}: {day.price.amount} {day.price.currency}")
print(f" departures: {', '.join(d.departure.strftime('%H:%M') for d in day.departures)}")
各エントリーは1運航日を表します。その日の最安運賃に加えて、すべての出発時刻も含まれるため、1回の呼び出しで「いつ運航するか」と「料金はいくらか」の両方がわかります。
最初に知っておくべき3つのこと
料金は出発地の通貨で表示されます
Wizz Air にはサーバー側の通貨上書き機能がありません。BUD -> LTN は HUF、LTN -> BUD は GBP、WAW -> LTN は PLN で料金が表示されます。currency という名前の本文フィールド、クエリパラメーター、Cookie、ヘッダーはすべて無視されます。
検索前に通貨を確認する必要がある場合は、get_network() から Station.currency_code を取得し、クライアント側で換算してください。
すべての運航日に料金が表示されるわけではありません
timetableV2 と farechart は各日に price オブジェクトを付与しますが、料金が直接表示されない日には、amount が 0 で、price_type は checkPrice(運賃は存在しますが、search/search 経由でのみ確認できます)または noData のいずれかになります。Flywizz はどちらも price=None にマッピングするため、料金が表示されていない日を無料と誤認することはありません。時刻表のエントリーでは、original_price を通じて引き続き参考運賃を確認できます。
for day in client.get_timetable(search):
if day.price is not None:
print(day.departure_date.date(), day.price.amount, day.price.currency)
elif day.original_price is not None:
print(day.departure_date.date(), "~", day.original_price.amount, "(check price)")
検索期間には上限があり、上限はそれぞれ異なります
料金が表示されるデータと表示されないデータでは、先の日付をどこまで検索できるかが異なります。どちらも期間が広すぎると 400 InvalidTimeDateRange を返し、詳しい説明はありません。そのため Flywizz は、それぞれの上限を明記したメッセージとともに、各上限を適用します。
from flywizz.misc import (
MAX_TIMETABLE_WINDOW_DAYS, # 42, for timetableV2 and farechart
MAX_FLIGHT_DATES_WINDOW_DAYS, # 62, for the schedule endpoints
)
cheapest_weekend() は、デフォルトの months_ahead=3 がどちらの上限も大幅に超えるため、内部で期間を分割します。
search/search はボットゲートの背後にあります
4つのエンドポイント(search/search、booking/seatmap、booking/ancillaries、booking/passengers)は Kasada の背後にあり、ブラウザー以外のクライアントからのリクエストには、空の本文とともに 429 を返します。Flywizz はチャレンジの解決を試みず、BotGateError を発生させます。
料金が表示される timetableV2 と farechart を含め、それ以外はすべて公開されています。これだけで料金の追跡、ルートの探索、カレンダー検索が可能です。運賃バンドルとセールキーが必要な場合は、実際のブラウザーセッションを使用し、そのヘッダーを渡してください。
from flywizz import WizzAir, WizzairTransport
client = WizzAir(WizzairTransport(kasada_headers={
"x-kpsdk-ct": "...",
"x-kpsdk-v": "...",
"x-kpsdk-h": "...",
"x-kpsdk-cd": "...",
}))
ゲート、セッションのハンドシェイク、ルートテーブル全体の詳細については、docs/internal-api-spec.mdを参照してください。
API リファレンス
WizzAir クラス
コンストラクター
WizzAir(transport: Optional[Transport] = None)
新しい Wizz Air クライアントインスタンスを作成します。
パラメーター:
transport(Transport、任意):カスタムトランスポートを注入します。たとえば、デフォルトをラップするCachingTransport、kasada_headersを備えたWizzairTransport、またはテスト用のフィクスチャトランスポートを指定できます。デフォルトは、新しいWizzairTransportです。
例:
# Defaults
client = WizzAir()
# With caching for the 650 KB network metadata
from flywizz import CachingTransport, WizzairTransport
client = WizzAir(CachingTransport(WizzairTransport(), ttl=3600))
メソッド
| メソッド | エンドポイント | 取得できる内容 |
|---|---|---|
get_network(language="en-gb") | asset/map | すべての空港、座標、通貨、就航路線 |
get_destinations(origin, direct_only=True) | derived | origin から到達できる空港 |
explore_by_country(origin) | derived | 国コード別に分類された目的地 |
validate_route(origin, destination) | derived | Wizz Air がこの路線を直行便で運航しているかどうか |
get_flight_dates(origin, destination, date_from, date_to) | search/flightDates | 運航日。料金情報はなく、非常に低負荷です |
get_flight_dates_multi(origin, destinations, date_from, date_to) | search/FlightDatesMultiArrival | 1 リクエストあたり最大 5 か所の目的地の運航日をバッチで取得 |
get_connecting_flight_dates(origin, destination, date_from, date_to) | search/dohopFlightDates | 乗り継ぎ 1 回の便も含む運航日 |
get_timetable(params) | search/timetableV2 | 日ごとの最安料金と、すべての出発便 |
get_return_timetable(params) | search/timetableV2 | 1 回の呼び出しで往路と復路を取得 |
get_fare_chart(params) | asset/farechart | 指定日付の前後の料金一覧 |
get_availability(params) | search/search | 運賃バンドルと販売キー。ボットによる制限があります |
cheapest_in_month(origin, destination, month) | derived | 1 か月間で最も安い日 |
cheapest_weekend(origin, destination, months_ahead=3) | derived | 金曜から日曜、または金曜から月曜の往復で最も安い日程 |
explore_with_fares(origin, date_from, date_to, limit=None) | derived | 各目的地の最安料金 |
get_flight_status(carrier_code, flight_number, date=None) | asset/flightinformation | 1 つの便名のリアルタイム運航状況 |
get_currencies() | asset/currencies | 対応する ISO 4217 コード |
get_countries() | asset/country | EU/シェンゲン協定のフラグ付きの国 |
get_cultures() | asset/cultures | サイトの言語と各言語の通貨 |
get_service_fees(currencies=None) | asset/serviceFees | 公開されている手荷物、座席、変更の手数料 |
get_wdc_prices() | asset/wdcPrice | Discount Club の会員ランクと最低割引額 |
すべてのメソッドは、同じシグネチャで AsyncWizzAir にも用意されています。
TimetableSearch クラス
時刻表検索のパラメーターです。
TimetableSearch(
origin: str,
destination: str,
date_from: datetime,
date_to: datetime,
return_date_from: Optional[datetime] = None,
return_date_to: Optional[datetime] = None,
adults: int = 1,
children: int = 0,
infants: int = 0,
price_type: str = "regular",
)
パラメーター:
origin(str):出発空港の IATA コード(例:"BUD")destination(str):到着空港の IATA コード(例:"LTN")date_from(datetime):往路の出発期間の開始日時date_to(datetime):往路の出発期間の終了日時return_date_from/return_date_to(datetime、任意):復路の期間です。get_return_timetable()では両方が必須ですadults/children/infants(int):乗客数です。大人は少なくとも 1 人必要ですprice_type(str):Wizz Discount Club の料金には"regular"または"wdc"を指定します
FareChartSearch クラス
料金一覧のパラメーターです。
FareChartSearch(
origin: str,
destination: str,
date: datetime,
day_interval: int = 3,
adults: int = 1,
children: int = 0,
infants: int = 0,
price_type: str = "regular",
)
day_interval は date の前後の期間を指定する値で、3 以上である必要があります。そのため、デフォルトでは 7 日間が返されます。3 未満の値は、上流で DayIntervalMustBeGreaterOrEqualTo3 により拒否されます。
AvailabilitySearch クラス
ボットによる制限がある空席照会のパラメーターです。
AvailabilitySearch(
origin: str,
destination: str,
departure_date: datetime,
return_date: Optional[datetime] = None,
wdc: bool = True,
is_flight_change: bool = False,
adults: int = 1,
children: int = 0,
infants: int = 0,
)
データモデル
Price
Wizz Air が報告する金額を表します。
属性:
amount(float):金額currency(str):ISO 4217 コード。常に出発空港の通貨ですexchanged_amount(Optional[float]):SPA のクライアント側通貨換算フックです。 匿名セッションではNoneのままですexchanged_currency(Optional[str]):exchanged_amountの通貨
TimetableEntry
運航日のうちの1日分の路線と、最安運賃です。
属性:
departure_station(str)、arrival_station(str):IATAコードdeparture_date(datetime):運航日price(Optional[Price]):その日の最安運賃。完売の場合はNoneoriginal_price(Optional[Price]):割引前の価格departures(list[Departure]):その日のすべての出発便price_type(Optional[str]):在庫があった場合は"price"has_mac_flight(bool):路線に大都市圏の代替空港が含まれるかどうかapplied_coupon_code(Optional[str])
Departure
属性:
departure(datetime):出発時刻is_cheapest_of_the_day(bool):この出発便がpriceの対象かどうか
FlightDate
get_connecting_flight_dates() から返される運航日のうちの1日分です。
属性:
date(datetime):運航日stops(int):直行便の場合は0、乗り継ぎの場合は1以上is_direct(bool):プロパティ。stopsが0の場合はtrue
FareChartEntry
価格一覧の1日分です。
属性:
departure_station(str)、arrival_station(str):IATAコードday(datetime):日付price(Optional[Price]):その日の最安価格class_of_service(Optional[str]):見積もりの取得元となった予約クラスprice_type(Optional[str])、has_mac_flight(bool)
Station
Wizz Air の運航中ネットワークにある空港です。探索メソッドから返されます。
属性:
iata(str):IATA 空港コードname(str):空港名country_code(str):大文字の ISO2 国コード(例:"HU"、"GB")country_name(str):国名currency_code(str):現地通貨。この空港発の運賃はこの通貨で表示されますlatitude(float)、longitude(float):座標mac(Optional[str]):大都市圏コード(例:"LON")aliases(list[str]):別名categories(list[int]):Wizz Air が割り当てたマーケティングカテゴリrank(Optional[int])、is_fake_station(bool)connections(list[Connection]):この空港から運航するすべての路線
ヘルパー:destinations(direct_only=True) は IATA コードのみを返します。
Connection
属性:
iata(str):目的地の空港コードis_direct(bool):Wizz Air の直行便かどうか。通常はこちらのフラグを使用しますis_connected(bool):直行便ではなく、セルフトランスファーの乗り継ぎかどうかis_domestic(bool)、is_new(bool)operation_start_date(Optional[datetime]):路線の運航開始日
FlightStatus
フライト情報エンドポイントから返される、運航中の1便分の情報です。
属性:
flight_id(int)、carrier_code(str)、flight_number(int)departure_airport(str)、arrival_airport(str)original_departure_airport/original_arrival_airport(Optional[str]): 便が別の空港に変更された場合、実際の空港とは異なりますoperation_day(Optional[datetime])scheduled_departure/scheduled_arrival(Optional[datetime])op_suffix(Optional[str])
DestinationFare
explore_with_fares() から返されます。到達可能な目的地と、価格照会で取得できた場合はサンプル期間中の最安運賃を組み合わせたものです。
属性:
station(Station):目的地price(Optional[Price]):期間中の最安運賃。路線がネットワーク内にあっても、価格付きの在庫情報が返されなかった場合はNonedeparture_date(Optional[datetime]):その運賃が適用された日
例
1か月のうち最も安い日
from datetime import datetime
from flywizz import WizzAir
client = WizzAir()
cheapest = client.cheapest_in_month("BUD", "LTN", datetime(2026, 11, 1))
if cheapest:
print(f"{cheapest.departure_date.date()}: "
f"{cheapest.price.amount} {cheapest.price.currency}")
前後1日と比べて安いかどうか
from datetime import datetime
from flywizz import WizzAir, FareChartSearch
client = WizzAir()
strip = client.get_fare_chart(
FareChartSearch(origin="BUD", destination="LTN",
date=datetime(2026, 11, 10), day_interval=3)
)
for day in strip:
price = f"{day.price.amount:.0f} {day.price.currency}" if day.price else "-"
print(f"{day.day.date()} {price}")
今後3か月で最も安い週末
from flywizz import WizzAir
client = WizzAir()
weekend = client.cheapest_weekend("BUD", "LTN", months_ahead=3)
if weekend:
out, back = weekend
total = out.price.amount + back.price.amount
print(f"{out.departure_date.date()} -> {back.departure_date.date()}: "
f"{total} {out.price.currency}")
Discount Club の価格
from datetime import datetime, timedelta
from flywizz import WizzAir, TimetableSearch
client = WizzAir()
wdc = client.get_timetable(
TimetableSearch(
origin="BUD", destination="LTN",
date_from=datetime.now() + timedelta(days=30),
date_to=datetime.now() + timedelta(days=45),
price_type="wdc",
)
)
リアルタイムのフライト状況
from flywizz import WizzAir
client = WizzAir()
for leg in client.get_flight_status("W6", "6201"):
print(f"{leg.operation_day.date()} {leg.departure_airport} -> {leg.arrival_airport}")
航空会社コードは AOC の接頭辞です:W6(ハンガリー)、W4(マルタ)、W9(英国)。
エラー処理
from flywizz import BotGateError, ValidationError, WizzairException
try:
entries = client.get_timetable(search)
if not entries:
print("No flights found for the given criteria")
except ValidationError as e:
print(f"Wizz Air rejected the request: {e.codes}")
except BotGateError:
print("This endpoint needs a browser session")
except WizzairException as e:
print(f"Wizz Air API error: {e}")
ValidationError.codes には Wizz Air 独自の検証コードが含まれ、問題があったフィールドを示します。空のリストは API に一致する結果がなかったことを意味し、失敗を意味することはありません。
複数の路線を一度に確認する
get_flight_dates_multi() は、1 回のリクエストで複数の目的地の運航スケジュールに関する質問に答えます。get_flight_dates() を繰り返し呼び出す場合と比べて、費用は 5 分の 1 です。
from datetime import datetime, timedelta
from flywizz import WizzAir, WizzairTransport, CachingTransport
client = WizzAir(CachingTransport(WizzairTransport()))
start = datetime.now() + timedelta(days=30)
destinations = [s.iata for s in client.get_destinations("BUD")]
dates = client.get_flight_dates_multi("BUD", destinations, start, start + timedelta(days=30))
for iata, days in dates.items():
print(f"{iata}: {len(days)} operating days")
指定したすべての目的地が結果に含まれます。指定期間に運航していない路線は、結果から欠落するのではなく空のリストとして返されるため、含まれているか確認し忘れる心配はありません。
エンドポイントが 1 回のリクエストで受け付ける目的地は最大 5 つで、上限を超えるリストはエラーではなく、結果なしとして返されます。Flywizz が自動でバッチ処理するため、渡すリストに実質的な上限はありません。
運賃は別です。運賃を取得するバッチ処理用の機能はないため、explore_with_fares() は目的地ごとに 1 回ずつ呼び出す必要があります。
乗り継ぎが必要なフライト
validate_route() と get_flight_dates() が対象とするのは直行便のみです。そのため、いずれかが False を返しても、その路線を利用できないとは限りません。
get_connecting_flight_dates() は、乗り継ぎが必要な組み合わせにも対応しています。
from datetime import datetime, timedelta
from flywizz import WizzAir
client = WizzAir()
start = datetime.now() + timedelta(days=30)
client.validate_route("KTW", "LIS") # False - no direct flight
for day in client.get_connecting_flight_dates("KTW", "LIS", start, start + timedelta(days=30)):
print(day.date.date(), "direct" if day.is_direct else f"{day.stops} stop(s)")
直行便が一部の曜日にしか運航していない路線では、直行便と乗り継ぎ便の両方が混在して返されるため、乗り継ぎが必要な曜日を確認できます。直行便のみが必要な場合は、is_direct で絞り込んでください。
探索モード
探索モードでは、「ここから実際にどこへ飛べるか」を確認できます。Wizz Air の最新のネットワークメタデータを一度読み込み、任意の出発地から到達できる目的地を返します。必要に応じてグループ化したり、指定期間内の最安運賃と組み合わせたりできます。
以下のすべてのメソッドは、WizzAir と AsyncWizzAir の両方で利用できます。
すべての目的地を一覧表示する
for station in client.get_destinations("BUD"):
print(f"{station.iata} {station.name} ({station.country_code})")
セルフ乗り継ぎを含めるには、direct_only=False を指定してください。
目的地をグループ化する
by_country = client.explore_by_country("BUD")
print(f"BUD flies to {len(by_country)} countries")
for country, stations in sorted(by_country.items()):
codes = ", ".join(s.iata for s in stations)
print(f" {country}: {codes}")
国コードは ISO2 の大文字です。
特定の路線を確認する
client.validate_route("BUD", "LTN") # True
最安運賃付きの目的地
explore_with_fares() はネットワーク上の目的地と時刻表の検索結果を組み合わせます。そのため、各目的地について、最安の Price が返されます。指定期間内にその路線の空席情報が返されなかった場合は None になります。
Wizz Air には「どこへでも」という検索機能がないため、目的地ごとに 1 回呼び出す必要があります。繰り返し処理する際は limit を使用し、トランスポートを CachingTransport でラップしてください。
from datetime import datetime, timedelta
start = datetime.now() + timedelta(days=30)
end = start + timedelta(days=14)
results = client.explore_with_fares("BUD", start, end, limit=20)
priced = [d for d in results if d.price is not None]
for d in sorted(priced, key=lambda d: d.price.amount)[:10]:
print(f"{d.station.iata} {d.station.name}: "
f"{d.price.amount} {d.price.currency}")
目的地ごとの運賃はすべて出発地の通貨で表示されるため、そのまま比較できます。
非同期での使用
AsyncWizzAir にはすべての探索メソッドが用意されており、explore_with_fares() は同時に複数のリクエストを実行します。
import asyncio
from datetime import datetime, timedelta
from flywizz import AsyncWizzAir
async def main():
async with AsyncWizzAir() as client:
results = await client.explore_with_fares(
"BUD",
datetime.now() + timedelta(days=30),
datetime.now() + timedelta(days=45),
limit=20,
concurrency=5,
)
print(f"{sum(1 for r in results if r.price)} priced destinations")
asyncio.run(main())
探索メソッドを続けて複数回呼び出す場合は、ネットワークメタデータが一度だけ取得され、再利用されるように、トランスポートを CachingTransport でラップしてください。
Claude、Cursor、その他の MCP クライアントでの使用
重要
2 つのコマンドを実行するだけで完了です。
uv tool install "Flywizz[mcp]" claude mcp add flywizz flywizz-mcpこれで、エージェントは自然言語で Wizz Air のフライトを検索できるようになります。API キーもアカウントも不要です。
Flywizz にはオプションの Model Context Protocol サーバーが付属しており、エージェントは「11 月にブダペストからロンドンへ飛ぶ場合、最も安い曜日はいつ?」や「12 月の第 1 週にブダペストからどこへ飛べる?」といった自然言語のプロンプトで Wizz Air の運賃を検索できます。
クイックスタート
1. MCP エクストラ付きで Flywizz をインストールします。
uv tool install "Flywizz[mcp]"
または pip を使用します。
pipx install "Flywizz[mcp]"
これにより、flywizz-mcp コンソールスクリプトが PATH にインストールされます。
2. エージェントに追加します。
Claude Code(1 行のコマンド):
claude mcp add flywizz flywizz-mcp
Claude Desktop:macOS では ~/Library/Application Support/Claude/claude_desktop_config.json(Windows では %APPDATA%\Claude\claude_desktop_config.json)を開き、次を追加します。
{
"mcpServers": {
"flywizz": {
"command": "flywizz-mcp"
}
}
}
その後、Claude Desktop を再起動します。
Cursor:設定 → MCP → 新しいサーバーを追加し、名前に flywizz、コマンドに flywizz-mcp を指定します。
3. 試してみましょう。 エージェントに次のように尋ねます。
「11 月にブダペストからロンドン・ルートンへ飛ぶ場合、最も安い曜日はいつですか?」
エージェントは origin="BUD"、destination="LTN"、month="2026-11-01" を指定して cheapest_day を呼び出し、曜日と運賃を返します。
通貨
Wizz Air には通貨設定がないため、通貨設定はありません。各ツールは出発空港の現地通貨で運賃を返し、金額とともに通貨コードを報告します。ユーロと決めつけず、返された通貨で案内するようエージェントに伝えてください。
公開されているツール
エージェントが確実に選べるよう、サーバーは厳選した5つのツールを公開しています。
find_fares:「11月のBUDからLTNはいくらですか」に対応し、日ごとの詳細とすべての出発時刻を返しますcheapest_day:「今月、XからYへ飛ぶなら何曜日が最安ですか」に対応しますprice_around:「10日の前後1日で安くなりますか」に対応しますexplore_destinations:「Xからどの国へ行けますか」に対応しますflight_status:「W6 6201はいつ運航していますか」に対応します
API キー、アカウント、レート制限の設定は不要です。サーバーは呼び出し間で単一のキャッシュ済みWizzAirクライアントを再利用するため、ネットワークメタデータはプロセスごとに一度だけ取得されます。
ボット対策で制限されているsearch/searchエンドポイントは、意図的に公開していません。ヘッドレスプロセスからは動作せず、常に失敗するエージェントツールは、ツールがないよりも悪いためです。
API の特性
上流 API の以下の特性によって、この SDK でできることとできないことが決まります。Flywizz がすべて処理しますが、一部の呼び出しがそのように動作する理由を理解するうえで知っておくと役立ちます。
| 動作 | |
|---|---|
| 国コード | ISO 3166-1 alpha-2 の大文字表記です。小文字のコードは拒否されます。 |
| 認証 | 匿名で利用できますが、各リクエストにはセッションハンドシェイクと、呼び出しごとにローテーションする CSRF トークンが必要です。 |
| 通貨 | 出発空港によって決まり、変更できません。クライアント側で換算してください。 |
| 格安運賃の検索 | 「どこでも」を検索するエンドポイントはありません。explore_with_fares()は目的地ごとに1回の呼び出しを行います。 |
| 運賃を取得できるエンドポイント | timetableV2とfarechartは公開されていますが、search/searchは制限されています。 |
| ページネーション | ありません。すべてのレスポンスが完全なため、asset/mapは650 KBになります。 |
| 期間の上限 | 時刻表の期間は最大42日、スケジュールの期間は最大62日です。 |
| ボット対策 | 4つのエンドポイントで、常時 Kasada によるボット対策が行われています。 |
キャッシュ
asset/mapは650 KBで、変更もほとんどありません。複数回呼び出す場合は、トランスポートをラップしてください。
from flywizz import WizzAir, WizzairTransport, CachingTransport
client = WizzAir(CachingTransport(WizzairTransport(), ttl=3600))
非同期コードには非同期ラッパーが必要です。2つは互換性がありません。混在させるとコルーチンがキャッシュされるのではなく、TypeErrorが発生します。
from flywizz import AsyncWizzAir, AsyncWizzairTransport, AsyncCachingTransport
client = AsyncWizzAir(AsyncCachingTransport(AsyncWizzairTransport(), ttl=3600))
どちらのラッパーも POST リクエストはキャッシュしないため、運賃は常に最新の状態です。キャッシュを早めに破棄するにはinvalidate()を呼び出してください。
レート制限
SDK はネットワークエラーと5xxレスポンスに対し、最大4回まで指数バックオフで再試行します。意図的に429は再試行しません。この API では、これはバックプレッシャーではなく Kasada によるボット対策ゲートであり、再試行しても負荷が増えるだけで、リクエストは失敗するためです。
Wizz Air の API は匿名で利用できますが、あなた自身のものではありません。節度ある利用を心がけ、ネットワークメタデータをキャッシュし、explore_with_fares()による呼び出しの増加を控えめにし、運賃の変動頻度を超えて運賃をポーリングしないでください。
貢献
これはオープンソースプロジェクトです。貢献を歓迎します。CONTRIBUTING.mdをご覧ください。アーキテクチャに関するエージェント向けの説明はAGENTS.mdにあり、上流 API について判明しているすべての情報はdocs/internal-api-spec.mdに記載されています。
免責事項
これは非公式の API ラッパーであり、Wizz Air とは提携していません。航空会社の公式ウェブサイトが使用する公開エンドポイントに対して、読み取り専用のリクエストを実行します。ご自身の責任で使用し、Wizz Air の利用規約を遵守してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。