又造了个轮子,监控实体店库存,实现自动下单 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oreainters
V2EX    Apple

又造了个轮子,监控实体店库存,实现自动下单

  •  
  •   oreainters 2023-09-21 11:18:09 +08:00 5352 次点击
    这是一个创建于 751 天前的主题,其中的信息可能已经有所发展或是发生改变。

    监控库存的脚本已经比较多了,实现起来也比较简单,几行代码就完成了,只是好像没有用起来特别方便的。

    支持了一下 docker ,这样可以直接方便跑在服务器上。

    自动下单没找到现有的,索性花了点时间实现了,但是这两天 15 的实体店库存都刷不出来,也不知道能不能一次成功,等测成功了再提上去吧。

    Github 地址:ToolGallery

    推送支持了 bark, 钉钉通知。

    懒人示例:

    docker run --rm toolgallery/ape-store-assistant:main -p MTQ43CH/A -l '广东 深圳 罗湖区' -c cn # 产品型号可以通过 -lp --code 15-pro -c cn 获取 

    比较菜,轻喷。

    第 1 条附言    2023-09-22 16:38:06 +08:00
    已推,带上 -o 参数可自动下单,--code 参数也需要,以及以下环境变量

    DELIVERY_FIRST_NAME
    DELIVERY_LAST_NAME
    DELIVERY_EMAIL
    DELIVERY_PHONE
    DELIVERY_IDCARD // 后 4 位
    DELIVERY_PAYMENT // -lpa 查看 如: installments0001243254
    DELIVERY_PAYMENT_NUMBER // int 分期期数 普通支付为 0
    58 条回复    2023-10-17 17:01:08 +08:00
    mylighting
        1
    mylighting  
       2023-09-21 11:26:03 +08:00
    谢谢,我要试试,首发没抢到啊啊啊啊
    cairnechen
        2
    cairnechen  
       2023-09-21 11:47:11 +08:00
    俺用的站内另一位同学做的,只是提醒不能自动下单,等楼主做好了我试试,官网预计发货时间 10 月 24 号以后确实等不了
    tallest
        3
    tallest  
       2023-09-21 12:12:58 +08:00
    啊~
    我魔改的一个 Java 的,好像也是站内另一个同学的,我给它加了个微信消息提醒
    ![20230921121136.png]( https://s2.loli.net/2023/09/21/Gg2zj6cBYpyrxPZ.png)
    cairnechen
        4
    cairnechen  
       2023-09-21 13:38:20 +08:00
    @tallest 求教怎么加微信提醒啊
    TAFMT
        5
    TAFMT  
       2023-09-21 13:45:55 +08:00
    感谢,我前几天用那个库存提醒的 + 手动抢。费好大劲也没抢到。。
    infante
        6
    infante  
       2023-09-21 13:58:24 +08:00
    感谢, 真的很需要
    Soulkim
        7
    Soulkim  
       2023-09-21 14:36:55 +08:00
    请问 location 是怎么获取的?
    gps949
        8
    gps949  
       2023-09-21 14:40:45 +08:00
    OP 可以拿别的有库存的旧型号产品做一下自动下单实验。感觉这个还是很必要的
    Soulkim
        9
    Soulkim  
       2023-09-21 15:08:04 +08:00
    @Soulkim #7 搞定了,是型号填错
    oreainters
        10
    oreainters  
    OP
       2023-09-21 15:11:35 +08:00
    oreainters
        11
    oreainters  
    OP
       2023-09-21 15:13:13 +08:00
    @gps949 其他型号测试成功了的,就是不知道在新款上效果如何
    gps949
        12
    gps949  
       2023-09-21 15:16:29 +08:00
    @oreainters 那应该问题不大,毕竟提交订单模式都是一致的。OP 把这个加上呗,大不了可以跑俩容器,一个只监测的,一个开自动下单的
    oreainters
        13
    oreainters  
    OP
       2023-09-21 15:27:48 +08:00
    @gps949 我都是固定参数测试的,等我改改推上去
    Soulkim
        14
    Soulkim  
       2023-09-21 15:50:37 +08:00
    @oreainters #10 感谢,通知搞定了,期待能自动下单
    565656
        15
    565656  
       2023-09-21 15:52:15 +08:00
    是不是因为这个玩意 很多实体店直接关了取货通道了
    fighte97
        16
    fighte97  
       2023-09-21 16:01:17 +08:00
    @565656 江浙沪取货直接被关了
    Felixxyq
        17
    Felixxyq  
       2023-09-21 16:11:29 +08:00
    @565656 临近发售这俩天每年都是关闭的
    Cruzz
        18
    Cruzz  
       2023-09-21 16:12:42 +08:00
    去年抢 14pm 自己实现了一个,提醒再去刷就没有了,还是自动下单靠谱。
    Canm
        19
    Canm  
       2023-09-21 16:18:06 +08:00 via iPhone
    哈哈,厉害了厉害
    WenJimmy
        20
    WenJimmy  
       2023-09-21 16:30:48 +08:00
    等个自动下单
    Fange
        21
    Fange  
    &nsp;  2023-09-22 02:10:56 +08:00
    有点好奇 不需要填写个人信息和付款方式吗?
    oreainters
        22
    oreainters  
    OP
       2023-09-22 16:34:00 +08:00
    @Fange 需要基本信息
    calpes
        23
    calpes  
       2023-09-22 16:58:36 +08:00
    @oreainters 我注意到似乎没有填写到店时间?
    Soulkim
        24
    Soulkim  
       2023-09-22 16:59:42 +08:00
    @oreainters #22 大佬能给个自动下单的示例吗,刚上手不太明白,还有个问题就是不用登录 appleid 的吗?
    Heroininu
        25
    Heroininu  
       2023-09-22 17:20:07 +08:00
    @calpes 自动取第一个到店时间得
    calpes
        26
    calpes  
       2023-09-22 17:23:07 +08:00
    @oreainters 设置为 5s 后边都会失败,apple store 的服务器不太行吗
    zjunjun
        27
    zjunjun  
       2023-09-22 17:51:38 +08:00
    用脚本买到一个 256 黑,后天下午可取。楼主厉害
    oreainters
        28
    oreainters  
    OP
       2023-09-22 18:08:45 +08:00
    @zjunjun 厉害厉害,实话讲,我到现在也没买到,放的太少了。
        29
    oreainters  
    OP
       2023-09-22 18:14:25 +08:00
    @Soulkim 不用,这个是用游客进行下单,下单成功后在邮件里进行支付,示例我看看补充在 readme 里
    rzjsbbbb
        30
    rzjsbbbb  
       2023-09-22 23:45:51 +08:00
    可不可以加一个白名单或者限制距离的功能啊,苏州甚至查长沙的库存。。。
    oreainters
        31
    oreainters  
    OP
       2023-09-23 15:36:54 +08:00
    @rzjsbbbb 已加
    cairnechen
        32
    cairnechen  
       2023-09-23 17:51:48 +08:00
    @oreainters

    大佬,问一下不用 docker 怎么运行
    Hades300
        33
    Hades300  
       2023-09-23 21:49:01 +08:00
    感谢楼主,已经挂着跑了一整个下午了,发现不少这种报错,每次都在 start_checkout: Starting checkout... 之后,代码我改过一些行数不一定准。。 准备开个 debug level 调调看,楼主遇到过吗
    File "/Users/XXX/PycharmProjects/APEStoreAssistant/src/actions/order.py", line 148, in start_checkout
    signin_url = resp_json["head"]["data"]["url"]
    KeyError: 'data'
    Hades300
        34
    Hades300  
       2023-09-24 08:44:41 +08:00
    InventoryMonitor 持有的 Order 一直复用一个 session ,会不会存在前面下单失败,购物车里积攒了很多个商品的问题
    Hades300
        35
    Hades300  
       2023-09-24 10:11:52 +08:00
    感谢楼主贡献的代码和思路,对我而言感觉是个很规范的 python 项目,学到了蛮多。
    发现一个问题和一些优化点
    1. 我在页面上购买杭州的 14Plus 测试,无法在付款前拿到 timewindow 的,这个不是下单的必要条件。
    2. 填充付款方式和联系人信息是可以并行的(杭州货好难抢,每次补货只持续 2-10s )
    3. monitor 模块和 order 模块目前串行耦合,一个 available 的机会是可以开多个 order 并行 race 一下的(相当于模拟多位 guest 同时下单)
    4. 激进一些,甚至可以初始化时拿好 store 信息,不 check 库存直接下单(这个有些脑补,需要测出无库存时的表现)
    关于第一点,可能是不同地区的下单逻辑稍有不同,比如上海就能通过楼主给的流程下单,但对其他地区是致命的因为必失败。
    除此之外,刚刚验证了,上面 order 复用问题确实是个缺陷,购物车会越攒越多(程序一直挂着跑,抢 15PM 的话首次失败后后续失败也几乎是必然的)。
    感觉是个潘多拉魔盒,想给楼主提 PR 但是又有点不敢提了,不过该说的都说了,,我相信一定有闭源的现存下单工具。。但真的很纠结。。。 @oreainters
    oreainters
        36
    oreainters  
    OP
       2023-09-24 12:30:48 +08:00
    @Hades300 哈哈,可以提 PR ,order 复用的问题已经发现了,后面修改下。

    第一点应该是必要条件,那个是获取取货的时间,很多时候监控到有货,再到拿取货时间的时候已经没了

    2 ,3 ,4 都是速度相关的优化,其实已经写好了一个维护 order 池下单的一个方案,下单可以做到 5-6 秒左右,不太确定要不要放出来。
    Hades300
        37
    Hades300  
       2023-09-24 14:08:47 +08:00
    @oreainters 酷酷!不过取货时间真的是必要的吗,在杭州下单 iPhone14 是不显示可预约取货时间的,得先付款。在抢 15PM 的时候经常发现有机器但是没有可约时间,怀疑也是和 14 一样。
    rzjsbbbb
        38
    rzjsbbbb  
       2023-09-24 14:28:01 +08:00
    @oreainters 我看很多现货产品 14/iPad 之类的都是取货日期待付款完成后确定,要先付款才行
    oreainters
        39
    oreainters  
    OP
       2023-09-24 21:26:48 +08:00   1
    @Hades300
    @rzjsbbbb 不太确定,空了试试
    c5QzzesMys8FudxI
        40
    c5QzzesMys8FudxI  
       2023-09-25 08:23:11 +08:00
    OP 我没看懂这个参数 能举个简单的例子么? 比如我在北京想监控 iPhone15promax 钛原色 256G 请问怎么跑
    thy44h2
        41
    thy44h2  
       2023-09-25 10:40:25 +08:00
    显示下单成功,但是一个小时了还没收到支付的邮件和信息,然后马上下单的取货时间也快过了
    @oreainters 想问一下,有什么办法可以看到下单的状态吗?谢谢
    c5QzzesMys8FudxI
        42
    c5QzzesMys8FudxI  
       2023-09-25 11:37:55 +08:00
    @thy44h2 请问下下单的参数怎么加
    kiraku
        43
    kiraku  
       2023-09-25 12:43:51 +08:00 via iPhone
    @4rat 示例:docker run -e DELIVERY_FIRST_NAME=myname (剩余的环境变量…) --rm toolgallery/ape-store-assistant:main -p MTQ43CH/A -l '广东 深圳 罗湖区' -c cn
    tallest
        44
    tallest  
       2023-09-25 15:28:03 +08:00
    @cairnechen 调 PC 微信 hook 的接口
    ddv12138
        45
    ddv12138  
       2023-09-25 18:21:14 +08:00
    救大命,库存监控跑了两天,就出现两次有货,每次都是几秒钟货就没了,没有脚本根本抢不赢
    kiraku
        46
    kiraku  
       2023-09-25 20:34:57 +08:00
    请问会不定期报这个错误是为啥呀,有无大佬帮忙看看:
    Traceback (most recent call last):
    File "/usr/local/lib/python3.10/site-packages/requests/models.py", line 971, in json
    return complexjson.loads(self.text, **kwargs)
    File "/usr/local/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
    File "/usr/local/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "/usr/local/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
    json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/app/actions/inventory_monitoring.py", line 44, in start
    inventory_data = self.get_data(
    File "/app/actions/inventory_monitoring.py", line 164, in get_data
    return resp.json()
    File "/usr/local/lib/python3.10/site-packages/requests/models.py", line 975, in json
    raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
    requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    rzjsbbbb
        47
    rzjsbbbb  
       2023-09-26 12:26:37 +08:00
    @kiraku 我的也是 翻一下记录甚至能发现有一大半都在爆这个错没几条监控的
    lesswest
        48
    lesswest  
       2023-09-26 12:58:10 +08:00
    @kiraku 同一个错误
    thy44h2
        49
    thy44h2  
       2023-09-26 16:58:50 +08:00
    今天抢到了,来分享一下经验。
    @kiraku 你这个问题,我的感受就是你设置的查询间隔太短了,我设置的 8 秒,基本就没在报这个错误。
    然后前面我提到的问题,下单成功但是没收到邮件和消息,也就是其实下单没有成功。受前面的 v 友的启发 @Hades300 ,在想有没有可能 order 复用的问题导致的,索性删除 image 重新安装,然后就成功下单收到订单号了。
    最后感谢 op @oreainters 的贡献,让我能提前半月拿到新机。
    Hades300
        50
    Hades300  
       2023-09-28 00:41:41 +08:00
    fivesmallq
        51
    fivesmallq  
       2023-09-29 14:46:58 +08:00
    已抢到 15pm 512 黑色,北京,感谢 @Hades300 今天放货贼多,感觉黄牛要砸手里了,可能过几天就都有现货了。
    Hades300
        52
    Hades300  
       2023-09-29 15:35:28 +08:00
    @fivesmallq 手持 15PM 回复,是不是感谢错人了
    fivesmallq
        53
    fivesmallq  
       2023-09-29 18:04:44 +08:00
    @Hades300 @oreainters 都感谢:)
    nZWVjowEHkQN
        54
    nZWVjowEHkQN  
       2023-10-01 11:44:01 +08:00
    @oreainters 麻烦楼主帮忙看下参数正不正确, 伺服器上挂了两个, 其实前几天都抢到了, 最后脚本终止了. 但是手机这边没有收到推送通知, 邮箱里面也没有订购的邮件. 我可以保证的是, 等号后面的参数一定是正确的. 提前感!

    nohup docker run -e DELIVERY_FIRST_NAME=姓 -e DELIVERY_LAST_NAME=名 -e DELIVERY_EMAIL=邮箱 -e DELIVERY_PHOnE=手机 -e DELIVERY_IDCARD=身分证最后四位 -e DELIVERY_PAYMENT=WECHAT -e DELIVERY_PAYMENT_NUMBER=0 -e BARK_TOKRN=bark 唯一 ID --rm toolgallery/ape-store-assistant:main -c cn -p MU2N3CH/A -l "广东 广州 天河区" -o -onc -1 --code 15-pro -i 30 -sft 珠江新城 天环广场 > monitor.log 2>&1 &
    nZWVjowEHkQN
        55
    nZWVjowEHkQN  
       2023-10-01 13:01:19 +08:00
    @thy44h2 可以分享一下指令吗, 谢谢!
    mylighting
        56
    mylighting  
       2023-10-02 07:51:38 +08:00   1
    @nZWVjowEHkQN 你那个指令我感觉没啥问题,除了姓名弄反了
    thy44h2
        57
    thy44h2  
       2023-10-02 15:25:40 +08:00   1
    @nZWVjowEHkQN 看起来没问题,其实你这个和我之前遇到的问题一样,以为成功下单了,其实并没有。成功下单了会收到一条提供临时 icloud 空间的短信,里面有订单号。你没有收到这个消息就表示下单失败。我的经验是删掉 image 重新下载,就能成功下单了
    Neight99
        58
    Neight99  
       2023-10-17 17:01:08 +08:00
    基本没怎么写过 python ,很简陋地支持了一版下单时一并下单 ac+的功能,提了个 pr
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5553 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 70ms UTC 08:50 PVG 16:50 LAX 01:50 JFK 04:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86