API 淘系接入说明||item_get 获得淘宝商品详情item_search 按关键字搜索商品

70 阅读3分钟

一、接口概览

接口名称功能适用场景
taobao.item_get获取单个商品详情(标题、价格、SKU等)商品详情展示、价格监控
taobao.item_search按关键字搜索商品列表商品搜索、竞品分析、选品决策

二、接入准备

  • 创建应用,获取 App KeyApp Secret
  1. 申请API权限

    • 在控制台勾选 taobao.item_gettaobao.item_search 权限。
  2. 获取访问令牌(Access Token)

    • 通过OAuth 2.0授权流程获取,用于接口调用身份验证。

三、接口调用详解

1. item_get 获取商品详情

请求参数

参数名必填说明
num_iid商品ID(如 633123456789
fields指定返回字段(默认返回全部)

代码示例(Python)

import requests
import hashlib
import time

def item_get(num_iid, app_key, app_secret):
    url = "https://api.taobao.com/router/rest"
    timestamp = str(int(time.time() * 1000))  # 13位时间戳
    
    params = {
        "method": "taobao.item.get",
        "app_key": app_key,
        "num_iid": num_iid,
        "fields": "num_iid,title,price,pic_url,sku",
        "timestamp": timestamp,
        "sign_method": "md5",
        "v": "2.0"
    }
    
    # 生成签名
    param_str = "&".join([f"{k}{v}" for k, v in sorted(params.items())])
    sign = hashlib.md5(f"{app_secret}{param_str}{app_secret}".encode()).hexdigest().upper()
    params["sign"] = sign
    
    response = requests.get(url, params=params)
    return response.json()

# 调用示例
app_key = "your_app_key"
app_secret = "your_app_secret"
item_data = item_get("633123456789", app_key, app_secret)
print(item_data)

响应数据结构

{
  "item": {
    "num_iid": "633123456789",
    "title": "夏季男士短袖T恤",
    "price": "89.00",
    "pic_url": "https://img.alicdn.com/imgextra/i1/123/O1CN01aBcDfg1.jpg",
    "sku": [
      {
        "sku_id": "12345",
        "price": "79.00",
        "properties": "颜色:黑色;尺码:XL",
        "quantity": 100
      }
    ]
  }
}

2. item_search 关键字搜索商品

请求参数

参数名必填说明
q搜索关键词(如“手机”)
page_no页码(默认1)
page_size每页数量(默认20,最大100)
sort排序方式(如 price_asc

代码示例(Python)

def item_search(q, app_key, app_secret, page=1):
    url = "https://api.taobao.com/router/rest"
    timestamp = str(int(time.time() * 1000))
    
    params = {
        "method": "taobao.item.search",
        "app_key": app_key,
        "q": q,
        "page_no": page,
        "timestamp": timestamp,
        "sign_method": "md5",
        "v": "2.0"
    }
    
    # 生成签名(同item_get逻辑)
    param_str = "&".join([f"{k}{v}" for k, v in sorted(params.items())])
    sign = hashlib.md5(f"{app_secret}{param_str}{app_secret}".encode()).hexdigest().upper()
    params["sign"] = sign
    
    response = requests.get(url, params=params)
    return response.json()

# 调用示例
search_result = item_search("蓝牙耳机", app_key, app_secret)
print(search_result)

响应数据结构

{
  "items": {
    "total_results": 1500,
    "item": [
      {
        "num_iid": "633123456789",
        "title": "无线蓝牙耳机",
        "price": "199.00",
        "pic_url": "https://img.alicdn.com/imgextra/i1/456/O1CN01bCdEfg2.jpg",
        "sales": 5000
      }
    ]
  }
}

四、最佳实践

  1. 缓存机制

    • 使用Redis缓存商品详情(有效期30分钟),减少API调用。
    import redis
    r = redis.Redis()
    
    def get_cached_item(num_iid):
        cache_key = f"item:{num_iid}"
        cached = r.get(cache_key)
        if cached:
            return json.loads(cached)
        else:
            data = item_get(num_iid, app_key, app_secret)
            r.setex(cache_key, 1800, json.dumps(data))  # 缓存30分钟
            return data
    
  2. 分页获取全量数据

    def fetch_all_items(q):
        all_items = []
        page = 1
        while True:
            result = item_search(q, app_key, app_secret, page)
            items = result.get('items', {}).get('item', [])
            if not items:
                break
            all_items.extend(items)
            page += 1
        return all_items
    
  3. 高并发优化

    • 使用异步请求库(如 aiohttp + asyncio)提升效率。
    import aiohttp
    import asyncio
    
    async def async_item_get(session, num_iid):
        url = "https://api.taobao.com/router/rest"
        params = { ... }  # 构造参数
        async with session.get(url, params=params) as response:
            return await response.json()
    
    async def main():
        async with aiohttp.ClientSession() as session:
            tasks = [async_item_get(session, num_iid) for num_iid in item_ids]
            results = await asyncio.gather(*tasks)
            return results
    

五、成本与计费

接口计费方式单价建议
item_get按调用次数¥0.01/次购买资源包(如¥980/50万次)
item_search按调用次数¥0.02/次优化搜索条件减少无效调用

#### 、合规与安全

  1. 数据使用
    • 仅用于自身业务,禁止转售或用于竞对分析。
  2. 用户隐私
    • 不得获取用户个人信息(如买家手机号、地址)。
  3. 频率限制
    • 遵守开放平台的QPS限制,避免封号。

通过以上步骤,可快速接入淘系API并高效使用 item_getitem_search 接口。建议结合业务需求,设计数据缓存、错误重试和监控告警机制,确保系统稳定可靠。