在跨境电商开发中,速卖通平台的商品数据获取是许多开发者关注的焦点。本文将详细介绍如何实现速卖通关键字搜索商品列表接口,涵盖接口请求参数分析、签名机制、分页处理及完整代码实现,帮助开发者快速对接速卖通开放平台。
一、接口基本信息
速卖通提供的关键字搜索商品列表接口(aliexpress.open.api.queryproductlistbynick)属于开放平台的基础接口,主要用于通过关键字检索商品信息。
接口特点:
- 支持多条件组合搜索(关键字、价格区间、销量排序等)
- 采用 RESTful 风格设计
- 需要通过 App Key 和 App Secret 进行身份验证
- 支持分页查询,最大页容量为 50 条
二、核心参数解析
公共参数:
app_key
:应用唯一标识sign
:API 请求签名timestamp
:请求时间戳(毫秒级)format
:响应格式(默认 JSON)v
:API 版本号(当前为 2.0)
业务参数:
keywords
:搜索关键字(必填)page_no
:页码(默认 1)page_size
:每页条数(1-50)sort_type
:排序方式(price_asc/price_desc/sales_desc)min_price
:最低价格max_price
:最高价格
三、签名机制实现
速卖通 API 采用 HMAC-MD5 签名算法,实现步骤如下:
- 将所有请求参数(包括公共参数和业务参数)按参数名 ASCII 码升序排序
- 拼接为 "参数名 = 参数值" 的键值对形式,并用 & 连接
- 在拼接字符串前后分别加上 app_secret
- 对最终字符串进行 HMAC-MD5 加密,得到签名值
四、完整代码实现
下面是使用 Python 实现的速卖通关键字搜索商品列表接口调用代码:
速卖通关键字搜索商品列表接口实现
import requests
import time
import hashlib
import hmac
import urllib.parse
from typing import Dict, List, Optionalclass AliexpressAPI:def __init__(self, app_key: str, app_secret: str):self.app_key = app_keyself.app_secret = app_secretself.api_url = "https://gw.api.alibaba.com/openapi/param2/2.0/aliexpress.open.api.queryproductlistbynick"def _generate_sign(self, params: Dict[str, str]) -> str:"""生成API请求签名"""# 按参数名ASCII升序排序sorted_params = sorted(params.items(), key=lambda x: x[0])# 拼接参数query_string = "&".join([f"{k}={urllib.parse.quote(str(v), safe='')}" for k, v in sorted_params])# 计算签名sign_str = self.app_secret + query_string + self.app_secretsignature = hmac.new(self.app_secret.encode('utf-8'),sign_str.encode('utf-8'),hashlib.md5).hexdigest().upper()return signaturedef search_products(self, keywords: str,page_no: int = 1,page_size: int = 20,sort_type: Optional[str] = None,min_price: Optional[float] = None,max_price: Optional[float] = None) -> Dict:"""搜索速卖通商品参数:keywords: 搜索关键字page_no: 页码page_size: 每页条数sort_type: 排序方式(price_asc/price_desc/sales_desc)min_price: 最低价格max_price: 最高价格返回:商品列表数据"""# 公共参数params = {"app_key": self.app_key,"timestamp": str(int(time.time() * 1000)),"format": "json","v": "2.0","method": "aliexpress.open.api.queryproductlistbynick","keywords": keywords,"page_no": str(page_no),"page_size": str(page_size)}# 添加可选参数if sort_type:params["sort_type"] = sort_typeif min_price:params["min_price"] = str(min_price)if max_price:params["max_price"] = str(max_price)# 生成签名params["sign"] = self._generate_sign(params)try:# 发送请求response = requests.get(self.api_url, params=params, timeout=10)response.raise_for_status() # 抛出HTTP错误return response.json()except requests.exceptions.RequestException as e:print(f"请求错误: {str(e)}")return {"error": str(e)}# 使用示例
if __name__ == "__main__":# 替换为你的app_key和app_secretAPP_KEY = "your_app_key"APP_SECRET = "your_app_secret"# 初始化API客户端api = AliexpressAPI(APP_KEY, APP_SECRET)# 搜索商品result = api.search_products(keywords="smartphone",page_no=1,page_size=20,sort_type="sales_desc",min_price=10.0,max_price=100.0)# 处理结果if "error" not in result:print(f"搜索到 {result.get('total_results', 0)} 个商品")for item in result.get("products", []):print(f"标题: {item.get('title')}")print(f"价格: {item.get('price')}")print(f"销量: {item.get('sales')}")print("---")else:print(f"搜索失败: {result['error']}")
五、代码解析
类结构设计:
AliexpressAPI
类封装了所有 API 调用相关方法- 构造函数接收
app_key
和app_secret
进行初始化
签名生成:
_generate_sign
方法实现了完整的签名生成逻辑- 使用
urllib.parse.quote
处理特殊字符,确保签名准确性
搜索方法:
search_products
方法封装了完整的搜索逻辑- 支持多种可选参数,满足不同搜索需求
- 包含异常处理,提高代码健壮性
使用示例:
- 演示了如何初始化客户端并进行商品搜索
- 展示了如何解析和处理返回结果
六、注意事项
- 接口调用频率限制:速卖通开放平台对 API 调用有频率限制,默认每分钟不超过 60 次
- 权限申请:部分高级筛选条件需要额外申请权限
- 错误处理:实际开发中应根据返回的错误码进行针对性处理
- 安全性:app_secret 应妥善保管,避免泄露
七、扩展建议
- 可以封装更多 API 接口,如商品详情、店铺信息等
- 实现请求缓存机制,减少重复请求
- 添加代理 IP 支持,应对 IP 限制问题
- 实现请求重试机制,提高接口稳定性
通过本文介绍的方法,开发者可以快速实现速卖通关键字搜索商品列表接口的调用,为跨境电商相关应用开发提供数据支持。在实际使用中,需遵守速卖通开放平台的使用规范,合理获取和使用商品数据。