• Stars
    star
    160
  • Rank 233,431 (Top 5 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 3 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Monitor robot of Apple Store's products (e.g. iPhone 14), using DingTalk notification.

概述

本项目应用主要用来监测Apple Store线下直营店货源情况,主要使用Python实现。

首先感谢iPhone-Pickup-Monitor项目带来的灵感,同时有些实现也直接使用了该项目的一些代码。

本项目在iPhone-Pickup-Monitor原有功能的基础上去掉了声音通知,但添加了多货源同时监控以及钉钉消息通知功能。

最近更新

  • 增加Telegram bot机器人群发功能,感谢zsm1703【PR #1】
  • 将异常事件的提醒限制在6:00 ~ 23:00期间。
  • 可配置想要排除的直营店。
  • 可配置在程序发生异常时是否发送通知。
  • 增加Bark推送【仅iOS】,感谢zh616110538【PR #2】
  • 修复未选择排除的直营店时出现的异常。

安装

# 拉取代码 
git clone https://github.com/LennonChin/AppleStore-Monitor.git

# 进入目录
cd AppleStore-Monitor

# 安装依赖
pip install -r requirements.txt

使用钉钉群机器人推送通知

【强烈建议配置】如不配置则没有通知功能。

本监控提供了钉钉监控的功能,可以在监控到有货源时将消息发送到钉钉群。如要启用该功能,首先需要创建一个钉钉群,并添加群机器人,详细可参考文档:

自定义机器人接入

机器人配置完毕后,记下相关的Access Token和Secret Key,后面配置时需要用到。

使用Telegram群机器人推送通知

Telegram bot群发功能已添加了,文档暂空。留给有需求的同学自己补充。

使用Bark推送通知

Bark仅针对iOS平台的推送,使用比较简单,下载Bark App,在下面的配置过程中输入携带了Key的URL即可。

开始配置

使用python monitor.py config命令进行配置,可以配置多个监控商品:

$> python monitor.py config
--------------------
[0] Apple Watch
[1] AirPods
[2] iPhone 13
选择要监控的产品:1
--------------------
[0] AirPods
[1] AirPods Max
选择要监控的产品子类:1
--------------------
[0] AirPods Max - 银色
选择要监控的产品型号:0
--------------------
是否添加更多产品[Enter继续添加,非Enter键退出]:
--------------------
[0] Apple Watch
[1] AirPods
[2] iPhone 13
选择要监控的产品:2
--------------------
[0] iPhone 13 Mini
[1] iPhone 13
[2] iPhone 13 Pro
[3] iPhone 13 Pro Max
选择要监控的产品子类:3
--------------------
...
[11] 512GB 远峰蓝色
...
选择要监控的产品型号:11
--------------------
是否添加更多产品[Enter继续添加,非Enter键退出]:n
选择计划预约的地址:
请稍后...1/3
--------------------
[0] 北京
[1] 上海
...
请选择地区序号:1
请稍后...2/3
请稍后...3/3
--------------------
[0] 黄浦区
...
请选择地区序号:0
正在加载网络资源...
--------------------
选择的计划预约的地址是:上海 上海 黄浦区,加载预约地址周围的直营店...
[0] 香港广场,地址:上海市黄浦区淮海中路 282 号
[1] 南京东路,地址:上海市黄浦区南京东路 300 号
[2] 上海环贸 iapm ,地址:上海市徐汇区淮海中路 999 号
[3] 浦东,地址:上海市浦东新区陆家嘴世纪大道 8 号
[4] 环球港,地址:上海市普陀区中山北路 3300 号
[5] 五角场,地址:上海市杨浦区翔殷路 1099 号
[6] 七宝,地址:上海市闵行区漕宝路 3366 号 
[7] 苏州,地址:苏州市苏州工业园区
[8] 无锡恒隆广场,地址:无锡市梁溪区
[9] 天一广场,地址:宁波市海曙区碶闸街 155 号
[10] 杭州万象城,地址:杭州市江干区富春路 701 号
[11] 西湖,地址:杭州市上城区平海路 100 号
排除无需监测的直营店,输入序号[直接回车代表全部监测,多个店的序号以空格分隔]:7 8 9 10 11
已选择的无需监测的直营店:苏州,无锡恒隆广场,天一广场,杭州万象城,西湖
--------------------
输入钉钉机器人Access Token[如不配置直接回车即可]:
输入钉钉机器人Secret Key[如不配置直接回车即可]:
--------------------
输入Telegram机器人Token[如不配置直接回车即可]:
输入Telegram机器人Chat ID[如不配置直接回车即可]:
输入Telegram HTTP代理地址[如不配置直接回车即可]:
--------------------
输入Bark URL[如不配置直接回车即可]:
--------------------
输入扫描间隔时间[以秒为单位,默认为30秒,如不配置直接回车即可]:
--------------------
是否在程序异常时发送通知[Y/n,默认为n]:
--------------------
扫描配置已生成,并已写入到apple_store_monitor_configs.json文件中
请使用 python monitor.py start 命令启动监控

配置完成后,会在当前目录下生成一个apple_store_monitor_configs.json文件:

{
  "selected_products": {
    "MGYJ3CH/A": [
      "AirPods Max",
      "AirPods Max - 银色"
    ],
    "MLHG3CH/A": [
      "iPhone 13 Pro Max",
      "512GB 远峰蓝色"
    ]
  },
  "selected_area": "上海 上海 黄浦区",
  "exclude_stores": [
    "R688",
    "R574",
    "R531",
    "R532",
    "R471"
  ],
  "notification_configs": {
    "dingtalk": {
      "access_token": "",
      "secret_key": ""
    },
    "telegram": {
      "chat_id": "",
      "bot_token": "",
      "http_proxy": ""
    },
    "bark": {
      "url": "",
      "query_parameters": {
        "url": null,
        "isArchive": null,
        "group": null,
        "icon": null,
        "automaticallyCopy": null,
        "copy": null
      }
    }
  },
  "scan_interval": 30,
  "alert_exception": false
}

如果你明白每项的意思,也可以手动填写该JSON文件,不过一定要按照上面例子中的层级,尤其是selected_products部分。

另外欢迎各位补充本项目的products.json文件,添加更多产品信息。

启动监控

接下来只需要用下面的命令启动监控即可:

比如前台启动:

python monitor.py start

或者后台启动:

nohup python -u monitor.py start > monitor.log 2>&1 &

通知效果

4种情况会通知:

  1. 启动时通知,以确认相关信息是否正确,启动是否成功。
  2. 扫描到有货源时会通知。
  3. 每天6:00 ~ 23:00整点报时,以确保程序还正常运行。
  4. 程序异常时会通知,如不是致命异常,不用理会。

相关通知截图:

钉钉:

DingTalkNotification

Telegram:

TelegramNotification

Bark:

BarkNotification