一、核心流程概述
京東通過SKU獲取商品詳情需通過京東開放平臺(tái)API實(shí)現(xiàn),流程分為以下步驟:
- 注冊(cè)與權(quán)限申請(qǐng)
- 選擇合適的API接口
- 構(gòu)造請(qǐng)求參數(shù)與簽名
- 發(fā)送請(qǐng)求并解析響應(yīng)
二、詳細(xì)步驟說明
1. 注冊(cè)與權(quán)限申請(qǐng)
- 注冊(cè)賬號(hào):訪問京東開放平臺(tái),完成企業(yè)或個(gè)人開發(fā)者注冊(cè)。
- 創(chuàng)建應(yīng)用:登錄后進(jìn)入“我的應(yīng)用”,填寫應(yīng)用名稱、描述等信息,提交審核。
- 獲取密鑰:審核通過后獲得
AppKey
和AppSecret
,用于API調(diào)用身份驗(yàn)證。
2. 選擇API接口
根據(jù)需求選擇以下接口:
- 商品詳情接口:
jd.union.open.goods.query
- SKU專項(xiàng)接口:
jd.union.open.goods.skus.get
3. 構(gòu)造請(qǐng)求參數(shù)與簽名
- 必填參數(shù):
- 簽名生成步驟:
4. 發(fā)送請(qǐng)求與解析響應(yīng)
- 發(fā)送請(qǐng)求:pythonimport requestsurl = "https://api.jd.com/routerjson"response = requests.get(url, params=params)data = response.json()
- 響應(yīng)解析:成功時(shí)返回字段示例:json{ "code": "0", "result": { "skuId": "123456", "name": "商品名稱", "price": "99.90", "stock": 100 }}錯(cuò)誤碼處理(如1001表示參數(shù)缺失):pythonif data['code'] != '0': print(f"錯(cuò)誤碼: {data['code']}, 描述: {data['msg']}")
三、代碼示例(Python)
pythonimport requestsimport timeimport hashlibimport json class JDProductAPI: def __init__(self, app_key, app_secret): self.app_key = app_key self.app_secret = app_secret self.url = "https://api.jd.com/routerjson" def _sign(self, params): sorted_params = sorted(params.items(), key=lambda x: x[0]) sign_str = self.app_secret for k, v in sorted_params: sign_str += f"{k}{v}" sign_str += self.app_secret return hashlib.md5(sign_str.encode()).hexdigest().upper() def get_product_detail(self, sku_id): params = { "method": "jd.union.open.goods.query", "app_key": self.app_key, "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), "format": "json", "v": "1.0", "param_json": json.dumps({"skuIds": [sku_id]}) } params["sign"] = self._sign(params) response = requests.get(self.url, params=params) return response.json() # 使用示例if __name__ == "__main__": app_key = "YOUR_APP_KEY" app_secret = "YOUR_APP_SECRET" sku_id = "100032608854" jd_api = JDProductAPI(app_key, app_secret) result = jd_api.get_product_detail(sku_id) if result.get("code") == "0": product = result["result"]["wareInfo"] print(f"商品名稱: {product['name']}") print(f"價(jià)格: ¥{product['price']['p']}") print(f"庫(kù)存: {product['stock']['s']}件") else: print(f"請(qǐng)求失敗: {result.get('msg')}")
四、注意事項(xiàng)
- 頻率限制:默認(rèn)QPS為50次/秒,超限需申請(qǐng)?zhí)犷~或采用緩存策略。
- 數(shù)據(jù)實(shí)時(shí)性:價(jià)格和庫(kù)存數(shù)據(jù)分鐘級(jí)更新,適合實(shí)時(shí)監(jiān)控場(chǎng)景。
- 合規(guī)性:禁止爬取非官方接口,務(wù)必使用開放平臺(tái)API。
- 錯(cuò)誤處理:需捕獲HTTP錯(cuò)誤和API返回的錯(cuò)誤碼,實(shí)現(xiàn)重試機(jī)制。
通過以上步驟,可高效、合法地通過SKU獲取京東商品詳情。