Skip to main content
Glama
xiaonieli7

Flight Ticket MCP Server

by xiaonieli7
cities_dict.py9.88 kB
# -*- coding: utf-8 -*- """ 城市名称到机场代码映射字典 格式:{"城市名(机场代码)": "机场代码小写"} """ CITIES_DICT = { "上海(SHA)": "sha", "北京(BJS)": "bjs", "成都(CTU)": "ctu", "广州(CAN)": "can", "乌鲁木齐(URC)": "urc", "昆明(KMG)": "kmg", "深圳(SZX)": "szx", "重庆(CKG)": "ckg", "西安(SIA)": "sia", "杭州(HGH)": "hgh", "青岛(TAO)": "tao", "三亚(SYX)": "syx", "南京(NKG)": "nkg", "哈尔滨(HRB)": "hrb", "贵阳(KWE)": "kwe", "大连(DLC)": "dlc", "长沙(CSX)": "csx", "沈阳(SHE)": "she", "厦门(XMN)": "xmn", "海口(HAK)": "hak", "中国澳门(MFM)": "mfm", "阿里(NGQ)": "ngq", "安康(AKA)": "aka", "阿克苏(AKU)": "aku", "阿勒泰(AAT)": "aat", "安庆(AQG)": "aqg", "鞍山(AOG)": "aog", "安顺(AVA)": "ava", "安阳(AYN)": "ayn", "阿尔山(YIE)": "yie", "阿拉尔(ACF)": "acf", "阿拉善左旗(AXF)": "axf", "阿拉善右旗(RHT)": "rht", "包头(BAV)": "bav", "北海(BHY)": "bhy", "保山(BSD)": "bsd", "白山(NBS)": "nbs", "白城(DBC)": "dbc", "百色(AEB)": "aeb", "博乐(BPL)": "bpl", "布尔津(KJI)": "kji", "巴彦淖尔(RLK)": "rlk", "巴中(BZX)": "bzx", "巴里坤(DHH)": "dhh", "毕节(BFJ)": "bfj", "长治(CIH)": "cih", "长春(CGQ)": "cgq", "常德(CGD)": "cgd", "赤峰(CIF)": "cif", "朝阳(CHG)": "chg", "常州(CZX)": "czx", "池州(JUH)": "juh", "承德(CDE)": "cde", "昌都(BPX)": "bpx", "郴州(HCZ)": "hcz", "沧源(CWJ)": "cwj", "敦煌(DNH)": "dnh", "大理(DLU)": "dlu", "迪庆(DIG)": "dig", "大同(DAT)": "dat", "丹东(DDG)": "ddg", "大庆(DQA)": "dqa", "东营(DOY)": "doy", "稻城(DCY)": "dcy", "达州(DZH)": "dzh", "德令哈(HXD)": "hxd", "恩施(ENH)": "enh", "鄂州(EHU)": "ehu", "鄂尔多斯(DSN)": "dsn", "额济纳旗(EJN)": "ejn", "二连浩特(ERL)": "erl", "佛山(FUO)": "fuo", "富蕴(FYN)": "fyn", "阜阳(FUG)": "fug", "福州(FOC)": "foc", "抚远(FYJ)": "fyj", "桂林(KWL)": "kwl", "格尔木(GOQ)": "goq", "广元(GYS)": "gys", "赣州(KOW)": "kow", "固原(GYU)": "gyu", "中国高雄(KHH)": "khh", "甘孜(GZG)": "gzg", "果洛(GMQ)": "gmq", "黄山(TXN)": "txn", "呼和浩特(HET)": "het", "汉中(HZG)": "hzg", "海拉尔(HLD)": "hld", "邯郸(HDG)": "hdg", "合肥(HFE)": "hfe", "黑河(HEK)": "hek", "怀化(HJJ)": "hjj", "哈密(HMI)": "hmi", "和田(HTN)": "htn", "衡阳(HNY)": "hny", "惠州(HUZ)": "huz", "淮安(HIA)": "hia", "菏泽(HZA)": "hza", "花土沟(HTT)": "htt", "和静(HJB)": "hjb", "河池(HCJ)": "hcj", "霍林郭勒(HUO)": "huo", "中国花莲(HUN)": "hun", "红原(AHJ)": "ahj", "九江(JIU)": "jiu", "九寨沟(JZH)": "jzh", "济南(TNA)": "tna", "鸡西(JXA)": "jxa", "景德镇(JDZ)": "jdz", "井冈山(JGS)": "jgs", "佳木斯(JMU)": "jmu", "济宁(JNG)": "jng", "嘉峪关(JGN)": "jgn", "锦州(JNZ)": "jnz", "荆州(SHS)": "shs", "揭阳(SWA)": "swa", "加格达奇(JGD)": "jgd", "金昌(JIC)": "jic", "建三江(JSJ)": "jsj", "中国嘉义(CYI)": "cyi", "中国金门(KNH)": "knh", "泉州(晋江)(JJN)": "jjn", "喀什(KHG)": "khg", "克拉玛依(KRY)": "kry", "库车(KCA)": "kca", "库尔勒(KRL)": "krl", "凯里(KJH)": "kjh", "康定(KGT)": "kgt", "丽江(LJG)": "ljg", "拉萨(LXA)": "lxa", "兰州(LHW)": "lhw", "林芝(LZY)": "lzy", "临汾(LFQ)": "lfq", "丽水(LIJ)": "lij", "龙岩(LCX)": "lcx", "洛阳(LYA)": "lya", "连云港(LYG)": "lyg", "柳州(LZH)": "lzh", "泸州(LZO)": "lzo", "临沂(LYI)": "lyi", "六盘水(LPF)": "lpf", "临沧(LNJ)": "lnj", "荔波(LLB)": "llb", "阆中(LZG)": "lzg", "黎平(HZH)": "hzh", "澜沧(JMJ)": "jmj", "吕梁(LLV)": "llv", "陇南(LNL)": "lnl", "龙岩(连城)(LCX)": "lcx", "牡丹江(MDG)": "mdg", "漠河(OHE)": "ohe", "绵阳(MIG)": "mig", "满洲里(NZH)": "nzh", "茅台(WMT)": "wmt", "梅州(MXZ)": "mxz", "芒市(LUM)": "lum", "中国马公(MZG)": "mzg", "中国马祖(MFK)": "mfk", "南通(NTG)": "ntg", "宁波(NGB)": "ngb", "南昌(KHN)": "khn", "南充(NAO)": "nao", "南宁(NNG)": "nng", "南阳(NNY)": "nny", "宁蒗(NLH)": "nlh", "中国南竿(LZN)": "lzn", "攀枝花(PZI)": "pzi", "普洱(SYM)": "sym", "普兰(APJ)": "apj", "琼海(BAR)": "bar", "秦皇岛(BPE)": "bpe", "齐齐哈尔(NDG)": "ndg", "且末(IQM)": "iqm", "庆阳(IQN)": "iqn", "泉州(JJN)": "jjn", "衢州(JUZ)": "juz", "祁连(HBQ)": "hbq", "奇台(JBK)": "jbk", "黔江(JIQ)": "jiq", "日喀则(RKZ)": "rkz", "日照(RIZ)": "riz", "若羌(RQA)": "rqa", "上饶(SQD)": "sqd", "绥芬河(HSF)": "hsf", "韶关(HSC)": "hsc", "石河子(SHF)": "shf", "石家庄(SJW)": "sjw", "三明(SQJ)": "sqj", "山南(LGZ)": "lgz", "十堰(WDS)": "wds", "神农架(HPG)": "hpg", "邵阳(WGN)": "wgn", "松原(YSQ)": "ysq", "朔州(SZH)": "szh", "三沙(XYI)": "xyi", "莎车(QSZ)": "qsz", "泉州(石狮)(JJN)": "jjn", "揭阳(汕头)(SWA)": "swa", "天津(TSN)": "tsn", "太原(TYN)": "tyn", "塔城(TCG)": "tcg", "通化(TNH)": "tnh", "通辽(TGO)": "tgo", "天水(THQ)": "thq", "唐山(TVS)": "tvs", "台州(HYN)": "hyn", "中国台北(TPE)": "tpe", "铜仁(TEN)": "ten", "腾冲(TCZ)": "tcz", "中国台南(TNN)": "tnn", "中国台东(TTT)": "ttt", "中国台中(RMQ)": "rmq", "塔什库尔干(HQL)": "hql", "吐鲁番(TLQ)": "tlq", "图木舒克(TWC)": "twc", "扬州(泰州)(YTY)": "yty", "无锡(WUX)": "wux", "武夷山(WUS)": "wus", "五大连池(DTU)": "dtu", "潍坊(WEF)": "wef", "武汉(WUH)": "wuh", "芜湖(WHU)": "whu", "威海(WEH)": "weh", "乌兰浩特(HLH)": "hlh", "万州(WXN)": "wxn", "温州(WNZ)": "wnz", "梧州(WUZ)": "wuz", "乌海(WUA)": "wua", "文山(WNH)": "wnh", "乌拉特中旗(WZQ)": "wzq", "武隆(CQW)": "cqw", "巫山(WSK)": "wsk", "乌兰察布(UCB)": "ucb", "西双版纳(JHG)": "jhg", "中国香港(HKG)": "hkg", "西宁(XNN)": "xnn", "西昌(XIC)": "xic", "襄阳(XFN)": "xfn", "夏河(GXH)": "gxh", "锡林浩特(XIL)": "xil", "信阳(XAI)": "xai", "徐州(XUZ)": "xuz", "忻州(WUT)": "wut", "邢台(XNT)": "xnt", "兴义(ACX)": "acx", "新源(NLT)": "nlt", "湘西土家族苗族自治州(DXJ)": "dxj", "西安(咸阳)(SIA)": "sia", "迪庆(香格里拉)(DIG)": "dig", "扬州(YTY)": "yty", "银川(INC)": "inc", "延安(ENY)": "eny", "运城(YCU)": "ycu", "宜宾(YBP)": "ybp", "宜昌(YIH)": "yih", "伊春(LDS)": "lds", "宜春(YIC)": "yic", "延吉(YNJ)": "ynj", "榆林(UYN)": "uyn", "伊宁(YIN)": "yin", "烟台(YNT)": "ynt", "义乌(YIW)": "yiw", "岳阳(YYA)": "yya", "永州(LLF)": "llf", "玉林(YLX)": "ylx", "盐城(YNZ)": "ynz", "营口(YKH)": "ykh", "于田(YTW)": "ytw", "玉树(YUS)": "yus", "舟山(HSN)": "hsn", "张家界(DYG)": "dyg", "珠海(ZUH)": "zuh", "湛江(ZHA)": "zha", "张家口(ZQZ)": "zqz", "昭通(ZAT)": "zat", "中卫(ZHY)": "zhy", "遵义(ZYI)": "zyi", "郑州(CGO)": "cgo", "张掖(YZY)": "yzy", "扎兰屯(NZL)": "nzl", "昭苏(ZFL)": "zfl", "怀化(芷江)(HJJ)": "hjj" } # 反向映射字典:机场代码(小写) -> 完整城市名 AIRPORT_TO_CITY = {v: k for k, v in CITIES_DICT.items()} # 城市名到机场代码映射(不包含括号) CITY_NAME_TO_CODE = { key.split('(')[0]: value for key, value in CITIES_DICT.items() } def get_airport_code(city_input): """ 根据输入获取机场代码(小写) 支持多种输入格式: - 完整格式:上海(SHA) - 城市名:上海 - 机场代码:SHA、sha """ city_input = city_input.strip() # 直接匹配完整格式 if city_input in CITIES_DICT: return CITIES_DICT[city_input] # 匹配城市名 if city_input in CITY_NAME_TO_CODE: return CITY_NAME_TO_CODE[city_input] # 匹配机场代码(转换为小写) code_lower = city_input.lower() if code_lower in AIRPORT_TO_CITY: return code_lower return None def get_city_name(city_input): """ 根据输入获取完整城市名 """ city_input = city_input.strip() # 直接匹配完整格式 if city_input in CITIES_DICT: return city_input # 匹配城市名 if city_input in CITY_NAME_TO_CODE: for full_name in CITIES_DICT.keys(): if full_name.startswith(city_input + '('): return full_name # 匹配机场代码 code_lower = city_input.lower() if code_lower in AIRPORT_TO_CITY: return AIRPORT_TO_CITY[code_lower] return None if __name__ == "__main__": # 测试示例 test_inputs = ["上海(SHA)", "上海", "SHA", "sha", "北京", "BJS"] print("测试城市字典功能:") for test_input in test_inputs: airport_code = get_airport_code(test_input) city_name = get_city_name(test_input) print(f"输入: {test_input} -> 机场代码: {airport_code}, 城市全名: {city_name}") print(f"\n总共支持 {len(CITIES_DICT)} 个城市")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiaonieli7/FlightTicketMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server