在电商系统开发或数据分析场景中,有时需要批量获取淘宝店铺的所有商品信息。淘宝开放平台(Taobao Open Platform)提供了丰富的API接口供开发者使用,其中就包含获取店铺商品的接口。本文将详细介绍如何使用这个接口。
一、接口概述
淘宝开放平台提供了 taobao.items.list.get (或其他类似名称/功能) 的API,用于查询指定卖家的商品列表。通过此接口,开发者可以获取店铺商品的详细信息,如商品ID、标题、价格、图片链接、库存状态等。
核心功能点:
按卖家(店铺)维度查询商品
支持分页获取,应对商品数量大的情况
可筛选在线状态(在售、仓库中、售罄等)
返回丰富的商品基础信息
二、准备工作
在调用API前,需要完成以下步骤:
注册淘宝开放平台账号: 访问淘宝开放平台官网,注册成为开发者。
创建应用: 登录开发者控制台,创建一个新的应用。创建成功后,系统会分配给你三个关键凭证:
App Key:应用的唯一标识。
App Secret:用于签名验证的密钥,务必保密。
Access Token:代表用户授权访问资源的令牌。获取店铺商品通常需要卖家(店铺主)授权你的应用,授权成功后即可获得此Token。具体授权流程(如OAuth 2.0)请参考开放平台文档。
查阅API文档: 在开放平台文档中心找到 获取商品列表 或功能描述相似的API文档。仔细阅读其请求地址(URL)、请求方式(GET/POST)、必需的请求参数、可选参数以及返回结果的字段说明和数据结构(通常是JSON格式)。
三、调用接口详解
假设我们已获得有效的 App Key, App Secret, Access Token,并且目标店铺的卖家 nick 或 seller_id 已知。
- 基本请求参数
调用接口时,以下参数通常是必需的:
method: API方法名,例如 taobao.item.list.get。
app_key: 你的应用 App Key。
session: 或 access_token,填写你获得的 Access Token。
timestamp: 请求发起的时间戳(格式如 yyyy-MM-dd HH:mm:ss)。
format: 响应格式,通常为 json。
v: API版本号,如 2.0。
sign_method: 签名方法,如 hmac。
fields: 指定需要返回的商品字段列表,用逗号分隔。例如:num_iid,title,price,pic_url,approve_status。请根据文档选择所需字段。
seller_id 或 nick: 指定要查询的店铺卖家的用户ID或昵称。
page_no: 当前页码(从1开始)。
page_size: 每页返回的商品数量(最大值需参照文档,通常不超过100)。
- 生成签名(Sign)
淘宝API要求对请求参数进行签名验证以防止篡改。签名生成步骤一般如下:
排序: 将所有请求参数(包括 app_key, method, timestamp 等公共参数和 seller_id, fields 等业务参数,不包括 sign 本身)按照参数名的字典序升序排列。
拼接: 将排序后的参数名和参数值用 = 连接,参数对之间用 & 连接,形成一个长字符串。例如:app_key=123&fields=num_iid,title&method=taobao.item.list.get&...。
加密: 在拼接好的字符串前面加上你的 App Secret,后面也加上你的 App Secret,然后使用指定的签名方法(如 hmac,对应算法可能是 HMAC-SHA256)进行加密。
编码: 将加密得到的字节流进行Base64编码或十六进制转换(具体看文档要求),得到最终的 sign 值。
注意: 签名算法是安全调用的关键,务必严格按照文档实现。
发送请求
将包含所有参数(包括计算得到的 sign)的请求发送到淘宝API的网关地址(如 https://eco.taobao.com/router/rest)。请求方式一般为 POST。处理响应
API会返回一个JSON格式的响应。需要关注的关键字段通常包括:
items_list_get_response: 或类似名称,表示响应的根节点。
items: 包含商品列表的数组。数组中的每个元素是一个商品对象,包含你在 fields 参数中指定的字段及其值。
total_results: 符合条件的商品总数(用于分页计算总页数)。
request_id: 请求的唯一ID,可用于排查问题。
code: 返回码。0 通常表示成功,非 0 表示错误(需根据文档查阅错误原因)。
msg: 返回消息,成功时为 null 或空字符串,失败时为错误描述。
分页处理: 如果 total_results 大于 page_size,则需要循环调用接口,递增 page_no 参数,直到获取所有商品。
四、Python 示例代码
以下是一个简化的Python示例,使用 requests 库调用API并处理分页(注意:需自行实现签名函数 generate_sign 和替换真实参数值):
import requests
import time
import hashlib
import hmac
import base64
def generate_sign(params, app_secret):
# 1. 参数排序 (按key升序)
sorted_params = sorted(params.items())
# 2. 拼接键值对 (key=value&...)
query_str = '&'.join([f'{k}={v}' for k, v in sorted_params])
# 3. 前后加Secret, 使用HMAC-SHA256加密 (示例, 具体算法看文档要求)
sign_str = app_secret + query_str + app_secret
signature = hmac.new(app_secret.encode('utf-8'), sign_str.encode('utf-8'), hashlib.sha256).digest()
# 4. Base64编码 (示例)
return base64.b64encode(signature).decode('utf-8')
你的应用信息
APP_KEY = 'your_app_key'
APP_SECRET = 'your_app_secret'
ACCESS_TOKEN = 'your_access_token'
API基础信息
API_URL = 'https://eco.taobao.com/router/rest'
METHOD = 'taobao.item.list.get' # 替换为实际API方法名
VERSION = '2.0'
请求参数 (基础 + 业务)
base_params = {
'method': METHOD,
'app_key': APP_KEY,
'session': ACCESS_TOKEN,
'timestamp': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),
'format': 'json',
'v': VERSION,
'sign_method': 'hmac', # 根据文档选择
}
business_params = {
'fields': 'num_iid,title,price,pic_url,approve_status', # 所需字段
'seller_id': 'target_seller_id', # 目标店铺卖家ID
'page_no': 1,
'page_size': 100, # 每页数量 (按文档最大值设置)
}
all_items = []
page_no = 1
total_pages = None
while True:
# 合并参数
current_params = {**base_params, **business_params, 'page_no': page_no}
# 生成签名
sign = generate_sign(current_params, APP_SECRET)
current_params['sign'] = sign
# 发送POST请求
response = requests.post(API_URL, data=current_params)
resp_data = response.json()
# 检查响应
if 'error_response' in resp_data:
code = resp_data['error_response']['code']
msg = resp_data['error_response']['msg']
print(f"API调用失败! Code: {code}, Msg: {msg}")
break
# 获取响应数据 (注意根据实际API返回结构解析, 这里假设结构)
try:
result = resp_data[f"{METHOD.replace('.', '_')}_response"] # 假设响应根节点是方法名转换
items = result.get('items', [])
total = result.get('total_results', 0)
all_items.extend(items)
# 计算总页数 (如果是第一页)
if total_pages is None:
total_pages = (total + business_params['page_size'] - 1) // business_params['page_size']
# 判断是否还有下一页
if page_no >= total_pages:
break
page_no += 1
except KeyError as e:
print(f"解析响应数据出错: {e}")
print(resp_data)
break
print(f"成功获取店铺商品总数: {len(all_items)}")
处理你的商品数据 all_items...
五、注意事项
权限与授权: 确保应用已获得卖家授权,并且应用的权限范围包含商品信息读取。
调用频率限制: 淘宝API对调用频率有严格限制(QPS),请遵守开放平台的限流规则,避免触发限流导致调用失败。需要在代码中做好流量控制(如添加延时)。
参数准确性: 严格按照文档要求传递参数,特别是 fields、seller_id 等关键参数。
签名安全: App Secret 是核心机密,不能在客户端或日志中暴露。签名算法必须正确实现。
错误处理: 代码中应包含完善的错误处理逻辑,处理网络异常、API返回错误、数据解析失败等情况。
文档更新: API接口和规则可能会更新,务必定期查阅最新的开放平台官方文档。
通过遵循上述步骤和注意事项,开发者可以稳定可靠地利用淘宝开放平台API获取店铺的所有商品数据,为后续的商品管理、数据分析等业务提供支持。