在電商數(shù)據(jù)分析和系統(tǒng)集成領(lǐng)域,京東API提供了強大的數(shù)據(jù)獲取能力。本文將詳細(xì)介紹如何通過京東開放平臺的API接口獲取商品詳情數(shù)據(jù),包括價格信息、主圖、詳情圖以及商品評價等核心數(shù)據(jù)。
item_search 按關(guān)鍵字搜索商品
item_search_img 按圖搜索京東商品(拍立淘)
item_search_shop 獲得店鋪的所有商品
item_history_price 獲取商品歷史價格信息
item_recommend 獲取推薦商品列表
buyer_order_list 獲取購買到的商品訂單列表
buyer_order_datail 獲取購買到的商品訂單詳情
upload_img 上傳圖片到JD
item_review 獲得JD商品評論
cat_get 獲得jd商品分類
一、京東API接入準(zhǔn)備
1. 注冊開發(fā)者賬號
首先需要訪問API開放平臺注冊開發(fā)者賬號,完成企業(yè)或個人認(rèn)證。
2. 創(chuàng)建應(yīng)用獲取密鑰
在控制臺創(chuàng)建應(yīng)用后,系統(tǒng)會分配給你以下關(guān)鍵信息:
App Key:應(yīng)用唯一標(biāo)識
App Secret:用于簽名的密鑰
Access Token:訪問令牌
python
復(fù)制
下載
# 示例配置
JD_CONFIG = {
'app_key': 'your_app_key',
'app_secret': 'your_app_secret',
'access_token': 'your_access_token',
'api_url': 'https://api.jd.com/routerjson'
}
二、獲取商品基礎(chǔ)信息
1. 商品詳情API
京東的商品詳情接口可以通過商品SKU ID獲取基本信息。
python
復(fù)制
下載
import requests
import hashlib
import time
def get_jd_product_detail(sku_id):
method = 'jd.union.open.goods.promotiongoodsinfo.query'
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
params = {
'goodsReq': {
'skuIds': [sku_id],
'fields': 'sku_name,sku_price,image_url,coupon_info'
}
}
# 構(gòu)造簽名
sign_str = f'{JD_CONFIG["app_secret"]}access_token{JD_CONFIG["access_token"]}app_key{JD_CONFIG["app_key"]}method{method}timestamp{timestamp}v2.0{JD_CONFIG["app_secret"]}'
sign = hashlib.md5(sign_str.encode()).hexdigest().upper()
payload = {
'method': method,
'app_key': JD_CONFIG['app_key'],
'access_token': JD_CONFIG['access_token'],
'timestamp': timestamp,
'v': '2.0',
'sign': sign,
'param_json': json.dumps(params)
}
response = requests.post(JD_CONFIG['api_url'], data=payload)
return response.json()
2. 解析返回數(shù)據(jù)
成功調(diào)用后會返回JSON格式數(shù)據(jù),包含:
商品名稱(sku_name)
京東價(sku_price)
主圖URL(image_url)
優(yōu)惠信息(coupon_info)
三、獲取商品圖片數(shù)據(jù)
1. 主圖獲取
商品主圖通常包含多張不同角度的展示圖,可以從返回的image_url字段獲取。
python
復(fù)制
下載
def extract_product_images(product_data):
images = []
if 'image_info' in product_data:
image_list = product_data['image_info']['image_list']
for img in image_list:
images.append({
'url': img['url'],
'type': 'main' # 主圖標(biāo)識
})
return images
2. 詳情圖獲取
商品詳情圖需要調(diào)用專門的詳情API:
python
復(fù)制
下載
def get_jd_product_desc(sku_id):
method = 'jd.union.open.goods.bigfield.query'
params = {
'skuIds': sku_id,
'fields': 'wareQD,wdesc'
}
# ... 構(gòu)造簽名和請求類似前面示例
response = requests.post(JD_CONFIG['api_url'], data=payload)
data = response.json()
# 解析詳情圖
desc_images = []
if 'wareQD' in data:
# 使用正則提取詳情圖中的圖片URL
import re
pattern = re.compile(r'src="(https?://[^"]+\.(jpg|png|jpeg))"', re.I)
matches = pattern.finditer(data['wareQD'])
for match in matches:
desc_images.append(match.group(1))
return desc_images
四、獲取商品價格信息
京東的價格體系較為復(fù)雜,包含多種價格類型:
python
復(fù)制
下載
def parse_price_info(product_data):
price_info = {
'jd_price': product_data.get('priceInfo', {}).get('price'),
'original_price': product_data.get('priceInfo', {}).get('originPrice'),
'plus_price': product_data.get('priceInfo', {}).get('plusPrice'), # PLUS會員價
'discount': product_data.get('priceInfo', {}).get('discount'),
'coupons': []
}
# 解析優(yōu)惠券信息
if 'couponInfo' in product_data:
for coupon in product_data['couponInfo']['couponList']:
price_info['coupons'].append({
'discount': coupon['discount'],
'quota': coupon['quota'],
'time_range': f"{coupon['useStartTime']}-{coupon['useEndTime']}"
})
return price_info
五、獲取商品評價數(shù)據(jù)
京東評價API可以獲取商品的好評率、評價數(shù)量等數(shù)據(jù):
python
復(fù)制
下載
def get_jd_product_comments(sku_id, page=1, page_size=10):
method = 'jd.union.open.goods.comments.query'
params = {
'skuId': sku_id,
'pageNo': page,
'pageSize': page_size,
'type': 1 # 1:好評 2:中評 3:差評 4:曬圖
}
# ... 構(gòu)造簽名和請求
response = requests.post(JD_CONFIG['api_url'], data=payload)
data = response.json()
comments = []
if 'comments' in data:
for comment in data['comments']:
comments.append({
'user': comment['nickname'],
'content': comment['content'],
'score': comment['score'],
'time': comment['creationTime'],
'images': [img['url'] for img in comment['images']] if 'images' in comment else []
})
return {
'good_rate': data.get('goodRate'),
'total_count': data.get('commentsCount'),
'comments': comments
}
六、完整數(shù)據(jù)獲取流程
python
復(fù)制
下載
def get_full_product_info(sku_id):
# 1. 獲取基礎(chǔ)信息
base_info = get_jd_product_detail(sku_id)
# 2. 獲取詳情數(shù)據(jù)
desc_images = get_jd_product_desc(sku_id)
# 3. 獲取評價數(shù)據(jù)
comments = get_jd_product_comments(sku_id)
# 整合所有數(shù)據(jù)
full_data = {
'base_info': base_info,
'price_info': parse_price_info(base_info),
'images': {
'main_images': extract_product_images(base_info),
'desc_images': desc_images
},
'comments': comments
}
return full_data
七、注意事項與優(yōu)化建議
頻率限制:京東API有嚴(yán)格的調(diào)用頻率限制,建議添加適當(dāng)?shù)难舆t和緩存機制
錯誤處理:完善各種錯誤情況的處理邏輯
數(shù)據(jù)緩存:對不常變動的數(shù)據(jù)(如商品詳情)進(jìn)行本地緩存
異步處理:對于大量數(shù)據(jù)獲取,考慮使用異步請求提高效率
合規(guī)使用:嚴(yán)格遵守京東API使用協(xié)議,不進(jìn)行違規(guī)數(shù)據(jù)采集
結(jié)語
通過京東開放平臺API,開發(fā)者可以合法合規(guī)地獲取豐富的商品數(shù)據(jù)。本文介紹了從基礎(chǔ)信息到價格、圖片、評價等完整的數(shù)據(jù)獲取流程,實際應(yīng)用中可根據(jù)需求進(jìn)行擴展和優(yōu)化。正確使用這些API可以為價格監(jiān)控、競品分析、商品推薦等應(yīng)用場景提供可靠的數(shù)據(jù)支持。