在电商数据分析和系统集成领域,京东API提供了强大的数据获取能力。本文将详细介绍如何通过京东开放平台的API接口获取商品详情数据,包括价格信息、主图、详情图以及商品评价等核心数据。

  • item_get 获得JD商品详情
  • item_search 按关键字搜索商品
  • 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接入准备

1. 注册开发者账号

首先需要访问API开放平台注册开发者账号,完成企业或个人认证。

2. 创建应用获取密钥

在控制台创建应用后,系统会分配给你以下关键信息:

  • App Key:应用唯一标识

  • App Secret:用于签名的密钥

  • Access Token:访问令牌

python

复制

下载

# 示例配置
JD_CONFIG = {
    'app_key': 'your_app_key',
    'app_secret': 'your_app_secret',
    'access_token': 'your_access_token',
    'api_url': 'https://api.jd.com/routerjson'
}

二、获取商品基础信息

1. 商品详情API

京东的商品详情接口可以通过商品SKU ID获取基本信息。

python

复制

下载

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'
        }
    }
    
    # 构造签名
    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. 解析返回数据

成功调用后会返回JSON格式数据,包含:

  • 商品名称(sku_name)

  • 京东价(sku_price)

  • 主图URL(image_url)

  • 优惠信息(coupon_info)

三、获取商品图片数据

1. 主图获取

商品主图通常包含多张不同角度的展示图,可以从返回的image_url字段获取。

python

复制

下载

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'  # 主图标识
            })
    return images

2. 详情图获取

商品详情图需要调用专门的详情API:

python

复制

下载

def get_jd_product_desc(sku_id):
    method = 'jd.union.open.goods.bigfield.query'
    params = {
        'skuIds': sku_id,
        'fields': 'wareQD,wdesc'
    }
    # ... 构造签名和请求类似前面示例
    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

四、获取商品价格信息

京东的价格体系较为复杂,包含多种价格类型:

python

复制

下载

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': []
    }
    
    # 解析优惠券信息
    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

五、获取商品评价数据

京东评价API可以获取商品的好评率、评价数量等数据:

python

复制

下载

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:晒图
    }
    # ... 构造签名和请求
    
    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
    }

六、完整数据获取流程

python

复制

下载

def get_full_product_info(sku_id):
    # 1. 获取基础信息
    base_info = get_jd_product_detail(sku_id)
    
    # 2. 获取详情数据
    desc_images = get_jd_product_desc(sku_id)
    
    # 3. 获取评价数据
    comments = get_jd_product_comments(sku_id)
    
    # 整合所有数据
    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

七、注意事项与优化建议

  1. 频率限制:京东API有严格的调用频率限制,建议添加适当的延迟和缓存机制

  2. 错误处理:完善各种错误情况的处理逻辑

  3. 数据缓存:对不常变动的数据(如商品详情)进行本地缓存

  4. 异步处理:对于大量数据获取,考虑使用异步请求提高效率

  5. 合规使用:严格遵守京东API使用协议,不进行违规数据采集

结语

通过京东开放平台API,开发者可以合法合规地获取丰富的商品数据。本文介绍了从基础信息到价格、图片、评价等完整的数据获取流程,实际应用中可根据需求进行扩展和优化。正确使用这些API可以为价格监控、竞品分析、商品推荐等应用场景提供可靠的数据支持。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐