关于上海封城期间如何在叮咚买菜捡漏抢菜的方法
背景
众所周知,上海前些天买菜十分紧张。我所在的地方仅存的供应商也只剩叮咚买菜了,但是只有每天早上6点和8点半会释放出运力,由于早上起不来,只能白天看着库存刷是否有运力释放,但是耗时耗力。于是在清明放假时,想着封在家里也没啥事,就研究了一下怎么买菜。
环境
Python、Charles(需要能够抓到https)。
思路
要在有库存的时候能够自动下单并且向我的手机发送推送,以免超时未支付。
第一步-抓包
要想知道是否有运力,和自动下单,则必须要能够拿到查询运力的接口和下单的接口。
一般通过抓包的方式能够获取到接口。于是,我先尝试用叮咚买菜app抓包,不出所料,是抓不到的。这时候,只能看看其他渠道了,得知叮咚买菜还有小程序端,于是尝试用小程序抓包,结果自然是可以抓到包,这两个接口就分别是查询配送站点运力和下单的接口。注意,下单时我们需要选取送达时间,之后我们如果查询到了某个时间段有运力的话,需要将下单接口的送达时间参数改成查询到有运力的时间段,这样比较麻烦。恰好,叮咚推出了“自动尝试可用时间”下单功能
。要想以这种方式下单,我们先用Charles的Map Local功能把getMultiReserve的接口的
字段改成true,这样时间就会展示成上面那张图。接口我们可以点击下单按钮,拿到下单接口的数据。
第二步-逻辑写进代码
这里分享一个十分好用的网站 https://curlconverter.com/,这个网站可以把cURL直接转成各种语言的代码块。
代码逻辑也十分简单,就是不停的用requests提供的方法调用getMultiReserve接口,看是否有运力,一旦有运力,立即调用addNewOrder接口去下单。
在下单后,需要让我们知道,这里的处理方法是使用iOS设备,下载一个叫“bark”的app(十分推荐),注册设备后,会提供url,直接用get方法调用就能够向设备发送推送,可以在url中定义推送的内容和声音。
import time
import requests
proxy = '106.14.255.124:80'
proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy
} # 这里可以添加个代理(池),防止ip被封
cookies = {}
headers = {}
data_order = ''
data_time = ''
while 1:
response_time = requests.post('https://maicai.api.ddxq.mobi/order/getMultiReserveTime', headers=headers,
cookies=cookies,
data=data_time).text
print(response_time)
if "当前运力紧张" not in response_time and "自动尝试可用时段" not in response_time:
response_order = requests.post('https://maicai.api.ddxq.mobi/order/addNewOrder', headers=headers,
cookies=cookies,
data=data_order).text
requests.get('https://api.day.app//检测到有运力,赶快下单?sound=minuet') # 向手机推送
print(time.strftime('%H:%M:%S', time.localtime()) + '检测有运力,已尝试下单')
print(response_order)
else:
print(time.strftime('%H:%M:%S', time.localtime()) + '检测没有运力')
time.sleep(3)
其他
自动下单成功的前提是购物车内的商品信息没有发生改变,譬如库存、价格等。如果发生了变更,需要及时修改脚本里的请求data。要是嫌麻烦的话,可以只轮询getMultiReserve接口,当有运力时再手动下单即可(一般运力释放都会持续一会儿,收到推送立马去下单,成功率还是很高的)。下单成功后需要及时付款。
todo
以上代码在调了下单接口后,还是会重复运行的,使用过程中出现了重复锁单的情况。因为没对下单接口的返回进行分析,后期可以优化一下,如果下单成功或下单失败,发送相应的通知,并终止程序运行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端