?
在電商系統開發或數據分析場景中,有時需要批量獲取淘寶店鋪的所有商品信息。淘寶開放平臺(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 已知。
1. 基本請求參數
調用接口時,以下參數通常是必需的:
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)。
2. 生成簽名(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 值。
注意: 簽名算法是安全調用的關鍵,務必嚴格按照文檔實現。
3. 發送請求
將包含所有參數(包括計算得到的 sign)的請求發送到淘寶API的網關地址(如 https://eco.taobao.com/router/rest)。請求方式一般為 POST。
4. 處理響應
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獲取店鋪的所有商品數據,為后續的商品管理、數據分析等業務提供支持。
?
審核編輯 黃宇
-
API
+關注
關注
2文章
2444瀏覽量
66953
發布評論請先 登錄
如何通過1688開放平臺API獲取指定店鋪所有商品
調用淘寶開放平臺API獲取店鋪所有商品列表
評論