在跨境電商開發中,速賣通平臺的商品數據獲取是許多開發者關注的焦點。本文將詳細介紹如何實現速賣通關鍵字搜索商品列表接口,涵蓋接口請求參數分析、簽名機制、分頁處理及完整代碼實現,幫助開發者快速對接速賣通開放平臺。
一、接口基本信息
速賣通提供的關鍵字搜索商品列表接口(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 限制問題
- 實現請求重試機制,提高接口穩定性
通過本文介紹的方法,開發者可以快速實現速賣通關鍵字搜索商品列表接口的調用,為跨境電商相關應用開發提供數據支持。在實際使用中,需遵守速賣通開放平臺的使用規范,合理獲取和使用商品數據。