Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

背景

  • 在线上买了个 iphone13pro,可是等得我好着急呀!一直不发货..甚至关注了 iphone13 超话每天看看大家下的订单都发货了没…

  • 于是乎还看到了有人预定了线下门店的提货,害得我也想直接去线下店提货了..但是每次打开官网都显示【暂无供应】

  • 于是乎想到了简单的爬虫(其实就是发个请求而已…),然后做成定时任务,当有货的时候第一时间通知我

Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

完成步骤

  1. 打开官网,找到获取线下门店供应情况的接口
  2. 抓包接口,猜测哪个字段影响供货显示情况
  3. 改包接口,将该字段改成有货,验证猜测
  4. Python 请求该接口,取到该字段值
  5. 接入钉钉机器人,将广州线下门店的供货情况发送到钉钉上
  6. 使用 mac 自带的 crontab 定时任务,创建执行 Python 脚本的定时任务

找接口

https://www.apple.com.cn/shop/fulfillment-messages?pl=true&parts.0=MLTE3CH/A&location=%E5%B9%BF%E4%B8%9C%20%E5%B9%BF%E5%B7%9E%20%E5%A4%A9%E6%B2%B3%E5%8C%BA

Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

很容易找到供货情况的接口是这个

找字段

Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

盲猜是这个 storeSelectionEnabled 字段影响的,因为只有它是 False,当然也有猜过是下面的 pickupDisplay,但从命名来看,第一个才是影响是否可选中的字段

验证字段

  • 通过 charles 的 map local 来改包
  • 先保存这个接口的响应体到本地,然后将 storeSelectionEnabled 改成 true
  • 再按照下面的步骤来绑定响应映射就可以了

Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
  • 再次请求下网站,可以看到是可选中了
  • 当然,我其实并不知道真正有供货的响应体是怎么样的,因为找了好几个城市都是无货状态,无法直接复制
  • 所以只能假设可选中就是有供货,准确率估计 50%?哈哈

Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

Python 脚本请求该接口

import requests
def get_phone():
    res = requests.get(
        "https://www.apple.com.cn/shop/fulfillment-messages?pl=true&parts.0=MLTE3CH/A&location=%E5%B9%BF%E4%B8%9C%20%E5%B9%BF%E5%B7%9E%20%E5%A4%A9%E6%B2%B3%E5%8C%BA",
        verify=False)
    res = res.json()["body"]["content"]["pickupMessage"]["stores"]

    for num, item in enumerate(res):
        phone = item["partsAvailability"]["MLTE3CH/A"]

        storeSelectionEnabled = phone["storeSelectionEnabled"]
        storePickupQuote = phone["storePickupQuote"]
        pickupSearchQuote = phone["pickupSearchQuote"]

        if storeSelectionEnabled:
            res = {
                "可取货": storeSelectionEnabled,
                "取货状态": storePickupQuote,
                "供应状态": pickupSearchQuote
            }
            yield res

接入钉钉机器人

https://www.cnblogs.com/poloyy/p/15565764.html

最终脚本

import requests

# 获取手机供货信息
def get_phone():
    res = requests.get(
        "https://www.apple.com.cn/shop/fulfillment-messages?pl=true&parts.0=MLTE3CH/A&location=%E5%B9%BF%E4%B8%9C%20%E5%B9%BF%E5%B7%9E%20%E5%A4%A9%E6%B2%B3%E5%8C%BA",
        verify=False)
    res = res.json()["body"]["content"]["pickupMessage"]["stores"]

    for num, item in enumerate(res):
        phone = item["partsAvailability"]["MLTE3CH/A"]

        storeSelectionEnabled = phone["storeSelectionEnabled"]
        storePickupQuote = phone["storePickupQuote"]
        pickupSearchQuote = phone["pickupSearchQuote"]

        if storeSelectionEnabled:
            res = {
                "可取货": storeSelectionEnabled,
                "取货状态": storePickupQuote,
                "供应状态": pickupSearchQuote
            }
            yield res

# python 3.8
import time
import hmac
import hashlib
import base64
import urllib.parse

# 加签
timestamp = str(round(time.time() * 1000))
secret = '此处填写 webhook token'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

def dingmessage():
    # 请求的URL,WebHook地址
    webhook = f"https://oapi.dingtalk.com/robot/send?access_token={token}×tamp={timestamp}&sign={sign}"

    # 构建请求头部
    header = {"Content-Type": "application/json", "Charset": "UTF-8"}

    # 循环生成器并发送消息
    for phone in get_phone():
        message = {
            "msgtype": "text",
            "text": {"content": phone},
            "at": {
                # @ 所有人
                "isAtAll": True
            }
        }
        message_json = json.dumps(message)
        info = requests.post(url=webhook, data=message_json, headers=header, verify=False)  # 打印返回的结果
        print(info.text)

if __name__ == "__main__":
    dingmessage()

运行一下

Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

接入 crontab 定时任务

我的是 mac 电脑,所有有自带 crontab,命令行敲

sudo crontab -e

添加定时任务

*/1 * * * * /usr/local/opt/python@3.9/bin/python3.9 /Users/test.py

保存,会有成功信息

> sudo crontab -e
crontab: installing new crontab

查看定时任务

sudo crontab -l

过一分钟后去看钉钉就可以了!

特殊情况

若遇到定时任务无法运行,可以看看这篇

https://www.cnblogs.com/poloyy/p/15565916.html

Original: https://www.cnblogs.com/poloyy/p/15565875.html
Author: 小菠萝测试笔记
Title: Python 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/9228/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 〖Python接口自动化测试实战篇⑨〗- 实战 – 某旅游网经典流程的接口测试

    点击下方图片有惊喜,精美礼品等你来拿哦 前言:✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS 赋能的博主 ✌🏆 CSDN博客专家认证、新星计划第…

    2022年8月21日
    0310
  • Python中的反射

    通过字符串映射或修改程序运行时的状态、属性、方法, 可以通过下面这4中方法 ”’ 使用getattr(object, name_str, default=None) 方法获取ob…

    Python 5小时前
    010
  • Python中字典的使用

    扣款说明: [En] Deduction description: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、C币…

    Python 2022年8月7日
    0510
  • AI识别教程 yolov5 (穿越火线,csgo等FPS游戏识别)

    目录 二、视频识别 三、版本和配置环境 四、准备工作 1.yolov5 模板下载 2.安装所需库 (1)安装pytorch(建议安装gpu版本cpu版本太慢) 3.运行检测 五、数…

    2022年8月19日
    0680
  • python3中的切片

    一·切片的相关知识 1·概念:在Python中, 切片 (slice) 是对序列型对象 (如 list, string, tuple)的一种高级索引方法。简单来说就是如果我们需要对…

    Python 2022年9月3日
    0210
  • 从入门到一位合格的爬虫师,这几点很重要

    只需要几个解析库或简单的框架知识,您就能成为一个爬虫吗?不,事实上,一个合格的爬虫并不像他想象的那么简单。需要时间和技术来沉淀和不断打磨编程技能。 [En] Can you bec…

    2022年8月20日
    0360
  • python中import 模块的路径问题

    对于系统的包我们导入没有疑问 但是如果我们自己写的文件夹里面的python文件呢? 自己写的文件import时候会出现路径问题的疑惑 比如同目录下面的python文件被import…

    2022年8月31日
    0270
  • 生命游戏(python实现,pygame显示图形)

    # 游戏规则:# 生命游戏(Game of Life),或者叫它的全称John Conway’s Game of Life。是英国数学家约翰·康威在1970年代所发明的一种元胞自动…

    Python 2022年8月14日
    0660
  • Python ❀ 求固定位置自然数最大最小值

    Python ❀ 求固定位置自然数最大最小值 原创 无糖可乐没有灵魂2022-06-24 19:19:40博主文章分类:Python ©著作权 文章标签 整除 最大最小值 文章分类…

    Python 2022年9月6日
    0290
  • python — Pythonic

    所谓Pythonic,就是极具Python特色的Python代码(明显区别于其它语言的写法的代码) 总结如下: 两变量的内容交换 Python:a,b = b,a 非Python:…

    Python 2022年8月14日
    0630
  • python中*的用法

    python中 * 是非常常见的一个运算符,它主要有以下几个功能:乘法运算符 [En] Multiplication operator函数参数表示可变参数 [En] Functio…

    Python 2022年8月7日
    0570
  • Python:opencv画点、圆、线、多边形、矩形

    简介:机器学习视觉方向一般都需要在图像中添加标注框,标注框有着很大的用处,特别是对图像中某些需要关注的特征起到圈定的效果,方便对特征选择进行处理。 相关攻略: 机器学习:基本流程P…

    2022年8月22日
    0640
  • 神经网络——Python实现BP神经网络算法(理论+例子+程序)

    采用BP算法的多层感知器是至今为止应用最广泛的神经网络,在多层感知器的应用中,以图3-15所示的单隐层网络的应用最为普遍。一般习惯将单隐层前馈网称为三层感知器,所谓三层包括了输入层…

    Python 2022年8月20日
    0360
  • 5个节约生命的Python小技巧

    前言 Python是一种强大且易上手的语言,语法简洁优雅,不像Java那么繁琐废话,并且有一些特殊的函数或语法可以让代码变得更加 简短精悍。根据我的经验,下面介绍常用的5个Pyth…

    2022年9月3日
    0280
  • java调用python代码

    使用Runtime.getRuntime()执行python脚本文件,推荐使用 import java.io.BufferedReader; import java.io.IOEx…

    2022年8月9日
    0670
  • 全网最强ViT (Vision Transformer)原理及代码解析

    今天我们来详细了解一下Vision Transformer。基于timm的代码。 1. Patch Embedding Transformer原本是用来做NLP的工作的,所以ViT…

    2022年8月22日
    0750
  • Matplotlib(基本用法)

    Matplotlib 是数据分析绘图的常见模块,可以算是 2D-绘图(Python)领域使用最广泛的套件,可以将数据图形化,并且提供多样化的输出格式,利于数据的显示并分析。 接下来…

    2022年9月3日
    0240
  • Python 函数进阶-递归函数

    递归函数 什么是递归函数 如果函数可以调用自身,则该函数是递归函数。 [En] If a function can call itself, then the function i…

    2022年9月3日
    0240
  • 如何用安卓手机运行Python代码

    1. 写在前面的话 天天都在PC端运行Python代码的我,今天突然灵光一现,想着是不是能够在移动端运行Python代码呢?如果能够实现的话,家里的废旧手机就有用武之地了。 ; 2…

    2022年8月24日
    0470
  • Python数据结构与算法(2.7)——跳表

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。 Original: https:…

    Python 2022年8月28日
    0330
  • python — Pythonic

    所谓Pythonic,就是极具Python特色的Python代码(明显区别于其它语言的写法的代码) 总结如下: 两变量的内容交换 Python:a,b = b,a 非Python:…

    Python 2022年8月14日
    0300
  • 用Python一个天天酷跑(源码附上)

    Original: https://www.cnblogs.com/123456feng/p/16051295.htmlAuthor: 蚂蚁ailingTitle: 用Python…

    Python 2022年9月5日
    0360
  • python+html实现前后端数据交互界面显示

    最近刚刚开始学习如何将python后台与html前端结合起来,现在写一篇blog记录一下,我采用的是前后端不分离形式。 自不必说,先实现一个简单的计算功能,前端输入计算数据,后端计…

    2022年8月22日
    0400
  • 使用指定的GPU组:CUDA_VISIBLE_DEVICES

    1. 命令讲解: 2. 高效使用 为了资源合理分配,不占用别人正在使用的GPU,我们 可以指定自己要使用的GPU组(也就是在你的代码中使用的某一个或某几个GPU),这样就很有效的避…

    Python 2022年8月28日
    0260
  • Linux下安装Python3.6.8

    前言 在Linux系统中,一般都自带Python,不过Linux下自带Python大都是 2.x版本,如果我们想要使用python3的话,最好是再重新装一个Python3的环境,让…

    2022年8月18日
    0330
  • Pytest框架 — 12、Pytest的标记(三)(重复执行)

    1、前言 在自动化测试的时候我们可能会遇到某些原因,如模块不稳定等,出现一些测试失败,此时我们想要针对单个用例或者单个模块重复执行多次,以确定测试失败的真正原因。在 Pytest中…

    Python 2022年9月3日
    0400

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部