开放 API
只读接口,聚合饿了么与美团的活动数据。统一 POST、统一 JSON,无需登录。
1接口地址
https://wm.huizhetao.com/openapi/
请求体支持 application/json、application/x-www-form-urlencoded
和 multipart/form-data 三种格式,字段名一致。
用浏览器直接打开接口地址会返回一段 JSON 提示(GET 不被接受)。
最快的一条命令
curl -X POST 'https://wm.huizhetao.com/openapi/' \
-H 'Content-Type: application/json' \
-d '{"action":"list","platform":"meituan","per":5}'
2请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | string | 否 | list(默认)返回活动列表;detail 返回单个活动;
stats 返回统计与枚举 |
platform | string | 否 | all(默认)/ eleme / meituan。
action=detail 时必填(两个平台的 ID 是各自发的,会撞号) |
id | int | 否 | 活动 ID。action=detail 时必填,取自列表返回的 id |
page | int | 否 | 页码,默认 1,最大 200 |
per | int | 否 | 每页条数,默认 20,最大 50 |
kw | string | 否 | 关键词,同时匹配标题与优惠描述,最长 30 字 |
biz | string | 否 | 美团业务线:shangou 闪购便利 · waimai 外卖 · yaodian 买药健康 · daodian 到店玩乐 · chuxing 出行住宿 · fuwu 生活服务 · other 综合(枚举以 stats 接口返回的 biz 为准) |
type | string | 否 | 饿了么活动类型,取值见接口返回的 type 字段 |
status | int | 否 | 0 即将开始 / 1 进行中 / 2 已结束;
留空表示不限(默认包含全部在架活动) |
sort | string | 否 | new(默认,最新)/ start 即将开始 / end 即将结束 |
appkey | string | 否 | 站点开启鉴权后必填;也可以放在请求头 X-Api-Key 里 |
只返回在架活动,已下架/已删除的一律不出现,不需要额外过滤。
3返回结构
所有接口共用同一层外壳:
| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 0 表示成功,非 0 见「错误码」 |
msg | string | 结果描述,失败时是原因 |
data | object / null | 业务数据,失败时为 null |
list 的 data
| 字段 | 类型 | 说明 |
|---|---|---|
platform | string | 本次查询的平台 |
total | int | 符合条件的总条数 |
page / per / pages | int | 当前页 / 每页条数 / 总页数 |
count | int | 本次实际返回条数 |
breakdown | object | 仅 platform=all 时出现,两个平台各多少条 |
list | array | 活动数组 |
list 元素 · 美团(platform=meituan)
| 字段 | 类型 | 说明 |
|---|---|---|
platform | string | 固定 meituan |
id | int | 活动 ID,拿去调 action=detail |
title | string | 活动名(已去掉「【美团闪购】-」这类前缀) |
title_raw | string | 原始活动名,含前缀 |
descr | string | 优惠描述,可直接当卖点文案 |
biz / biz_name | string | 业务线代码与中文名 |
group | string | 活动分组:红包活动 / 限时活动 |
image | string | 物料图(687×220 横幅,已统一为 https) |
start_date / end_date | string | 起止日期 Y-m-d |
status / status_text | int / string | 0 未开始 / 1 进行中 / 2 已结束 |
h5_url | string | 网页版落地页;少数活动为空 |
deeplink | string | App 唤起链接(imeituan://) |
detail_url | string | 本站详情页地址(含领取引导) |
微信内或唤端被系统拦截时:deeplink 里 inner_url
参数解码后就是该活动的 click.meituan.com 官方落地页,任何浏览器都能打开,
可以拿它做兜底(本站详情页就是这么处理的)。
list 元素 · 饿了么(platform=eleme)
| 字段 | 类型 | 说明 |
|---|---|---|
platform | string | 固定 eleme |
id | int | 活动 ID |
title / descr | string | 活动名 / 优惠描述 |
type / type_name | string | 活动类型代码与中文名 |
image | string | 物料图 |
start_date / end_date | string | 起止日期 Y-m-d |
status / status_text | int / string | 0 未开始 / 1 进行中 / 2 已结束 |
commission_rate | string | 佣金比例 |
links | object | 推广物料,按需取用(见下) |
detail_url | string | 本站详情页地址 |
links 里可能出现的键(没生成的不会出现,取值前判空):
ele_word 淘宝闪购口令 ·
ele_deeplink 闪购唤起链接 ·
ele_h5url 闪购网页版 ·
tb_watchword 淘宝口令 ·
tb_h5url 淘宝网页版 ·
ali_watchword 支付宝口令 ·
ali_h5url 支付宝网页版 ·
wx_shortlink 微信短链
4返回示例
以下内容是写本文档时当场请求真实接口得到的,不是手写的示意数据
(… 处省略了同类条目)。
活动列表 · action=list&platform=meituan&per=2
{
"code": 503,
"msg": "接口已关闭",
"data": null
}
统计与枚举 · action=stats
{
"code": 503,
"msg": "接口已关闭",
"data": null
}
失败返回
{
"code": 503,
"msg": "接口已关闭",
"data": null
}
5错误码
| code | HTTP | 含义与处理 |
|---|---|---|
0 | 200 | 成功 |
400 | 400 | 参数不合法,看 msg 修正后重试(例如 platform 拼错、detail 没传 id) |
401 | 401 | appkey 缺失或错误 |
404 | 404 | 活动不存在或已下架 |
405 | 405 | 用了 GET,改用 POST |
429 | 429 | 触发限流(每个 IP 每分钟 60 次),稍后再试 |
500 | 500 | 服务端异常,可重试;持续失败请联系站长 |
503 | 503 | 接口已临时关闭 |
6在线测试
直接在下面点「发送请求」,会用当前浏览器真实调用一次接口并显示原始返回 (等同于从你自己的服务器发起)。
7调用示例
cURL
curl -X POST 'https://wm.huizhetao.com/openapi/' \
-H 'Content-Type: application/json' \
-d '{
"action": "list",
"platform": "meituan",
"biz": "waimai",
"per": 20
}'
PHP
$ch = curl_init('https://wm.huizhetao.com/openapi/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'action' => 'list',
'platform' => 'meituan',
'per' => 20,
]),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($res['code'] ?? -1) === 0) {
foreach ($res['data']['list'] as $item) {
echo $item['title'], ' → ', $item['h5_url'], PHP_EOL;
}
}
JavaScript / 小程序
const res = await fetch('https://wm.huizhetao.com/openapi/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ action: 'list', platform: 'meituan', per: 20 }),
});
const json = await res.json();
if (json.code === 0) {
console.log(json.data.list);
}
Python
import requests
resp = requests.post('https://wm.huizhetao.com/openapi/', json={
'action': 'list',
'platform': 'meituan',
'per': 20,
}, timeout=15)
data = resp.json()
if data['code'] == 0:
for item in data['data']['list']:
print(item['title'], item['h5_url'])
8使用约定
- 接口只读,不需要登录,也不会因为调用产生任何数据变更。
- 每个 IP 每分钟最多 60 次请求,请加本地缓存(活动数据每天更新几次, 建议缓存 5~10 分钟或更长)。
- 活动数据有版权与联盟归属,转发推广链接时请勿修改链接参数, 否则归属会失效。
- 返回的活动都在有效期内,但仍建议自行判断
end_date后再展示。 - 接口随时可能增加新字段,解析时请忽略未知字段,不要写死字段清单。
对接中遇到问题,把完整的请求参数和返回 code / msg 发给站长即可定位。