336 lines
14 KiB
Python
336 lines
14 KiB
Python
"""
|
||
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())
|