?
在電商開發這條布滿荊棘的路上摸爬滾打了這么多年,和淘寶商品詳情 API接口 “過招” 的經歷,至今想起來都印象深刻。從被各種報錯整到抓狂,到能熟練用它搭建功能,其中的辛酸與收獲,今天就掏心窩子和大伙嘮一嘮,再附上超實用的代碼干貨!
剛開始對接淘寶???????商品詳情 API,那叫一個自信滿滿,心想照著文檔走,申請權限、調用接口,不就能輕松拿到數據?現實卻立馬給了我一記暴擊。申請權限時,淘寶開放平臺審核嚴格得超乎想象,營業執照、應用場景說明、數據使用規范等資料,反復修改提交了三四次,等了整整四天,才終于通過審核。好不容易拿到`App Key`和`App Secret`,簽名驗證又成了攔路虎。淘寶的簽名算法復雜又嚴謹,參數順序、編碼格式稍有差錯,就返回40001簽名錯誤。那段時間,我日夜對著文檔和示例代碼鉆研,眼睛都快瞅花了,終于寫出了正確的簽名生成函數:
運行
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": "http://shop108801324.taobao.com",
"shop_icon": "http://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萬+",
"detail_url": "http://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"
}
],
"desc_imgs": [
"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 接口開發上,每踩一個坑,就積累一份經驗;每解決一個難題,技術能力就得到一次提升。
?審核編輯 黃宇
-
API
+關注
關注
2文章
2368瀏覽量
66752 -
開發
+關注
關注
0文章
378瀏覽量
42144 -
python
+關注
關注
57文章
4876瀏覽量
90022
發布評論請先 登錄
淘寶商品評論API接口(taobao.item_review)指南
Flutter 移動端開發:集成淘寶 API 實現商品數據實時展示 APP
淘寶商品詳情API接口技術解析與實戰應用
淘寶商品詳情 API:從商品數據細節中捕捉電商最新流行趨勢,賦能商家決策
淘寶電商 API 接口,商品價格監控必備神器!
電商程序猿開發實錄:淘寶商品python(2)
評論