电商程序猿开发实录:淘宝商品python(2)

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本文分享了开发者在对接淘宝商品详情API过程中的真实经历,涵盖权限申请、签名验证、限流控制、数据解析及消息订阅等关键环节,提供了实用的Python代码示例,帮助开发者高效调用API,提升系统稳定性与数据处理能力。

在电商开发这条布满荆棘的路上摸爬滚打了这么多年,和淘宝商品详情 API 接口 “过招” 的经历,至今想起来都印象深刻。从被各种报错整到抓狂,到能熟练用它搭建功能,其中的辛酸与收获,今天就掏心窝子和大伙唠一唠,再附上超实用的代码干货!

刚开始对接淘宝商品详情 API,那叫一个自信满满,心想照着文档走,申请权限、调用接口,不就能轻松拿到数据?现实却立马给了我一记暴击。申请权限时,淘宝开放平台审核严格得超乎想象,营业执照、应用场景说明、数据使用规范等资料,反复修改提交了三四次,等了整整四天,才终于通过审核。好不容易拿到App Key和App Secret,签名验证又成了拦路虎。淘宝的签名算法复杂又严谨,参数顺序、编码格式稍有差错,就返回40001签名错误。那段时间,我日夜对着文档和示例代码钻研,眼睛都快瞅花了,终于写出了正确的签名生成函数:

python

运行

import hashlib
import hmac
import time
import urllib.parse

def generate_sign(params, app_secret):
sorted_params = sorted(params.items(), key=lambda x: x[0])
sign_str = app_secret
for k, v in sorted_params:
sign_str += f"{k}{v}"
sign_str += app_secret
return hmac.new(
app_secret.encode(), sign_str.encode(), hashlib.sha256
).hexdigest().upper()
解决了签名问题,新的难关又出现了。接口调用频率限制让我头疼不已,当时为了快速采集一批商品数据,没把控好请求节奏,短时间内发送过多请求,直接被淘宝封了 IP,还收到警告邮件。没办法,只能静下心研究淘宝的限流规则,用漏桶算法写了个频率控制类,限制请求的发送:

python

运行

import time

class LeakyBucket:
def init(self, capacity, rate):
self.capacity = capacity
self.rate = rate
self.tokens = capacity
self.last_update = time.time()

def consume(self, tokens=1):
    now = time.time()
    # 补充令牌
    self.tokens = min(
        self.capacity, self.tokens + (now - self.last_update) * self.rate
    )
    self.last_update = now

    if self.tokens >= tokens:
        self.tokens -= tokens
        return True
    return False

使用示例

bucket = LeakyBucket(capacity=100, rate=20) # 容量100,每秒补充20个令牌
if bucket.consume():

# 调用API
response = requests.get(api_url)

else:
time.sleep(0.1) # 等待令牌补充
python实例

{
"item": {
"seller": {
"seller_id": "1991926764",
"seller_title": "萤石官方旗舰店",
"shop_id": "108801324",
"shop_title": "萤石官方旗舰店",
"shop_url": "//shop108801324.taobao.com",
"shop_icon": "//img.alicdn.com/imgextra//fa/a1/TB1jrf.bV67gK0jSZPfwu1hhFXa.png",
"user_type": "B",
"evaluates": [
{
"score": "4.5",
"title": "宝贝质量"
},
{
"score": "4.7",
"title": "服务保障"
},
{
"score": "4.9",
"title": "物流速度"
}
]
},
"item": {
"num_iid": "680078401583",
"title": "萤石AI人脸识别智能猫眼视频y3000无需指纹家用防盗门电子密码锁",
"sales": "1万+",
"detailurl": "//item.taobao.com/item.htm?id=680078401583",
"images": [
"https://picasso.alicdn.com/imgextra/O1CNA1gU5ZHx1zpy1sNNkWu
!!1991926764-0-psf.jpg",
"https://gw.alicdn.com/imgextra/O1CN01dlBDxe1zpxvFHCMU3_!!1991926764.jpg",
"https://gw.alicdn.com/imgextra/O1CN01Bpr20y1zpxlC4kPiZ_!!1991926764.jpg",
"https://gw.alicdn.com/imgextra/O1CN01u0S5FZ1zpxl8DHhP7_!!1991926764.jpg",
"https://gw.alicdn.com/imgextra/O1CN01LtDVqN1zpxlYG6VNs_!!1991926764.jpg"
],
"videos": [
{
"itemId": "680078401583",
"spatialVideoDimension": "3:4",
"url": "http://cloud.video.taobao.com/play/u/1991926764/p/2/e/6/t/1/403135576199.mp4?appKey=38829",
"videoId": "403135576199",
"videoThumbnailURL": "https://picasso.alicdn.com/imgextra/O1CNA1gU5ZHx1zpy1sNNkWu_!!1991926764-0-psf.jpg"
}
],
"descimgs": [
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01qBjMHQ1zpy1PVQ4h3
!!1991926764.png",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01kJMnaC1zpy1lp4azl_!!1991926764.png",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01NS1tDu1zpxlVi3F9E_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01gSwxIt1zpxzGa4PQG_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01Meby0a1zpy1nzk0Bc_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01ycgAMZ1zpxyRZGiSY_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01NkoSvN1zpy1VyEjkN_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN014hrRmK1zpxurSKDpw_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01Fd9pkm1zpxunO1gRj_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01qy15SD1zpxloGOKfl_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01owRGP81zpxlzfIBJP_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01wV8qSX1zpxlqVM1jW_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN013fo39c1zpxlslaww0_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01zBsplA1zpxlwoZN6f_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN018NJ7Px1zpxlhG3iXS_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN018oI4951zpxppfuTw2_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01D6Ztqo1zpxlnUi8Jg_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01Ru69gC1zpxlvh5ktF_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01hpQhIe1zpxlqcgfE6_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01dwLQRX1zpxwdhvLhK_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01Cryg9b1zpxoRHOgLT_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01e9yQ9L1zpxlhG5vod_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01oXh9v21zpxlnUhriz_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01mZPChI1zpxvM3gX4i_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01EL44Dx1zpxlxaSzqt_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01sHke121zpxlzfGuL2_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01wZj1TZ1zpxlxaUbdS_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01rqhraG1zpxlypji2Q_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01srU1zt1zpxlxaSvhD_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01q1HwTG1zpxlslcDwT_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN010rLEHQ1zpxlnUkPhP_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01EaKDeO1zpxlzfH2ea_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01AMWt651zpxlnUjH2d_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01lOOmAH1zpxloGPTN0_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01gf29eF1zpxq0F8IFH_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01YKtFPI1zpxlvh3LGa_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01i8Swdg1zpxvh1NV2v_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i1/1991926764/O1CN01Gc4iZ31zpxlwoZAfV_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01s9RtRc1zpxw4Dk5ml_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01KCbiov1zpxr9yudOL_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01412DQH1zpxxNFldSn_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i3/1991926764/O1CN01CnGwgW1zpxy8HjCdr_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i2/1991926764/O1CN01vAYzWB1zpxyCHXkiI_!!1991926764.jpg",
"https://img.alicdn.com/imgextra/i4/1991926764/O1CN01ONf91C1zpy1nzkTIR_!!1991926764.jpg"
]
},
"skuBase": {
"1627207": {
"pid": "1627207",
"name": "饰面颜色",
"values": [
{
"vid": "30598787885",
"name": "Y3000F极致灰【3D人脸 不带视频】",
"image": "http://img.alicdn.com/imgextra/i1/1991926764/O1CN01AUty1d1zpxufZY57f_!!1991926764.jpg"
},
{
"vid": "30598787886",
"name": "Y3000FV极致灰【3D人脸+远程视频对讲】",
"image": "http://img.alicdn.com/imgextra/i2/1991926764/O1CN01QWG9bn1zpxuiecyOZ_!!1991926764.jpg"
},
{
"vid": "30598787887",
"name": "Y3000FV晶石紫【3D人脸+远程视频对讲】",
"image": "http://img.alicdn.com/imgextra/i2/1991926764/O1CN01Ot95XQ1zpxug3kw5y_!!1991926764.jpg"
},
{
"vid": "30598841824",
"name": "Y3000FVS静谧黑【3D人脸+远程视频对讲+可视大屏+儿童出门检测】",
"image": "http://img.alicdn.com/imgextra/i3/1991926764/O1CN01aan3rC1zpxun4cooO_!!1991926764.jpg"
}
]
}
},
"skuCore": {
"sku2info": [
{
"skuId": "5442252479410",
"price": "2199.00",
"promotion_price": "1699.00",
"activity_price": "1199.00",
"propPath": "1627207:30598787885",
"propName": "1627207:30598787885:饰面颜色:Y3000F极致灰【3D人脸 不带视频】",
"quantity": 200
},
{
"skuId": "5442252479408",
"price": "2999.00",
"promotion_price": "1999.00",
"activity_price": "1499.00",
"propPath": "1627207:30598787886",
"propName": "1627207:30598787886:饰面颜色:Y3000FV极致灰【3D人脸+远程视频对讲】",
"quantity": 200
},
{
"skuId": "5686996374626",
"price": "2999.00",
"promotion_price": "1999.00",
"activity_price": "1499.00",
"propPath": "1627207:30598787887",
"propName": "1627207:30598787887:饰面颜色:Y3000FV晶石紫【3D人脸+远程视频对讲】",
"quantity": 94
},
{
"skuId": "5442252479411",
"price": "3999.00",
"promotion_price": "2199.00",
"activity_price": "1699.00",
"propPath": "1627207:30598841824",
"propName": "1627207:30598841824:饰面颜色:Y3000FVS静谧黑【3D人脸+远程视频对讲+可视大屏+儿童出门检测】",
"quantity": 200
}
]
},
"price": {
"price": {
"hiddenPrice": "false",
"priceColor": "#FF4F00",
"priceColorNew": "#FFFFFF",
"priceDesc": "起",
"priceMoney": "169900",
"priceText": "1699",
"priceTitle": "百亿补贴",
"priceTitleColor": "#FF4F00",
"priceUnit": "¥"
},
"extraPrice": {
"hiddenPrice": "false",
"priceBgColor": "#FF5000",
"priceColor": "#FFFFFF",
"priceColorNew": "#FFFFFF",
"priceDesc": "起",
"priceMoney": "119900",
"priceText": "1199",
"priceTitle": "折后",
"priceTitleColor": "#FFFFFF",
"priceUnit": "¥"
}
},
"props": [
{
"name": "品牌",
"value": "EZVIZ/萤石"
},
{
"name": "型号",
"value": "Y3000FV人脸视频锁"
},
{
"name": "产地",
"value": "中国大陆"
},
{
"name": "省份",
"value": "浙江省"
},
{
"name": "地市",
"value": "杭州市"
},
{
"name": "面板及执手材质",
"value": "铝合金"
},
{
"name": "智能类型",
"value": "其他智能"
},
{
"name": "电源类型",
"value": "直流电"
},
{
"name": "数据存储类型",
"value": "在线"
},
{
"name": "电子类型",
"value": "密码锁 人脸锁"
},
{
"name": "屏幕数量",
"value": "单屏"
},
{
"name": "饰面颜色",
"value": "Y3000F极致灰【3D人脸 不带视频】 Y3000FV极致灰【3D人脸+远程视频对讲】 Y3000FV晶石紫【3D人脸+远程视频对讲】 Y3000FVS静谧黑【3D人脸+远程视频对讲+可视大屏+儿童出门检测】"
}
],
"extensionInfo": [
{
"items": [
{
"text": [
"购买得积分"
]
}
],
"title": "优惠",
"type": "DAILY_COUPON"
}
],
"delivery": {
"addressId": "11996539000",
"agingDesc": "预计5小时内发货|承诺48小时内发货",
"agingDescColor": "#00A67C",
"areaId": "130435102",
"deliverToCity": "邯郸市",
"deliveryFromAddr": "浙江杭州",
"deliveryToAddr": "邯郸市 曲周县 侯村镇",
"deliveryToDistrict": "曲周县",
"freight": "快递: 免运费"

数据到手后,才发现更大的挑战在等着我。淘宝商品详情数据格式极为复杂,商品基础信息、规格参数、价格体系、库存状态、商家资质等内容层层嵌套,不同类目商品的数据结构还存在差异。比如服装类目会有尺码、面料等信息,电子产品则有型号、配置参数等。为了准确提取关键数据,我写了个通用的数据解析函数,还加了容错处理:

python

运行

def parse_product_data(raw_data):
try:
return {
"product_title": raw_data.get("item", {}).get("title", ""),
"current_price": float(raw_data.get("item", {}).get("price", 0)),
"original_price": float(raw_data.get("item", {}).get("originalPrice", 0)),
"stock": int(raw_data.get("item", {}).get("quantity", 0)),
"category": raw_data.get("item", {}).get("categoryName", "")
}
except KeyError as e:
print(f"字段缺失: {e}")
return {}

示例调用

raw_response = {...} # API返回数据
parsed_data = parse_product_data(raw_response)
有一回,给客户开发一个商品监控系统,需要实时获取商品价格和库存变动。起初我采用定时轮询的方式调用 API,不仅效率低,还浪费资源。后来发现可以利用淘宝的消息订阅功能,当商品信息更新时,淘宝主动推送消息,大大提高了实时性和效率。不过接入消息订阅也没那么容易,要处理消息签名验证、消息解密、重复消息过滤等问题,经过一番折腾,终于实现了稳定接入:

python

运行

import base64
import hashlib
import hmac
from flask import Flask, request, abort

app = Flask(name)
SUBSCRIPTION_SECRET = "your_subscription_secret"

@app.route('/message/subscribe', methods=['POST'])
def handle_subscribe_message():
sign = request.headers.get('X-Taobao-Signature')
if not sign:
abort(401)

data = request.data
local_sign = hmac.new(
    SUBSCRIPTION_SECRET.encode('utf-8'),
    data,
    hashlib.sha256
).hexdigest()

if sign != local_sign:
    abort(401)

# 解密消息体(如果有加密)
encrypted_data = request.json.get('encrypted_data', '')
decrypted_data = decrypt_message(encrypted_data)  # 自行实现解密函数

# 处理商品更新数据
handle_product_update(decrypted_data)

return "OK", 200

if name == 'main':
app.run(debug=True)
这些年在淘宝商品详情 API 接口开发上,每踩一个坑,就积累一份经验;每解决一个难题,技术能力就得到一次提升。

相关文章
|
8天前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
21天前
|
JSON API 数据安全/隐私保护
【干货满满】分享淘宝API接口到手价,用python脚本实现
淘宝开放平台通过API可获取商品到手价,结合商品详情与联盟接口实现优惠计算。需使用AppKey、AppSecret及会话密钥认证,调用taobao.tbk.item.info.get接口获取最终价格。代码示例展示签名生成与数据解析流程。
|
22天前
|
JSON 缓存 API
深度分析淘宝API接口,用Python脚本实现
本内容深入解析淘宝开放平台 API 的接口设计与 Python 实现,涵盖接口体系、认证机制、签名规则及限流策略,并提供完整的 Python 调用框架,适用于电商系统对接与自动化运营。
|
25天前
|
存储 监控 算法
淘宝买家秀 API开发实录Python(2025)
本文讲述了作者在电商开发领域,尤其是对接淘宝买家秀 API 接口过程中所经历的挑战与收获。从申请接入、签名验证、频率限制到数据处理和实时监控,作者分享了多个实战经验与代码示例,帮助开发者更高效地获取和处理买家秀数据,提升开发效率。
|
10天前
|
API Python
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
14天前
|
数据采集 存储 XML
Python爬虫XPath实战:电商商品ID的精准抓取策略
Python爬虫XPath实战:电商商品ID的精准抓取策略
|
30天前
|
Java API 数据安全/隐私保护
|
30天前
|
Java API 数据处理
淘宝批量上架软件脚本,电商一键上货软件, 淘宝一键铺货软件【python】
核心功能:实现淘宝商品批量上传,包含登录认证、商品数据处理、图片处理和API调用 多线程处理
|
30天前
|
机器人 数据安全/隐私保护 Python
淘宝批量发货发布工具, 淘宝批量上传商品软件, 淘宝批量上架软件【python】
使用Selenium实现自动化操作淘宝卖家后台 支持三种核心功能
|
2月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。

推荐镜像

更多