Zero-dependency HTTP API for dianping.com (大众点评). No browser engine, no pip install — only curl (pre-installed on macOS/Linux).
curl (系统自带,无需安装)Only dper and dplet cookies are required. Stored in ~/.dianping/cookies.json.
bash
# Set cookies
python3 dianping-api/scripts/dianping_login.py --set-cookies "dper=xxx; dplet=yyy"
# Check login status
python3 dianping-api/scripts/dianping_login.py --status
# Cookie expired? Guided renewal:
python3 dianping-api/scripts/dianping_login.py --renew
dianping_api.py#All commands output JSON to stdout, ready for AI parsing.
bash
python3 dianping-api/scripts/dianping_api.py search <keyword> [--city_id N]
keyword: 大众点评搜索框,支持自由组合。示例:
"川菜", "日料", "淮扬菜", "火锅", "西餐""外滩 日料", "陆家嘴 火锅", "世纪大道 淮扬菜""迪士尼 亲子餐厅", "故宫 烤鸭", "西湖 本帮菜""有包厢", "宝宝餐", "人均100", "深夜食堂""陆家嘴 亲子 好评", "南京路 网红甜品"city_id: 城市编号(见下方城市表),默认 1=上海
Response:
json
{
"keyword": "世纪大道淮扬菜",
"city_id": 1,
"count": 11,
"shops": [
{
"shop_id": "l7UgWvw6yZ7ytaly",
"name": "九厨·淮扬(陆家嘴紫金山店)",
"rating": 4.5,
"review_count": "455",
"avg_price": 155
}
]
}
bash
python3 dianping-api/scripts/dianping_api.py shop <shop_id>
Response:
json
{
"shop_id": "l7UgWvw6yZ7ytaly",
"name": "九厨·淮扬(陆家嘴紫金山店)",
"score_text": "口味:4.7 环境:4.8 服务:4.7",
"avg_price": "155",
"review_count": "455条",
"category": "淮扬菜",
"region": "世纪大道",
"address": "东方路778号金陵紫金山大酒店2楼",
"route": "距地铁世纪大道站12口步行400m",
"phone": "65******",
"recommended_dishes": ["九厨桂花香酥烤鸭", "淮安特色一品狮子头", "..."],
"scores": {"taste": 4.7, "environment": 4.8, "service": 4.7}
}
bash
python3 dianping-api/scripts/dianping_api.py deals <shop_id>
Response:
json
{
"shop_id": "l7UgWvw6yZ7ytaly",
"name": "九厨·淮扬(陆家嘴紫金山店)",
"deals": [
{"title": "【午市专享】100元代金券", "price": 79.0, "original_price": 100.0},
{"title": "九厨淮扬精选宝宝餐", "price": 0.1, "original_price": 29.9},
{"title": "招牌烤鸭+醉沼虾+牛肉粒2-3人餐", "price": 279.0, "original_price": 500.0}
],
"services": [],
"tags": []
}
python
import sys; sys.path.insert(0, "dianping-api/scripts")
from dianping_api import api_search, api_shop, api_deals
# Search
results = api_search("陆家嘴火锅", city_id=1)
for s in results["shops"]:
print(s["shop_id"], s["name"], s.get("rating"))
# Shop detail
info = api_shop("l7UgWvw6yZ7ytaly")
print(info["scores"], info["recommended_dishes"])
# Deals
deals = api_deals("l7UgWvw6yZ7ytaly")
for d in deals["deals"]:
print(d["title"], d.get("price"), d.get("original_price"))
text
1. 根据用户意图组合 keyword(地点+菜系+场景),选对 city_id
例: 用户说"北京故宫附近吃烤鸭" → search("故宫 烤鸭", city_id=2)
例: 用户说"上海迪士尼带娃吃饭" → search("迪士尼 亲子餐厅", city_id=1)
例: 用户说"杭州西湖附近日料" → search("西湖 日料", city_id=5)
2. api_search(keyword, city_id) → 拿到 shop_id 列表
3. api_shop(shop_id) → 评分、推荐菜、地址、交通
4. api_deals(shop_id) → 优惠券、套餐、价格
5. 整理推荐给用户(含评分、人均、推荐菜、优惠信息)
城市ID城市ID城市ID城市ID上海1北京2大连3广州4杭州5苏州6深圳7成都8南京9天津10沈阳11武汉12哈尔滨13长沙14厦门15郑州16西安17青岛18重庆19昆明20
All errors return {"error": "..."}. Common:
"请求失败或需要重新登录" → Run dianping_login.py --renewcurl subprocess (no Playwright/browser, no pip dependencies)dper + dplet cookies in ~/.dianping/cookies.jsondianping_login.py (auth管理) + dianping_api.py (数据API)