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

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

背景


  • 在线上买了个 iphone13pro,可是等得我好着急呀!一直不发货..甚至关注了 iphone13 超话每天看看大家下的订单都发货了没...
  • 于是乎还看到了有人预定了线下门店的提货,害得我也想直接去线下店提货了..但是每次打开官网都显示【暂无供应】
  • 于是乎想到了简单的爬虫(其实就是发个请求而已...),然后做成定时任务,当有货的时候第一时间通知我


image.png

完成步骤


  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%B

image.png

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

 

找字段


image.png

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

 

验证字段


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


image.png

  • 再次请求下网站,可以看到是可选中了
  • 当然,我其实并不知道真正有供货的响应体是怎么样的,因为找了好几个城市都是无货状态,无法直接复制
  • 所以只能假设可选中就是有供货,准确率估计 50%?哈哈


image.png


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}&timestamp={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()


运行一下

image.png


接入 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


相关文章
|
2月前
|
人工智能 机器人 API
AppFlow:无代码部署Dify作为钉钉智能机器人
本文介绍如何通过计算巢AppFlow完成Dify的无代码部署,并将其配置到钉钉中作为智能机器人使用。首先,在钉钉开放平台创建应用,获取Client ID和Client Secret。接着,创建消息卡片模板并授予应用发送权限。然后,使用AppFlow模板创建连接流,配置Dify鉴权凭证及钉钉连接凭证,完成连接流的发布。最后,在钉钉应用中配置机器人,发布应用版本,实现与Dify应用的对话功能。
AppFlow:无代码部署Dify作为钉钉智能机器人
|
6月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
85 4
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
PeterCat:一键创建开源项目 AI 问答机器人,自动抓取 GitHub 仓库信息、文档和 issue 等构建知识库
PeterCat 是一款开源的智能答疑机器人,能够自动抓取 GitHub 上的文档和 issue 构建知识库,提供对话式答疑服务,帮助开发者和社区维护者高效解决技术问题。
246 7
PeterCat:一键创建开源项目 AI 问答机器人,自动抓取 GitHub 仓库信息、文档和 issue 等构建知识库
|
5月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
79 0
|
7月前
|
调度 索引 Python
python3创建定时任务
python3创建定时任务
55 2
|
7月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
133 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
4月前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
73 2
|
4月前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
36 1
|
5月前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
91 4
|
5月前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用 精选
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用 精选
48 2

热门文章

最新文章