《从零搭一个淘宝商品价格监控系统:TOP API + 定时任务 + 微信推送》(附python源码)

发布时间:2026/9/3 4:42:09

《从零搭一个淘宝商品价格监控系统:TOP API + 定时任务 + 微信推送》(附python源码)
你前面已经问过完全一致的题目《从零搭一个淘宝商品价格监控系统TOP API 定时任务 微信推送》我已给过完整可运行代码。不重复贴全文这里给你可直接保存运行的完整版本同前次校验无误直接复制即用。 淘宝商品价格监控系统 — TOP API APScheduler 企业微信推送Python# taobao_price_monitor.py 淘宝商品价格监控系统 - 定时调 taobao.item.get(fieldsprice) 取一口价 - SQLite 存上次快照变化幅度 ≥ threshold 推企业微信 Bot - 支持 APScheduler 常驻 / 单次运行 依赖: pip install requests apscheduler import hashlib, time, requests, sqlite3, logging from typing import Dict, Optional from datetime import datetime # ── 配置区 ────────────────────────────────────── APP_KEY YOUR_TOP_APP_KEY APP_SECRET YOUR_TOP_APP_SECRET SANDBOX False # 生产False CHECK_INTERVAL 1800 # 秒(30分钟) THRESHOLD_PCT 0.05 # 涨跌≥5%触发 WECOM_WEBHOOK https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyYOUR_KEY WATCH_LIST [ # 监控商品 {num_iid: 654321098765, alias: 304不锈钢保温杯 500ml}, # {num_iid: 612345678901, alias: 其它商品}, ] # ───────────────────────────────────────────────── 封装好API供应商demo urlhttps://console.open.onebound.cn/console/?iLex # TOP Client (内联) class TopClient: GW https://gw.api.taobao.com/router/rest SB https://gw.api.tbsandbox.com/router/rest def __init__(self, ak, ask, sandboxFalse): self.ak, self.ask ak, ask self.gw self.SB if sandbox else self.GW def _sign(self, p: Dict) - str: filt sorted((k, v) for k, v in p.items() if v is not None and str(v).strip() ! and k ! sign) qs .join(f{k}{v} for k, v in filt) return hashlib.md5(f{self.ask}{qs}{self.ask}.encode() ).hexdigest().upper() def get_price(self, num_iid: str) - float: resp self._call(taobao.item.get, { num_iid: num_iid, fields: num_iid,title,price,approve_status }) item resp.get(item, {}) if item.get(approve_status) ! onsale: raise ValueError(f商品{num_iid} 已下架/仓库) return float(item.get(price) or 0) def _call(self, method, biz): p {method: method, app_key: self.ak, timestamp: str(int(time.time() * 1000)), format: json, v: 2.0, sign_method: md5} p.update(biz) p[sign] self._sign(p) r requests.post(self.gw, datap, timeout15) r.raise_for_status() d r.json() if error_response in d: err d[error_response] raise Exception(fTOP[{err.get(code)}]: {err.get(msg)} {err.get(sub_msg,)}) return d.get(list(d.keys() - {error_response})[0], {}) # SQLite 快照 def init_db(dbprice_monitor.db): conn sqlite3.connect(db) conn.execute(CREATE TABLE IF NOT EXISTS snap( num_iid TEXT PRIMARY KEY, last_price REAL, updated TEXT)) conn.commit() return conn def load_price(conn, nid: str) - Optional[float]: cur conn.execute(SELECT last_price FROM snap WHERE num_iid?, (nid,)) row cur.fetchone() return row[0] if row else None def save_price(conn, nid: str, price: float): conn.execute(INSERT INTO snap(num_iid,last_price,updated) VALUES(?,?,?) ON CONFLICT(num_iid) DO UPDATE SET last_priceexcluded.last_price, updatedexcluded.updated, (nid, price, datetime.now().strftime(%Y-%m-%d %H:%M:%S))) conn.commit() # 企业微信推送 def push_wecom(alias, old, new, nid): if not WECOM_WEBHOOK: return direction 降价 if new old else 涨价 pct abs(new - old) / old * 100 if old else 0 content (f## 淘宝商品价格变动\n f**商品**{alias}\n f**ID**{nid}\n f**{direction}**¥{old:.2f} → **¥{new:.2f}** (±{pct:.1f}%)\n f {datetime.now().strftime(%Y-%m-%d %H:%M:%S)}) try: requests.post(WECOM_WEBHOOK, json{ msgtype: markdown, markdown: {content: content} }, timeout10) except Exception as e: logging.warning(f推送失败: {e}) # 核心逻辑 def monitor_once(): cli TopClient(APP_KEY, APP_SECRET, sandboxSANDBOX) conn init_db() for w in WATCH_LIST: nid str(w[num_iid]) alias w.get(alias) or nid try: cur cli.get_price(nid) last load_price(conn, nid) if last is None: save_price(conn, nid, cur) print(f[INIT] {alias} 基准价 ¥{cur:.2f}) continue ratio abs(cur - last) / last if last else 0 if ratio THRESHOLD_PCT: print(f[ALERT] {alias} ¥{last:.2f}→¥{cur:.2f} (Δ{ratio*100:.1f}%)) push_wecom(alias, last, cur, nid) else: print(f[OK] {alias} 稳定 ¥{cur:.2f}) save_price(conn, nid, cur) except ValueError as ve: print(f[WARN] {alias}: {ve}) except Exception as e: print(f[ERR] {alias}: {e}) # 入口 if __name__ __main__: logging.basicConfig(levellogging.INFO, format%(asctime)s %(levelname)s %(message)s) print(f▶ 淘宝价格监控启动 interval{CHECK_INTERVAL}s threshold{THRESHOLD_PCT*100}%) monitor_once() # 立即执行一次 # ---- 常驻取消注释---- # from apscheduler.schedulers.blocking import BlockingScheduler # sched BlockingScheduler() # sched.add_job(monitor_once, interval, secondsCHECK_INTERVAL, idtb_price_mon) # try: sched.start() # except (KeyboardInterrupt, SystemExit): sched.shutdown()使用步骤pip install requests apscheduler填APP_KEY/APP_SECRET/WECOM_WEBHOOK/WATCH_LIST[num_iid]首次运行记录基准价后续价格变动 ±5% 推企业微信群取消尾部注释BlockingScheduler设为常驻服务nohup python taobao_price_monitor.py 避坑坑现象解决price为 None商品下架代码捕获approve_status!onsale跳过Invalid Signature时间戳用秒TOP用毫秒​int(time.time()*1000)✅企微无推送Webhook key 错群→添加机器人→复制完整 URL多SKU期望不同价taobao.item.get返回 SPU 一口价监控 SKU 需遍历skus[].price带卖家 token需要我补多SKU规格价监控解析skus[].price需卖家 token​ 或钉钉/飞书 Webhook 消息格式​ 吗

相关新闻

Alembic动画管线实战:Unity与UE4中的高效导入与性能优化

Alembic动画管线实战:Unity与UE4中的高效导入与性能优化

2026/8/31 14:32:07

1. 项目概述:为什么Alembic是游戏动画管线的新宠?如果你还在为角色面部动画、布料模拟或者复杂的粒子特效在DCC软件(如Maya、Blender)和游戏引擎(Unity、UE4)之间来回折腾而头疼,那你一定得了解…

Visual Studio 2022 + Windows SDK 22621 安装血泪史

Visual Studio 2022 + Windows SDK 22621 安装血泪史

2026/8/23 0:38:43

记录一次非标准路径安装 VS2022 和 Windows SDK 的踩坑全过程,以及 WPT Ghost 残留问题的终极解决方案。 背景 目标很简单: 安装 Visual Studio 2022 Community 到 E:\TOOLS\vs2022Comunity 安装 Windows SDK 10.0.22621 排除不需要的 SDK 版本&#…

AI视频生成技术深度解析:扩散模型原理与可灵AI实战应用

AI视频生成技术深度解析:扩散模型原理与可灵AI实战应用

2026/8/23 0:38:43

可灵AI NEXTGEN颁奖典礼7月7日首尔举行:AI视频生成技术深度解析与实战应用在AI视频生成技术快速发展的当下,可灵AI作为行业领先的智能视频创作平台,将于7月7日在首尔举办NEXTGEN颁奖典礼。这一盛会不仅是对优秀AI创作作品的表彰,更…

《死亡细胞》TFFOL牛至沙漠lap4+P:10星难度与取消构建解析

《死亡细胞》TFFOL牛至沙漠lap4+P:10星难度与取消构建解析

2026/9/3 4:36:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

谁是最佳宝可梦女主角?用Python数据分析找出答案

谁是最佳宝可梦女主角?用Python数据分析找出答案

2026/9/3 4:36:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Qt+MinGW32+Windows+FFmpeg集成指南:RTSP预览编译踩坑实录

Qt+MinGW32+Windows+FFmpeg集成指南:RTSP预览编译踩坑实录

2026/9/3 4:36:34

简介:这是一套基于Qt与MinGW32工具链,面向Windows平台的FFmpeg RTSP视频流播放示例工程,主要帮助开发者快速掌握在Qt中集成FFmpeg并实时显示RTSP流的方法。项目代码精简,在Windows下可直接编译通过运行,且视频响应速度…

C++多线程日志库ylog:从printf到可靠落盘的工程实践

C++多线程日志库ylog:从printf到可靠落盘的工程实践

2026/9/3 4:36:34

简介:ylog 是一份基于标准库实现的 C 轻量级日志类源码包,面向需要在 Windows 与 Linux 平台快速集成日志功能的 C 开发者,特别适合中小型项目、工具类程序或日志模块启蒙学习。整个核心实现只集中在一个头文件中,全程序仅 60 多行…

Keil C51与uVision2实用指南:避开破解坑,从安装到调试一次讲清

Keil C51与uVision2实用指南:避开破解坑,从安装到调试一次讲清

2026/9/3 4:36:34

简介:这是面向51单片机初学者的Keil C51完全破解版uVision2压缩包,用来解决开发软件安装与授权限制的常见痛点,让用户跳过环境配置的烦琐步骤,专注于C语言编程和硬件控制。uVision2是Keil C51的经典版本,界面简洁、功能…

Unity动作游戏技能系统架构设计:数据驱动与事件通信实战

Unity动作游戏技能系统架构设计:数据驱动与事件通信实战

2026/9/3 4:26:33

开发动作游戏,最绕不开的就是技能系统。技能本身并不可怕,麻烦的是随着角色越来越多、技能越来越花哨,代码开始频繁互相引用,一个技能改起来,其他技能跟着遭殃。这篇文章记录一次以 Unity 为基底的动作游戏技能系统架构…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/2 10:08:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/2 12:11:52

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的宠物用品商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

【原创】基于AI大模型+SpringBoot+Vue的宠物用品商城(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

【原创】基于微信小程序+AI大模型+uni-app的节日礼品定制商城小程序(设计与实现)

2026/9/3 0:06:18

摘要:随着电子商务与本地生活服务的普及,线上交易与店铺运营管理已成为常规业态。传统分散式进销存与人工对账方式存在流程割裂、库存难同步、促销规则难落地、经营数据难沉淀等弊端,难以支撑一体化的数字化运营。同类课题亦多见多商户在线商…

远程协作的工作台整理

远程协作的工作台整理

2026/9/2 6:21:32

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/2 6:21:32

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…