一、接口概览
| 接口名称 | 功能 | 适用场景 |
|---|---|---|
taobao.item_get | 获取单个商品详情(标题、价格、SKU等) | 商品详情展示、价格监控 |
taobao.item_search | 按关键字搜索商品列表 | 商品搜索、竞品分析、选品决策 |
二、接入准备
- 创建应用,获取 App Key 和 App Secret。
-
- 在控制台勾选
taobao.item_get和taobao.item_search权限。
- 在控制台勾选
-
获取访问令牌(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
}
]
}
}
四、最佳实践
-
缓存机制
- 使用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 -
分页获取全量数据
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 -
高并发优化
- 使用异步请求库(如
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/次 | 优化搜索条件减少无效调用 |
#### 六、合规与安全
- 数据使用
- 仅用于自身业务,禁止转售或用于竞对分析。
- 用户隐私
- 不得获取用户个人信息(如买家手机号、地址)。
- 频率限制
- 遵守开放平台的QPS限制,避免封号。
通过以上步骤,可快速接入淘系API并高效使用 item_get 和 item_search 接口。建议结合业务需求,设计数据缓存、错误重试和监控告警机制,确保系统稳定可靠。