# -*- coding: utf-8 -*- """美团城市字典(地级市)读取。 数据源:app/integrations/data/meituan_cities.json,由 tools/gen_meituan_cities.py 从 美团官方「城市字典」Excel 生成(359 个地级市:city_id / 城市名 / 省份)。 实测一个地级市 cityId 已覆盖其下辖县级市供给(徐州 → 邳州 / 新沂 / 睢宁 …),故无区县层级。 - ETL(scripts/pull_meituan_coupons.py)遍历 all_cities() 全量抓取入库。 - 读取侧将来「按城市过滤」时,也从这里取 city_id ↔ 城市名映射。 """ from __future__ import annotations import functools import json from pathlib import Path _JSON = Path(__file__).resolve().parent / "data" / "meituan_cities.json" @functools.lru_cache(maxsize=1) def all_cities() -> list[dict]: """全部城市 [{city_id, name, province}, ...](359 个地级市)。""" return json.loads(_JSON.read_text(encoding="utf-8")) @functools.lru_cache(maxsize=1) def _by_id() -> dict[str, dict]: return {c["city_id"]: c for c in all_cities()} def city_name(city_id: str) -> str | None: """city_id → 城市名(查不到返回 None)。""" c = _by_id().get(city_id) return c["name"] if c else None