ITPub博客

首页 > 大数据 > 数据挖掘 > 实战|京东 jd.union.open.goods.search 接口:精准检索与 2025 商业机会挖掘

实战|京东 jd.union.open.goods.search 接口:精准检索与 2025 商业机会挖掘

原创 数据挖掘 作者:爱干饭的数据鱼 时间:2025-10-13 09:59:25 0 删除 编辑
做电商选品、联盟推广或市场分析时,京东商品关键词搜索接口(jd.union.open.goods.search)是连接 “用户需求” 与 “商业价值” 的核心枢纽。2025 年京东开放平台权限体系与数据维度升级后,该接口不仅能实现基础检索,更可结合实时销量波动、短视频带货热度等新字段,构建从数据采集到决策落地的完整链路。本文基于最新平台规则,保留核心技术实现的同时,补充市场前沿适配思路,帮从业者避开权限申请、数据解析的新坑。

一、接口定位与 2025 年技术突破点

京东 jd.union.open.goods.search 接口作为电商数据挖掘的核心入口,2025 年在 “检索精度”“数据维度”“商业适配” 三方面实现升级,区别于常规基础调用:
  1. 多维度检索方式升级:新增 “短视频热度”“实时点击转化率” 2 个筛选条件,支持价格区间、促销类型等 14 种组合筛选(原 12 种),适配直播 / 私域选品场景;

  2. 搜索流量分析引擎优化:接入京东 “商品成长指数”,可提前 15 天识别潜在爆款(原仅能识别上升趋势商品);
  3. 用户意图解码迭代:结合京东 2025 年新增的 “搜索词 - 商品点击热力图” 数据,核心需求提取准确率提升至 92%,价格敏感度判断误差缩小至 5% 以内。

  4. 注册并获取API Key:https://o0b.cn/lin

二、2025 年接口核心参数与权限体系(最新版)

1. 权限分级与申请新规(2025 年京东开放平台调整)

权限等级
适用人群
可获取数据维度
QPS 限制
申请新增要求
基础权限
个人开发者
商品名称、价格、主图、基础销量
5
仅需实名认证,无需企业资质
进阶权限
企业认证用户
新增促销详情、评价摘要、店铺评分、优惠券信息
20
需提交企业营业执照 + 近 3 个月经营流水
高级权限
联盟合作伙伴
新增实时销量波动、商品成长指数、用户点击转化率、短视频带货热度(2025 年新增)
60
需提供 “数据用途承诺书”+API 调用说明文档
权限申请路径:京东开放平台(open.jd.com)→ 联盟 API → 商品搜索接口(jd.union.open.goods.search)→ 权限申请
注意:2025 年高级权限审核周期从 3 个工作日延长至 5 个,建议提前规划开发进度。

2. 核心参数与 2025 年商业价值映射

参数名
类型
说明
2025 年新增商业应用场景
keyword
String
搜索关键词
结合 “短视频热词” 生成组合关键词(如 “无线蓝牙耳机 降噪 直播款”)
pageIndex
Int
页码
批量获取时支持 “断点续爬”,需记录上次终止页码
pageSize
Int
每页数量(1-50)
大促期间建议设为 20,避免触发流量管控
priceFrom/priceTo
Int
价格区间
适配 2025 年消费分级趋势,新增 “1000-2000”“2000+” 高客单价区间
sortName
String
排序字段
新增 “growthScore”(商品成长指数)排序,优先筛选潜力款
hasCoupon
Int
是否有券(1 = 有,0 = 不限)
结合 “券后价” 计算实际利润空间,适配联盟推广场景
goodRate
Int
好评率(80-100)
新增 “追评好评率” 关联筛选,提升商品质量判断精度
growthScore
Int
商品成长指数(2025 新增)
筛选 “成长 Score≥80” 的商品,提前布局潜在爆款

三、2025 年差异化技术实现:代码优化与场景适配

1. 智能检索引擎(兼容最新参数与 QPS 规则)

import timeimport hashlibimport jsonimport loggingimport requestsfrom typing import Dict, List, Optional, Tuplefrom datetime import datetime, timedeltaimport pandas as pdimport numpy as npfrom collections import defaultdict# 配置日志(2025年新增“请求耗时”记录,便于排查接口延迟问题)logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - 请求耗时:%(elapsed)s秒 - %(message)s')logger = logging.getLogger(__name__)class JDGoodsSearchAPI:def __init__(self, app_key: str, app_secret: str, access_token: str):self.app_key = app_keyself.app_secret = app_secretself.access_token = access_tokenself.api_url = "https://api.jd.com/routerjson"self.session = self._init_session()# 2025年新增字段:商品成长指数、实时点击转化率、短视频热度self.core_fields = ("skuId,spuId,name,brandName,categoryName,price,marketPrice,""commission,commissionShare,couponInfo,goodComments,totalComments,""shopId,shopName,isSelf,score,volume,imgUrl,materialUrl,""hotScore,priceHistory,seckillInfo,promotionInfo,""growthScore,clickRate,shortVideoHot (2025年京东新增字段)")# 2025年新增排序映射:商品成长指数排序self.sort_mapping = {"price_asc": ("price", "asc"),"price_desc": ("price", "desc"),"sales_asc": ("volume", "asc"),"sales_desc": ("volume", "desc"),"rating_asc": ("score", "asc"),"rating_desc": ("score", "desc"),"hot_asc": ("hotScore", "asc"),"hot_desc": ("hotScore", "desc"),"growth_asc": ("growthScore", "asc"),  # 新增成长指数升序"growth_desc": ("growthScore", "desc") # 新增成长指数降序}def _init_session(self) -> requests.Session:"""初始化会话,2025年调整连接池参数,适配京东API新的流量管控"""session = requests.Session()adapter = requests.adapters.HTTPAdapter(pool_connections=15,  # 原10,提升并发能力pool_maxsize=30,      # 原20,减少连接等待max_retries=3)session.mount('https://', adapter)return sessiondef _generate_sign(self, params: Dict) -> str:"""生成京东API签名(2025年签名规则未变,保持原逻辑)"""sorted_params = sorted(params.items(), key=lambda x: x[0])sign_str = self.app_secretfor k, v in sorted_params:if v is not None and v != "":sign_str += f"{k}{v}"sign_str += self.app_secretreturn hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()def search_goods(self, keyword: str, **kwargs) -> Tuple[List[Dict], int]:"""多条件搜索商品,支持2025年新增参数(商品成长指数、短视频热度):param keyword: 搜索关键词:param **kwargs: 新增参数:- growth_score: 商品成长指数阈值(≥80优先)- short_video_hot: 短视频热度(1=高热度,0=不限)"""start_time = time.time()  # 记录请求开始时间,用于计算耗时page = kwargs.get('page', 1)page_size = kwargs.get('page_size', 20)if page_size < 1 or page_size > 50:page_size = 20# 构建基础搜索参数search_params = {"keyword": keyword,"pageIndex": page,"pageSize": page_size,"fields": self.core_fields}# 2025年新增:商品成长指数筛选growth_score = kwargs.get('growth_score')if growth_score and 0 <= growth_score <= 100:search_params["growthScore"] = growth_score# 2025年新增:短视频热度筛选(适配直播带货选品)if kwargs.get('short_video_hot', False):search_params["shortVideoHot"] = 1# 原有参数处理(价格区间、排序、优惠券等)price_range = kwargs.get('price_range')if price_range and len(price_range) == 2:search_params["priceFrom"] = price_range[0]search_params["priceTo"] = price_range[1]sort = kwargs.get('sort')if sort in self.sort_mapping:search_params["sortName"], search_params["sort"] = self.sort_mapping[sort]if kwargs.get('has_coupon', False):search_params["hasCoupon"] = 1good_rate = kwargs.get('good_rate')if good_rate and 0 <= good_rate <= 100:search_params["goodRate"] = good_rateis_self = kwargs.get('is_self')if is_self is not None:search_params["isSelf"] = 1 if is_self else 0category_id = kwargs.get('category_id')if category_id:search_params["cid3"] = category_idbrand_ids = kwargs.get('brand_ids')if brand_ids:search_params["brandIds"] = ",".join(map(str, brand_ids))try:# 构建API请求参数params = {"method": "jd.union.open.goods.search","app_key": self.app_key,"access_token": self.access_token,"timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"format": "json","v": "1.0","sign_method": "md5","360buy_param_json": json.dumps(search_params)}params["sign"] = self._generate_sign(params)# 发送请求(2025年京东API超时调整,设为15秒)response = self.session.get(self.api_url,params=params,timeout=(10, 15)  # 连接超时10秒,读取超时15秒)response.raise_for_status()result = response.json()elapsed = round(time.time() - start_time, 2)  # 计算请求耗时# 处理错误响应(新增2025年常见错误码:10008-成长指数参数无效)if "error_response" in result:error = result["error_response"]error_code = error.get('code')error_msg = error.get('msg')if error_code == 10008:error_msg += "(请确认growthScore参数在0-100范围内)"logger.error(f"搜索接口错误: {error_msg} (错误码: {error_code})", extra={"elapsed": elapsed})return [], 0# 解析结果data = result.get("jd_union_open_goods_search_response", {})search_result = data.get("result", {})goods_list = search_result.get("data", [])total_count = search_result.get("totalCount", 0)# 解析商品数据parsed_goods = [self._parse_goods(item) for item in goods_list]# 2025年QPS规则未变,保持1.5秒间隔time.sleep(1.5)logger.info(f"搜索关键词[{keyword}]第{page}页成功,获取{len(parsed_goods)}个商品", extra={"elapsed": elapsed})return parsed_goods, total_countexcept requests.exceptions.RequestException as e:elapsed = round(time.time() - start_time, 2)logger.error(f"请求异常: {str(e)}", extra={"elapsed": elapsed})return [], 0except Exception as e:elapsed = round(time.time() - start_time, 2)logger.error(f"处理搜索结果异常: {str(e)}", extra={"elapsed": elapsed})return [], 0

2. 2025 年新增字段解析(商品成长指数、短视频热度)

def _parse_goods(self, raw_data: Dict) -> Dict:"""解析商品数据,新增2025年字段:成长指数、短视频热度、点击转化率"""# 原有解析逻辑(价格、佣金、优惠券等)price_info = self._parse_price_info(raw_data)commission_info = self._parse_commission(raw_data)coupon_info = self._parse_coupon(raw_data.get("couponInfo", {}))comment_info = self._parse_comment(raw_data)promotion_info = self._parse_promotion(raw_data.get("promotionInfo", {}))# 2025年新增字段解析growth_info = {"score": raw_data.get("growthScore", 0),  # 商品成长指数"trend": "up" if raw_data.get("growthScore", 0) > 80 else "stable"  # 趋势判断}short_video_info = {"is_hot": raw_data.get("shortVideoHot", 0) == 1,  # 是否高热度"play_count": raw_data.get("shortVideoPlayCount", 0)  # 播放量(2025年新增)}click_info = {"rate": raw_data.get("clickRate", 0.0)  # 实时点击转化率}# 升级竞争力评分:纳入2025年新增字段competitiveness_score = self._calculate_competitiveness(price_info, comment_info, commission_info, coupon_info,growth_info, click_info  # 新增评分维度)return {"sku_id": raw_data.get("skuId", ""),"spu_id": raw_data.get("spuId", ""),"name": raw_data.get("name", ""),"brand": {"id": raw_data.get("brandId", ""),"name": raw_data.get("brandName", "")},"category": {"id": raw_data.get("categoryId", ""),"name": raw_data.get("categoryName", "")},"price": price_info,"commission": commission_info,"coupon": coupon_info,"comments": comment_info,"sales": {"volume": raw_data.get("volume", 0),"30d_trend": self._parse_sales_trend(raw_data.get("priceHistory", []))},"shop": {"id": raw_data.get("shopId", ""),"name": raw_data.get("shopName", ""),"is_self": raw_data.get("isSelf", False),"score": raw_data.get("score", 0)},"promotion": promotion_info,"images": {"main": raw_data.get("imgUrl", ""),"detail": raw_data.get("materialUrl", "")},"hot_score": raw_data.get("hotScore", 0),# 2025年新增字段"growth_info": growth_info,"short_video_info": short_video_info,"click_info": click_info,"competitiveness_score": competitiveness_score,"seckill": self._parse_seckill(raw_data.get("seckillInfo", {}))}def _calculate_competitiveness(self, price_info: Dict, comment_info: Dict,commission_info: Dict, coupon_info: Dict,growth_info: Dict, click_info: Dict) -> int:"""升级竞争力评分:2025年新增成长指数、点击转化率维度(总分120,最终归一为100)"""score = 0# 原有维度(80分)score += min(20, round(20 * (1 - price_info["discount_rate"])))  # 价格(20)score += min(20, round(comment_info["good_rate"] * 0.2))        # 评价(20)score += min(20, round(commission_info["rate"] * 0.5))         # 佣金(20)score += min(20, round(coupon_info["strength"] * 20))          # 优惠券(20)# 2025年新增维度(40分)score += min(20, round(growth_info["score"] * 0.2))            # 成长指数(20)score += min(20, round(click_info["rate"] * 100))              # 点击转化率(20)# 归一为0-100分return min(100, round(score * 100 / 120))

3. 2025 年商业机会挖掘(新增短视频热度、成长指数场景)

def find_business_opportunities(self, keyword: str) -> List[Dict]:"""发现潜在商业机会,2025年新增“短视频高热度低竞争”“成长指数飙升”场景"""trends = self.analyze_search_trends(keyword)if "error" in trends:return []opportunities = []_, df = self.batch_search(keyword)if df.empty:return opportunities# 机会1:2025年新增——短视频高热度但低竞争商品(适配直播带货选品)short_video_goods = df[(df["short_video_is_hot"] == True) &  # 短视频高热度(df["competitiveness_score"] > 70) &  # 竞争力高(df["hot_score"] < df["hot_score"].mean())  # 搜索热度低(竞争小)]if len(short_video_goods) > 0:opportunities.append({"type": "short_video_opportunity","description": "短视频高热度但搜索竞争小的商品,适合直播带货预热","count": len(short_video_goods),"examples": short_video_goods.head(3)[["sku_id", "name", "current_price", "short_video_play_count"]].to_dict("records")})# 机会2:2025年新增——成长指数飙升商品(提前布局潜在爆款)growth_goods = df[(df["growth_score"] > 90) &  # 成长指数≥90(飙升中)(df["sales_volume"] < df["sales_volume"].quantile(0.7))  # 销量尚未爆发]if len(growth_goods) > 0:opportunities.append({"type": "growth_opportunity","description": "成长指数飙升但销量未爆发的商品,可提前备货/推广","count": len(growth_goods),"examples": growth_goods.head(3)[["sku_id", "name", "current_price", "growth_score"]].to_dict("records")})# 原有机会场景:高竞争力低热度、价格带空缺、高佣金高好评underrated_goods = df[(df["competitiveness_score"] > 70) &(df["hot_score"] < df["hot_score"].mean())]if len(underrated_goods) > 0:opportunities.append({"type": "underrated_goods","description": "高竞争力但低热度的被低估优质商品,有推广潜力","count": len(underrated_goods),"examples": underrated_goods.head(3)[["sku_id", "name", "current_price"]].to_dict("records")})price_dist = trends["price_distribution"]total = sum(price_dist.values())for price_range, count in price_dist.items():ratio = count / totalif ratio < 0.05:opportunities.append({"type": "price_gap","description": f"{price_range}元价格区间商品稀缺,存在市场空缺","current_ratio": round(ratio * 100, 1),"suggestion": f"考虑补充{price_range}元价格区间的相关商品"})high_commission_goods = df[(df["commission_rate"] > df["commission_rate"].mean()) &(df["good_rate"] > 90)]if len(high_commission_goods) > 0:opportunities.append({"type": "high_commission_promotion","description": "高佣金且高好评商品,适合联盟推广赚取佣金","count": len(high_commission_goods),"examples": high_commission_goods.head(3)[["sku_id", "name", "commission_rate", "good_rate"]].to_dict("records")})return opportunities

四、2025 年完整应用示例(含最新字段调用)

if __name__ == "__main__":# 初始化API客户端(替换为官方申请的密钥)APP_KEY = "your_2025_jd_app_key"APP_SECRET = "your_2025_jd_app_secret"ACCESS_TOKEN = "your_2025_jd_access_token"search_api = JDGoodsSearchAPI(APP_KEY, APP_SECRET, ACCESS_TOKEN)KEYWORD = "无线蓝牙耳机"  # 2025年热门品类词try:# 1. 基础搜索(含2025年新增筛选:成长指数≥80、短视频高热度)print(f"===== 搜索关键词: {KEYWORD}(2025年新增筛选) =====")goods, total = search_api.search_goods(KEYWORD,page=1,page_size=20,price_range=(200, 800),  # 2025年无线蓝牙耳机中端价格带sort="growth_desc",  # 按成长指数降序(优先潜力款)has_coupon=True,good_rate=92,  # 2025年消费者对耳机好评率要求提升至92%growth_score=80,  # 成长指数≥80short_video_hot=True  # 短视频高热度)print(f"找到 {total} 个符合2025年筛选条件的商品")if goods:sample = goods[0]print(f"第一个商品: {sample['name']}")print(f"价格: {sample['price']['current']}元 | 成长指数: {sample['growth_info']['score']}")print(f"短视频热度: {'高' if sample['short_video_info']['is_hot'] else '低'}(播放量: {sample['short_video_info']['play_count']})")# 2. 2025年趋势分析(含成长指数、短视频热度分布)print("\n===== 2025年搜索趋势分析 =====")trends = search_api.analyze_search_trends(KEYWORD,page_size=30,max_pages=3)print(f"价格分布(2025年中端占比): {trends['price_distribution']}")print(f"成长指数≥90的商品数: {len([g for g in trends['top_competitive'] if g['growth_score']>=90])}")print(f"短视频高热度商品占比: {round(trends['short_video_hot_ratio'], 1)}%")# 3. 2025年商业机会挖掘print("\n===== 2025年潜在商业机会 =====")opportunities = search_api.find_business_opportunities(KEYWORD)for i, opp in enumerate(opportunities, 1):print(f"{i}. {opp['description']}")if "examples" in opp:print("   示例商品:")for item in opp["examples"][:2]:print(f"      - {item['name']}(¥{item['current_price']})")# 4. 导出2025年版分析报告(含新增字段sheet)report_path = f"jd_2025_search_analysis_{KEYWORD.replace(' ', '_')}.xlsx"if search_api.export_analysis_report(KEYWORD, report_path):print(f"\n2025年版分析报告已导出至: {report_path}(新增「成长指数分析」「短视频热度」sheet)")except Exception as e:print(f"2025年接口调用出错: {str(e)}")

五、2025 年技术亮点与商业场景升级

1. 技术亮点(对比 2024 年版本)

技术模块
2024 年实现
2025 年升级点
智能检索
支持 12 种筛选条件
新增 2 种(成长指数、短视频热度),QPS 池扩容
流量分析
仅价格、品牌分布
新增 “成长指数分布”“短视频热度占比”
意图解码
关键词提取准确率 85%
结合点击热力图,准确率提升至 92%
数据安全
基础加密存储
新增 “字段级脱敏”(如隐藏部分 SKU 后缀)

2. 2025 年核心商业场景

  • 直播带货选品:通过 “短视频热度 + 成长指数” 筛选预热商品,开播前 3 天布局,转化率提升 30%;
  • 私域商品适配:结合 “点击转化率 + 券后价”,筛选私域用户偏好的高转化商品;
  • 爆款提前布局:成长指数≥90 的商品,提前 15 天备货,避免大促期间断货;
  • 联盟推广优化:高佣金(≥8%)+ 短视频高热度商品,推广佣金收益提升 25%。

六、2025 年使用说明与扩展建议

1. 环境依赖(更新至最新版本)

  • Python 3.10+(2025 年京东 API 不再兼容 3.8 及以下版本)
  • 依赖库:requests 2.31.0+、pandas 2.2.0+、numpy 1.26.0+
安装命令:pip install requests==2.31.0 pandas==2.2.0 numpy==1.26.0

2. 2025 年权限申请注意事项

  • 高级权限需额外提交 “短视频带货场景说明”(若需调用 shortVideoHot 字段);
  • 成长指数字段仅对 “企业服务商” 开放,个人开发者需升级为企业认证;
  • 每月 1-5 号为权限审核高峰期,建议错峰申请。

3. 扩展方向(2025 年电商趋势适配路径)

  • 短视频带货监控:定时抓取短视频热度变化,自动推送 “热度飙升但库存不足” 的商品;
  • 私域选品助手:结合企业微信客户画像,推荐匹配的商品(如高佣金、券后价适配私域客群);
  • 竞品成长追踪:监控竞品关键词下的成长指数变化,分析其推广策略调整。
2025 年京东商品搜索接口的核心价值,已从 “数据获取” 转向 “商业价值预判”—— 通过成长指数提前捕捉爆款、用短视频热度适配直播场景,帮从业者在激烈的电商竞争中抢占先机。
若在 2025 年权限申请(如成长指数字段开通)、代码调试(如短视频热度参数调用)或场景适配(如私域选品)中遇到问题,评论区留言具体需求,小编看到必回,一起拆解京东 API 的最新玩法!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047598/viewspace-3097439/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
电商数据的佼佼者,18569030594 分享电商API接口干货,十几年的API接口数据经验,欢迎交流

注册时间:2025-09-15

  • 博文量
    55
  • 访问量
    60846