场景需求: 在开发电商ERP、数据采集工具或竞品分析系统时,经常需要获取1688平台上某个店铺的全部商品信息(如标题、价格、SKU、库存等)。本文将介绍如何通过1688开放平台提供的官方API实现这一功能。
一、核心接口:alibaba.product.getSellerProductList
这是1688开放平台提供的用于获取卖家商品列表的API。通过合理配置请求参数和分页处理,即可获取全量商品数据。
接口地址: https://api.1688.com/router/rest
请求方式: POST
数据格式: application/x-www-form-urlencoded
二、关键实现步骤
- 准备环境
注册1688开放平台账号,创建应用并获取 appKey 和 appSecret。
引导卖家完成授权,获取店铺的 access_token(需 seller_view 权限)。 基础请求参数
base_params = {
'method': 'alibaba.product.getSellerProductList',
'app_key': 'YOUR_APP_KEY',
'access_token': 'SELLER_ACCESS_TOKEN',
'timestamp': str(int(time.time() * 1000)), # 毫秒时间戳
'format': 'json',
'v': '2.0',
'sign_method': 'md5'
}分页控制参数
page_no: 当前页码(从1开始)
page_size: 每页条数(建议不超过50)示例:请求第2页,每页30条
page_params = {
'page_no': 2,
'page_size': 30
}- 签名生成
所有参数需按字母序排序后拼接,加上 appSecret 进行MD5签名:
def generate_sign(params, app_secret):
param_str = '&'.join([f'{k}{v}' for k, v in sorted(params.items())])
full_str = f'{app_secret}{param_str}{app_secret}'
return hashlib.md5(full_str.encode()).hexdigest().upper()
三、完整请求示例(Python)
import requests
import time
import hashlib
def fetch_all_products(app_key, app_secret, access_token, max_page=50):
all_products = []
page_no = 1
while page_no <= max_page:
# 1. 构造基础参数
params = {
'method': 'alibaba.product.getSellerProductList',
'app_key': app_key,
'access_token': access_token,
'timestamp': str(int(time.time() * 1000)),
'format': 'json',
'v': '2.0',
'sign_method': 'md5',
'page_no': page_no,
'page_size': 50
}
# 2. 生成签名
params['sign'] = generate_sign(params, app_secret)
# 3. 发送请求
resp = requests.post('https://api.1688.com/router/rest', data=params)
data = resp.json()
# 4. 处理异常
if 'error' in data:
print(f"Error: {data['error']['msg']} (Code: {data['error']['code']})")
break
# 5. 存储当前页商品
products = data['result']['productInfos']['productInfo']
all_products.extend(products)
# 6. 分页终止判断
if len(products) < params['page_size']:
break
page_no += 1
time.sleep(0.5) # 避免请求过频
return all_products
四、响应数据结构解析
成功响应示例:
{
"result": {
"productInfos": {
"productInfo": [
{
"productId": 1234567890,
"subject": "商品标题",
"price": "99.00",
"unit": "件",
"status": "published"
},
// ... 其他商品
]
},
"totalCount": 120 // 店铺商品总数
}
}
五、注意事项
频率限制:单个应用默认每秒10次请求,需根据 totalCount 控制分页节奏。
字段覆盖:若需获取详情(如描述、SKU),需二次调用 alibaba.product.get 接口。
授权有效期:access_token 有效期通常为30天,需实现刷新机制。
错误码处理:
isv.missing-parameter: 参数缺失
isv.invalid-access-token: 令牌失效
isp.api-qps-limit: 请求超频
六、优化建议
异步抓取:使用生产者-消费者模型提升采集效率。
本地缓存:存储 productId 避免重复获取详情。
增量同步:通过 modify_stamp 参数仅拉取变更商品。
通过上述实现,可稳定获取店铺商品数据。建议详细阅读1688API文档,根据业务需求扩展字段处理逻辑。