在1688平台(阿里巴巴旗下的B2B批发平台)上,开发者可以通过开放API获取指定店铺的所有商品信息。这常用于数据集成、库存管理或电商分析场景。以下是一篇技术贴,我将逐步介绍实现方法,包括注册、API调用和代码示例。内容基于1688开放平台的真实API文档,确保可靠性和实用性。
一、准备工作
在调用API前,需完成以下步骤:
访问1688开放平台官网,注册开发者账号。
创建应用(Application),获取App Key和App Secret。这些是API认证的关键凭证。
注意:应用需审核通过才能正式使用API。
目标店铺的ID(shop_id)是必需的。可通过以下方式获取:
在1688店铺主页URL中提取(如:https://shop12345678.1688.com,则shop_id=12345678)。
使用1688搜索API查询店铺名称。
参考商品列表API文档。
核心API端点:/param2/1/com.alibaba.product/alibaba.product.getList,支持分页获取商品数据。
二、API调用步骤
以下是获取店铺所有商品的核心流程:
使用OAuth 2.0获取access_token(令牌)。
发送POST请求到https://gw.open.1688.com/openapi/http/1/system.oauth2/getToken,参数包括:
grant_type=client_credentials
client_id={App Key}
client_secret={App Secret}
响应中提取access_token,有效期通常为1天。
请求方法:GET
端点:https://gw.open.1688.com/openapi/param2/1/com.alibaba.product/alibaba.product.getList
必需参数:
shop_id:目标店铺ID
page_no:页码(从1开始)
page_size:每页商品数量(建议设为20-100)
access_token:上一步获取的令牌
示例请求URL:
https://gw.open.1688.com/openapi/param2/1/com.alibaba.product/alibaba.product.getList?shop_id=12345678&page_no=1&page_size=50&access_token=your_access_token
响应格式为JSON,包含:
success:布尔值,表示请求是否成功。
result:商品列表数组,每个商品包含product_id、subject(标题)、price等字段。
total_count:店铺商品总数,用于分页控制。
错误处理:检查error_code和error_message,常见错误如认证失败或参数无效。
三、完整代码示例(Python)
以下Python代码演示如何获取店铺所有商品(需安装requests库):
import requests
替换为你的凭证和店铺ID
app_key = "your_app_key"
app_secret = "your_app_secret"
shop_id = "target_shop_id" # 例如:"12345678"
步骤1:获取access_token
def get_access_token(app_key, app_secret):
token_url = "https://gw.open.1688.com/openapi/http/1/system.oauth2/getToken"
params = {
"grant_type": "client_credentials",
"client_id": app_key,
"client_secret": app_secret
}
response = requests.post(token_url, params=params)
data = response.json()
if "access_token" in data:
return data["access_token"]
else:
raise Exception(f"获取token失败: {data.get('error_message', '未知错误')}")
步骤2:分页获取所有商品
def get_all_products(shop_id, access_token):
base_url = "https://gw.open.1688.com/openapi/param2/1/com.alibaba.product/alibaba.product.getList"
page_no = 1
page_size = 50 # 每页数量
all_products = []
while True:
params = {
"shop_id": shop_id,
"page_no": page_no,
"page_size": page_size,
"access_token": access_token
}
response = requests.get(base_url, params=params)
data = response.json()
if data.get("success"):
products = data["result"].get("product_list", [])
all_products.extend(products)
total_count = data["result"].get("total_count", 0)
# 判断是否还有下一页
if page_no * page_size >= total_count:
break
page_no += 1
else:
error_msg = data.get("error_message", "API调用失败")
raise Exception(f"错误: {error_msg}, 错误码: {data.get('error_code')}")
return all_products
主函数
try:
access_token = get_access_token(app_key, app_secret)
products = get_all_products(shop_id, access_token)
print(f"成功获取店铺 {shop_id} 的所有商品,共 {len(products)} 个")
for idx, product in enumerate(products[:3]): # 示例:打印前3个商品
print(f"商品 {idx+1}: ID={product['product_id']}, 标题={product['subject']}, 价格={product['price']}")
except Exception as e:
print(f"程序出错: {str(e)}")
四、注意事项
频率限制:
1688 API有调用频率限制(如每分钟100次)。超出会导致错误,建议添加延时(如time.sleep(1))。
分页处理:
店铺商品可能成千上万,务必使用分页(page_no和page_size)。代码中已实现自动遍历所有页。
数据字段:
响应中的商品字段参考文档,常用包括product_id、subject、price、image_url等。可根据需求筛选。
错误排查:
认证失败:检查App Key/Secret是否有效或过期。
无效shop_id:确认店铺是否存在或未授权。
响应延迟:添加重试机制(如retry库)。
五、总结
通过1688的alibaba.product.getList API,开发者可以高效获取店铺所有商品数据。核心步骤包括:注册开放平台、获取店铺ID、认证授权、分页调用API和处理响应。以上代码可直接集成到电商系统中,用于自动化数据同步或分析。建议在实际使用前测试沙箱环境,并遵守1688的API使用协议。
如需进一步优化(如异步请求或数据存储),欢迎在评论区讨论!