利用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库存,低于阈值时自动通知。
相关推荐
崔庆才丨静觅2 小时前
0代码生成4K高清图!ACE Data Platform × SeeDream 专属方案:小白/商家闭眼冲
人工智能·api
WebGISer_白茶乌龙桃13 小时前
FastAPI配置 了CORSMiddleware依旧跨域报错
fastapi
曲幽15 小时前
FastAPI登录验证:用OAuth2与JWT构筑你的API安全防线
python·fastapi·web·jwt·token·oauth2
朝依飞15 小时前
fastapi+SQLModel + SQLAlchemy2.x+mysql
数据库·mysql·fastapi
小北方城市网16 小时前
微服务接口设计实战指南:高可用、易维护的接口设计原则与规范
java·大数据·运维·python·微服务·fastapi·数据库架构
云和数据.ChenGuang17 小时前
fastapi flask django区别
人工智能·python·django·flask·fastapi
程序员佳佳1 天前
【万字硬核】从零构建企业级AI中台:基于Vector Engine整合GPT-5.2、Sora2与Veo3的落地实践指南
人工智能·gpt·chatgpt·ai作画·aigc·api·ai编程
崔庆才丨静觅1 天前
惊了!1句话生成带货短视频!ACE Data Platform × SeeDance 让普通人也能当“视频导演”
api
小庄梦蝶1 天前
关于fastapi使用注意点
fastapi
hudawei9961 天前
Flask 与 FastAPI 对比分析
python·flask·fastapi