Files
wiki/tasks/flightradar24/ingest/schedule/city_iata.py
2026-04-21 00:50:01 +03:00

336 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
CITY_TO_IATA — маппинг русских названий городов → IATA-коды аэропортов.
Используется для парсинга маршрутов из заголовков рейсов Яндекс.Расписаний.
Ключи: нижний регистр (сравнение делать через .lower().strip()).
"""
CITY_TO_IATA: dict[str, str] = {
# ── Россия ────────────────────────────────────────────────────────────────
"москва": "SVO", # Шереметьево (основной)
"москва (шереметьево)": "SVO",
"москва (домодедово)": "DME",
"москва (внуково)": "VKO",
"москва (жуковский)": "ZIA",
"шереметьево": "SVO",
"домодедово": "DME",
"внуково": "VKO",
"жуковский": "ZIA",
"санкт-петербург": "LED",
"петербург": "LED",
"питер": "LED",
"пулково": "LED",
"новосибирск": "OVB",
"екатеринбург": "SVX",
"казань": "KZN",
"сочи": "AER",
"адлер": "AER",
"краснодар": "KRR",
"уфа": "UFA",
"ростов-на-дону": "ROV",
"пермь": "PEE",
"воронеж": "VOZ",
"самара": "KUF",
"омск": "OMS",
"челябинск": "CEK",
"красноярск": "KJA",
"иркутск": "IKT",
"владивосток": "VVO",
"нижний новгород": "GOJ",
"хабаровск": "KHV",
"тюмень": "TJM",
"барнаул": "BAX",
"томск": "TOF",
"кемерово": "KEJ",
"новокузнецк": "NOZ",
"якутск": "YKS",
"магадан": "GDX",
"петропавловск-камчатский": "PKC",
"южно-сахалинск": "UUS",
"мурманск": "MMK",
"архангельск": "ARH",
"астрахань": "ASF",
"волгоград": "VOG",
"саратов": "RTW",
"оренбург": "REN",
"ставрополь": "STW",
"минеральные воды": "MRV",
"нальчик": "NAL",
"владикавказ": "OGZ",
"махачкала": "MCX",
"грозный": "GRV",
"симферополь": "SIP",
"калининград": "KGD",
"псков": "PKV",
"великий новгород": "NNV",
"вологда": "VGD",
"ярославль": "IAR",
"иваново": "IWA",
"тверь": "KLD",
"рязань": "RZN",
"липецк": "LPK",
"белгород": "EGO",
"курск": "URS",
"брянск": "BZK",
"смоленск": "LNX",
"тула": "TYA",
"калуга": "KLF",
"орёл": "OEL",
"тамбов": "TBW",
"пенза": "PEZ",
"ульяновск": "ULV",
"нижнекамск": "NBC",
"чебоксары": "CSY",
"йошкар-ола": "JOK",
"саранск": "SKX",
"киров": "KVX",
"сыктывкар": "SCW",
"ухта": "UCT",
"нарьян-мар": "NNM",
"воркута": "VKT",
"салехард": "SLY",
"ханты-мансийск": "HMA",
"сургут": "SGC",
"нижневартовск": "NJC",
"ноябрьск": "NOJ",
"новый уренгой": "NUX",
"надым": "NYM",
"нефтеюганск": "NFG",
"когалым": "KGP",
"стрежевой": "SWT",
"горно-алтайск": "RGK",
"абакан": "ABA",
"кызыл": "KYZ",
"улан-удэ": "UUD",
"чита": "HTA",
"благовещенск": "BQS",
"комсомольск-на-амуре": "KXK",
"николаевск-на-амуре": "NLI",
"магнитогорск": "MQF",
"нижний тагил": "NTL",
"курган": "KRO",
"тобольск": "TOX",
"ижевск": "IJK",
"нижнеудинск": "NER",
"братск": "BTK",
"усть-илимск": "UIK",
"бодайбо": "ODO",
"мирный": "MJZ",
"нерюнгри": "NER",
"анадырь": "DYR",
"провидения": "PVS",
"певек": "PWE",
"тикси": "IKS",
"черский": "CYX",
"хандыга": "HTG",
"усть-нера": "USR",
"сусуман": "SUY",
"сеймчан": "SEK",
"зырянка": "ZYR",
"среднеколымск": "SEK",
"беслан": "OGZ",
"элиста": "ESL",
"астрахань": "ASF",
"геленджик": "GDZ",
"анапа": "AAQ",
"темрюк": "TBW",
"ейск": "EIK",
"майкоп": "DJU",
# ── СНГ / постсоветское пространство ─────────────────────────────────────
"минск": "MSQ",
"алматы": "ALA",
"нур-султан": "NQZ",
"астана": "NQZ",
"ташкент": "TAS",
"баку": "GYD",
"ереван": "EVN",
"тбилиси": "TBS",
"бишкек": "FRU",
"душанбе": "DYU",
"ашхабад": "ASB",
"самарканд": "SKD",
"ургенч": "UGC",
"фергана": "FEG",
"андижан": "AZN",
"навои": "NVI",
"актобе": "AKX",
"актау": "SCO",
"атырау": "GUW",
"шымкент": "CIT",
"павлодар": "PWQ",
"усть-каменогорск": "UKK",
"семей": "PLX",
"костанай": "KSN",
"кокшетау": "KOV",
"тараз": "DMB",
"кызылорда": "KZO",
"уральск": "URA",
"туркестан": "HSA",
"киев": "KBP",
"одесса": "ODS",
"харьков": "HRK",
"львов": "LWO",
"кишинёв": "KIV",
"кишинев": "KIV",
"рига": "RIX",
"таллин": "TLL",
"вильнюс": "VNO",
"ашгабат": "ASB",
# ── Популярные зарубежные направления ─────────────────────────────────────
# Турция
"стамбул": "IST",
"анкара": "ESB",
"анталья": "AYT",
"анталия": "AYT",
"бодрум": "BJV",
"даламан": "DLM",
"измир": "ADB",
"трабзон": "TZX",
# ОАЭ
"дубай": "DXB",
"абу-даби": "AUH",
"шарджа": "SHJ",
# Египет
"каир": "CAI",
"хургада": "HRG",
"шарм-эль-шейх": "SSH",
"шарм эль шейх": "SSH",
# Таиланд
"бангкок": "BKK",
"пхукет": "HKT",
"самуи": "USM",
"паттайя": "UTP",
# Европа
"париж": "CDG",
"лондон": "LHR",
"берлин": "BER",
"рим": "FCO",
"милан": "MXP",
"барселона": "BCN",
"мадрид": "MAD",
"вена": "VIE",
"прага": "PRG",
"варшава": "WAW",
"амстердам": "AMS",
"брюссель": "BRU",
"цюрих": "ZRH",
"женева": "GVA",
"франкфурт": "FRA",
"мюнхен": "MUC",
"гамбург": "HAM",
"дюссельдорф": "DUS",
"стокгольм": "ARN",
"копенгаген": "CPH",
"осло": "OSL",
"хельсинки": "HEL",
"будапешт": "BUD",
"бухарест": "OTP",
"афины": "ATH",
"лиссабон": "LIS",
"дублин": "DUB",
"лимасол": "LCA",
"ларнака": "LCA",
"никосия": "LCA",
"белград": "BEG",
"загреб": "ZAG",
"любляна": "LJU",
"скопье": "SKP",
"тирана": "TIA",
"подгорица": "TGD",
"сараево": "SJJ",
"черногория": "TIV",
"тиват": "TIV",
"дубровник": "DBV",
"сплит": "SPU",
"пула": "PUY",
"задар": "ZAD",
"хорватия": "ZAG",
# Азия
"токио": "NRT",
"осака": "KIX",
"сеул": "ICN",
"пекин": "PEK",
"шанхай": "PVG",
"гонконг": "HKG",
"сингапур": "SIN",
"куала-лумпур": "KUL",
"джакарта": "CGK",
"бали": "DPS",
"манила": "MNL",
"ханой": "HAN",
"хошимин": "SGN",
"коломбо": "CMB",
"мале": "MLE",
"катманду": "KTM",
"дели": "DEL",
"мумбаи": "BOM",
"бомбей": "BOM",
"карачи": "KHI",
"лахор": "LHE",
"исламабад": "ISB",
"тегеран": "IKA",
"маскат": "MCT",
"доха": "DOH",
"кувейт": "KWI",
"амман": "AMM",
"бейрут": "BEY",
"тель-авив": "TLV",
"тель авив": "TLV",
# Африка
"найроби": "NBO",
"аддис-абеба": "ADD",
"йоханнесбург": "JNB",
"касабланка": "CMN",
"тунис": "TUN",
# Америка
"нью-йорк": "JFK",
"нью йорк": "JFK",
"лос-анджелес": "LAX",
"лос анджелес": "LAX",
"майами": "MIA",
"чикаго": "ORD",
"торонто": "YYZ",
"ванкувер": "YVR",
"монреаль": "YUL",
"мехико": "MEX",
"гавана": "HAV",
"канкун": "CUN",
"лима": "LIM",
"богота": "BOG",
"сан-паулу": "GRU",
"буэнос-айрес": "EZE",
"сантьяго": "SCL",
# Австралия/Океания
"сидней": "SYD",
"мельбурн": "MEL",
"перт": "PER",
"брисбен": "BNE",
# Дополнительные российские города
"читать": "HTA",
"нефтекамск": "UUA",
"березники": "PEE",
"стерлитамак": "UFA",
"тольятти": "KUF",
"рыбинск": "IAR",
"дзержинск": "GOJ",
"владимир": "VKO",
"кострома": "KMW",
"орск": "OSW",
"нижний тагил": "NTL",
"асбест": "SVX",
"нижневартовск": "NJC",
"мегион": "NFG",
"лангепас": "KGP",
"лысьва": "PEE",
"краснотурьинск": "SVX",
"серов": "SVX",
"первоуральск": "SVX",
"каменск-уральский": "SVX",
}
def get_iata(city_name: str) -> str | None:
"""Возвращает IATA-код по русскому названию города (регистронезависимо)."""
return CITY_TO_IATA.get(city_name.lower().strip())