前言
人在上海,居家一个月,感谢政府和公司时不时的“空投”,主食是不缺的,但是菜真的不够吃,于是这几天也开始加入了叮咚抢菜的大军,然而几天了一次都抢不到;
昨晚上无意中打开叮咚买菜,发现竟然有个时间段可以派送,抓紧买了一袋馄炖皮(别的几乎都卖完了),这个事情提醒了我,叮咚买菜的可派送时间段(运力)是动态变化的,那么我只要写一段程序,监听其变化,在有空余的派送资源时候提醒下我,然后在手动去下单,理论上应该可以买到菜;
今早上 6 点 再一次抢菜失败后,我忍不住了,爬起来开始实践这个半自动外挂的想法。
获取叮咚买菜的 api
我只需要获取可派送时间段这一个 api 就好了,我是 iphone 手机,所以需要找一个合适的抓包工具,我使用 stream 来替代 pc上的fiddle, 有几个注意点:
1、默认安装后是无法抓取 https 类型的,需要在设置里进行相关配置:
如果您要抓取 HTTPS 的请求,需要先启动抓包,然后安装 CA 证书后,去设置-通用-关于-证书信任设置 里信任 CA,才可以查看请求的内容。
2、叮咚买菜 App 里面是无法抓取 maicai.api.ddxq.mobi 此域名下的接口的,需要抓包小程序的版本。
然后我顺利的拿到了此接口,url: 'https://maicai.api.ddxq.mobi/order/getMultiReserveTime'
, stream 提供了 curl 的拷贝,将其导入到 postman 中,验证了是可正常返回结果的,然后将curl 的格式进行转换为 node request 的版本。
搭建 node 项目
新建一个git 仓库,将我们的代码放进去,通过node 环境执行一下,然后会发现控制台的console 是乱码的,这个问题经过排查是由于一个 header 配置 Accept-Encoding: 'gzip, deflate, br'
导致的,gzip压缩会导致乱码,我将其删掉,再次验证结果就正常了。
然后写一个轮询函数,定时来查询此接口,然后对响应数据进行解析,当发现可派送时间段有空余的时候,提示到我,消息提示我用的 Bark 这个ios 系统下的开源工具。
消息推送
使用 Bark 来实现消息推送到我的 iphone 手机,Bark是一个开发者的专属推送工具,免费、稳定,在 appleStore 中下载 bark 应用后,打开将生成专属 BarkId,如图,复制链接,通过 get post 等形式都可以触发消息推送事件。
成果展示
总结
希望能通过这个小程序能早点买到菜吧,我真的太难了。
--更新4th:增加支持 美团买菜运力监控。
--更新3th:为避免风险,暂不做下单了,有兴趣的,自行获取代码研究吧。
--更新2th:自动下单 Api 正在测试中,请关注。
--更新1th: 程序执行2小时后,第一次抢到菜。