利用API接口合规获取淘宝店铺所有商品实战案例(2025年最新版)

一、核心接口与权限准备

  1. 关键接口

    • taobao.items.onsale.get:获取店铺在售商品列表(含价格、库存、销量等核心字段)。
    • taobao.items.inventory.get:获取仓库中商品(未上架商品)。
    • taobao.shop.get:通过店铺昵称获取店铺ID(需先调用此接口获取seller_id)。
  2. 权限申请流程

    • 注册开发者账号 :访问淘宝开放平台,完成企业实名认证(个人开发者需芝麻信用650分以上)。

    • 创建应用:选择"自用型"应用,申请"电商基础API"权限包(含商品、订单等接口)。

    • 获取三元组

      • app_key:应用唯一标识。
      • app_secret:加密密钥(需保密)。
      • session_key:通过OAuth2.0授权获取(需店铺管理员扫码授权,有效期30天)。

二、API调用实战步骤

1. 获取店铺ID
python 复制代码
python
import requests
import time
import hashlib
 
def get_shop_id(app_key, app_secret, seller_nick):
    method = "taobao.shop.get"
    params = {
        "app_key": app_key,
        "method": method,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "format": "json",
        "v": "2.0",
        "sign_method": "hmac",
        "seller_nick": seller_nick,
        "fields": "seller_id"  # 仅需返回店铺ID
    }
    
    # 生成HMAC_MD5签名
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    raw_str = ''.join([f"{k}{v}" for k, v in sorted_params]) + app_secret
    sign = hashlib.md5(raw_str.encode()).hexdigest().upper()
    params["sign"] = sign
 
    response = requests.post(
        "https://eco.taobao.com/router/rest",
        data=params,
        headers={"Content-Type": "application/x-www-form-urlencoded"}
    )
    return response.json()["shop_get_response"]["shop"]["seller_id"]
 
# 示例调用
seller_nick = "示例店铺"  # 替换为目标店铺昵称
app_key = "你的AppKey"
app_secret = "你的AppSecret"
shop_id = get_shop_id(app_key, app_secret, seller_nick)
print(f"店铺ID: {shop_id}")
2. 分页获取在售商品
python 复制代码
python
def get_shop_items(app_key, app_secret, session_key, seller_id, page_no=1, page_size=100):
    method = "taobao.items.onsale.get"
    params = {
        "app_key": app_key,
        "method": method,
        "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
        "format": "json",
        "v": "2.0",
        "sign_method": "hmac",
        "session": session_key,  # 店铺授权token
        "seller_id": seller_id,
        "page_no": page_no,
        "page_size": page_size,
        "fields": "num_iid,title,price,pic_url,quantity,modified"  # 自定义返回字段
    }
    
    # 生成签名(同上)
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    raw_str = ''.join([f"{k}{v}" for k, v in sorted_params]) + app_secret
    sign = hashlib.md5(raw_str.encode()).hexdigest().upper()
    params["sign"] = sign
 
    response = requests.post(
        "https://eco.taobao.com/router/rest",
        data=params,
        headers={"Content-Type": "application/x-www-form-urlencoded"}
    )
    return response.json()
 
# 示例调用
session_key = "你的SessionKey"  # 通过OAuth2.0获取
items_data = get_shop_items(app_key, app_secret, session_key, shop_id)
print(f"第1页商品数: {len(items_data['items_onsale_get_response']['items']['item'])}")
3. 自动翻页获取全部商品
python 复制代码
python
def get_all_shop_items(app_key, app_secret, session_key, seller_id, page_size=100):
    all_items = []
    page_no = 1
 
    while True:
        items_data = get_shop_items(app_key, app_secret, session_key, seller_id, page_no, page_size)
        if "error_response" in items_data:
            print(f"错误: {items_data['error_response']['msg']}")
            break
 
        items = items_data["items_onsale_get_response"]["items"]["item"]
        if not items:
            break
 
        all_items.extend(items)
        total_results = items_data["items_onsale_get_response"]["total_results"]
        print(f"已获取 {len(all_items)}/{total_results} 个商品")
 
        if len(all_items) >= total_results:
            break
        page_no += 1
        time.sleep(1)  # 避免触发限流
 
    return all_items
 
# 示例调用
all_items = get_all_shop_items(app_key, app_secret, session_key, shop_id)
with open("shop_items.json", "w", encoding="utf-8") as f:
    import json
    json.dump(all_items, f, ensure_ascii=False, indent=2)
print("商品数据已保存至 shop_items.json")

三、关键注意事项

  1. 签名算法

    • 淘宝API要求使用HMAC_MD5MD5签名,参数需按ASCII码升序排列,时间戳格式为YYYY-MM-DD HH:MM:SS
  2. 分页与限流

    • 单页最多返回200条商品,建议设置page_size=100以平衡效率与稳定性。
    • 每次请求间隔≥1秒,避免触发QPS限制(默认50次/秒)。
  3. 错误处理

    • 权限不足 :检查session_key是否过期或API未授权。
    • 签名失败:确认参数排序和签名算法正确。
    • 网络超时:设置重试机制(如最多重试3次)。
  4. 数据存储

    • 将商品ID、标题、价格等核心字段存入数据库(如MySQL),图片URL可单独存储至对象存储(如OSS)。

四、合规性要求

  1. 禁止爬虫:淘宝明确禁止绕过API直接爬取网页数据,违规可能导致IP封禁或法律诉讼。
  2. 数据使用限制:不得将商品数据用于转售或未经授权的竞品分析。
  3. 隐私保护:买家昵称、收货地址等敏感字段需脱敏处理。

五、扩展应用场景

  1. 竞品监控:定时抓取商品价格、销量,分析对手策略。
  2. 选品系统:结合关键词API筛选高销量、低差评商品。
  3. 库存预警:实时同步SKU库存,低于阈值时自动通知。
相关推荐
小豆包api1 天前
小豆包AI API × Nano Banana:3D手办 + AI视频生成,「动起来」的神级玩法!
前端·api
RestCloud1 天前
iPaaS 如何帮助 CIO 减少 50% 的集成成本?
api
RestCloud1 天前
零代码集成真的靠谱吗?ETL平台的背后技术揭秘
api
肥肠可耐的西西公主1 天前
后端(fastAPI)学习笔记(CLASS 1):扩展基础
笔记·学习·fastapi
红鼻子时代2 天前
Day5-中间件与请求处理
中间件·fastapi·后端开发
蓝倾3 天前
京东商品属性API数据解析:颜色、尺寸与材质
api·fastapi
lichong9513 天前
【混合开发】Android+Webview+VUE播放视频之视频解析工具mediainfo-Macos
android·macos·架构·vue·音视频·api·postman
RestCloud4 天前
企业为何仍困在“数据孤岛”?——从iPaaS重构信息流的实践路径
数据库·api
RestCloud4 天前
Oracle到ClickHouse:异构数据库ETL的坑与解法
数据库·api