在电商领域,获取商品详情、分类、主图、SKU 等信息是数据分析、竞品监测、供应链管理等业务的核心需求。淘宝、京东、1688 作为国内三大主流电商平台,提供了完善的开放 API 体系,允许开发者通过编程方式实时获取商品数据。本文将深入解析三大平台的 API 接口机制,提供完整的技术实现方案,并探讨数据应用中的最佳实践。
数据维度 |
淘宝字段 |
京东字段 |
1688 字段 |
商品 ID |
num_iid |
skuId |
product_id |
分类 ID |
cid |
categoryId |
category_id |
主图 URL |
pic_url |
imageUrl |
main_pic |
SKU 列表 |
sku_info |
skuList |
sku_details |
价格 |
view_price |
price |
wholesale_price |
# 安装必要库
pip install requests pandas python-dotenv
import requests
import hashlib
def taobao_item_detail(item_id):
url = "https://api.taobao.com/router/rest"
params = {
"method": "taobao.item.get",
"app_key": "YOUR_APP_KEY",
"item_num_id": item_id,
"timestamp": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"format": "json",
"v": "2.0",
"sign_method": "md5"
}
# 生成签名
params["sign"] = generate_sign(params, "YOUR_APP_SECRET")
response = requests.get(url, params=params)
data = response.json()
return {
"title": data["item"]["title"],
"main_pic": data["item"]["pic_url"],
"sku_info": data["item"]["sku_info"],
"category_id": data["item"]["cid"]
}
def generate_sign(params, secret):
keys = sorted(params.keys())
sign_str = secret + "".join([f"{k}{params[k]}" for k in keys]) + secret
return hashlib.md5(sign_str.encode()).hexdigest().upper()
import jwt
import time
def jd_sku_query(sku_id, access_token):
url = "https://api.jd.com/routerjson"
headers = {"Authorization": f"Bearer {access_token}"}
payload = {
"method": "jd.union.open.goods.query",
"app_key": "YOUR_APP_KEY",
"timestamp": int(time.time() * 1000),
"v": "1.0",
"skuIds": sku_id
}
# 生成JWT签名
token = jwt.encode(payload, "YOUR_PRIVATE_KEY", algorithm="RS256")
payload["sign"] = token
response = requests.post(url, json=payload, headers=headers)
sku_data = response.json()["result"]["wareInfoVOs"][0]
return {
"sku_id": sku_data["wareId"],
"price": sku_data["price"],
"stock": sku_data["stockNum"],
"category_path": sku_data["categoryPath"]
}
from alibaba_1688 import AlibabaClient
client = AlibabaClient(app_key="YOUR_APP_KEY", app_secret="YOUR_APP_SECRET")
def get_1688_category(category_id):
response = client.execute("alibaba.product.category.get", {
"category_id": category_id
})
return {
"category_name": response["category"]["name"],
"parent_category": response["category"]["parentId"],
"children": [c["id"] for c in response["category"]["children"]]
}
# 数据库存储时的增量更新逻辑
def update_product_data(data):
existing = db.query(Product).filter_by(platform_id=data["platform_id"]).first()
if existing:
# 仅更新变更字段
for key, value in data.items():
if getattr(existing, key) != value:
setattr(existing, key, value)
else:
# 创建新记录
db.add(Product(**data))
db.commit()
try:
result = api_call()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
time.sleep(60) # 触发限流后等待1分钟
retry()
except Exception as e:
logging.error(f"API调用失败: {str(e)}")
sentry.capture_exception(e)
# 统一不同平台的SKU格式
def normalize_sku(platform, sku_data):
if platform == "taobao":
return {s["sku_id"]: s["price"] for s in sku_data["sku_info"]["sku"]}
elif platform == "jd":
return {s["wareId"]: s["price"] for s in sku_data["skuList"]}
elif platform == "1688":
return {s["sku_id"]: s["price"] for s in sku_data["sku_details"]}
通过三大平台的实时 API 接口,开发者能够构建高效的数据采集系统,为电商运营提供强大的底层数据支持。在实际开发中,需重点关注权限管理、反爬策略和数据标准化,同时严格遵守各平台的开发规范。随着电商 API 体系的不断完善,未来将实现更精细化的数据获取能力,助力企业在数字化竞争中占据优势。
注意:本文代码示例需根据实际申请的 API 权限和平台政策进行调整,建议在正式环境前进行充分的沙箱测试。获取最新 API 文档请访问各平台开放平台官网。