做電商選品、聯盟推廣或市場分析時,京東商品關鍵詞搜索接口(jd.union.open.goods.search)是連接 “用戶需求” 與 “商業價值” 的核心樞紐。2025 年京東開放平臺權限體系與數據維度升級后,該接口不僅能實現基礎檢索,更可結合實時銷量波動、短視頻帶貨熱度等新字段,構建從數據采集到決策落地的完整鏈路。本文基于最新平臺規則,保留核心技術實現的同時,補充市場前沿適配方案,幫從業者避開權限申請、數據解析的新坑。
一、接口定位與 2025 年技術突破點
京東 jd.union.open.goods.search 接口作為電商數據挖掘的核心入口,2025 年在 “檢索精度”“數據維度”“商業適配” 三方面實現升級,區別于常規基礎調用:
1.多維度檢索策略升級:新增 “短視頻熱度”“實時點擊轉化率” 2 個篩選條件,支持價格區間、促銷類型等 14 種組合篩選(原 12 種),適配直播 / 私域選品場景;
2.搜索流量分析引擎優化:接入京東 “商品成長指數”,可提前 15 天識別潛在爆款(原僅能識別上升趨勢商品);
3.用戶意圖解碼迭代:結合京東 2025 年新增的 “搜索詞 - 商品點擊熱力圖” 數據,核心需求提取準確率提升至 92%,價格敏感度判斷誤差縮小至 5% 以內。
二、2025 年接口核心參數與權限體系(最新版)
1. 權限分級與申請新規(2025 年京東開放平臺調整)
| 權限等級 | 適用人群 | 可獲取數據維度 | QPS 限制 | 申請新增要求 |
| 基礎權限 | 個人開發者 | 商品名稱、價格、主圖、基礎銷量 | 5 | 僅需實名認證,無需企業資質 |
| 進階權限 | 企業認證用戶 | 新增促銷詳情、評價摘要、店鋪評分、優惠券信息 | 20 | 需提交企業營業執照 + 近 3 個月經營流水 |
| 高級權限 | 聯盟合作伙伴 | 新增實時銷量波動、商品成長指數、用戶點擊轉化率、短視頻帶貨熱度(2025 年新增) | 60 | 需提供 “數據用途承諾書”+API 調用方案文檔 |
權限申請路徑:京東開放平臺(https://o0b.cn/lin)→ 聯盟 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 time import hashlib import json import logging import requests from typing import Dict, List, Optional, Tuple from datetime import datetime, timedelta import pandas as pd import numpy as np from 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_key self.app_secret = app_secret self.access_token = access_token self.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 session def _generate_sign(self, params: Dict) -> str: """生成京東API簽名(2025年簽名規則未變,保持原邏輯)""" sorted_params = sorted(params.items(), key=lambda x: x[0]) sign_str = self.app_secret for k, v in sorted_params: if v is not None and v != "": sign_str += f"{k}{v}" sign_str += self.app_secret return 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"] = 1 good_rate = kwargs.get('good_rate') if good_rate and 0 <= good_rate <= 100: search_params["goodRate"] = good_rate is_self = kwargs.get('is_self') if is_self is not None: search_params["isSelf"] = 1 if is_self else 0 category_id = kwargs.get('category_id') if category_id: search_params["cid3"] = category_id brand_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_count except requests.exceptions.RequestException as e: elapsed = round(time.time() - start_time, 2) logger.error(f"請求異常: {str(e)}", extra={"elapsed": elapsed}) return [], 0 except 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 / total if 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, # 成長指數≥80 short_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 的最新玩法!
審核編輯 黃宇
-
接口
+關注
關注
33文章
9520瀏覽量
157021 -
API
+關注
關注
2文章
2370瀏覽量
66758 -
京東
+關注
關注
2文章
1108瀏覽量
50077
發布評論請先 登錄
京東商品詳情API接口詳解:獲取商品標題、價格、庫存等核心數據
關鍵詞搜索京東列表 API 技術對接指南
京東商品詳情API接口:電商數據驅動的核心入口解析
京東關鍵詞搜索商品列表的Python實戰
京東關鍵詞的應用場景
京東關鍵詞item_search-按關鍵字搜索京東商品
京東按關鍵字搜索商品 API接口item_search Pro
京東關鍵詞搜索商品列表的Python爬蟲實戰
解鎖京東API,實時掌握商品價格動態,定價策略更靈活!
京東API實時接口:京東商品評論數據接口
深度拆解京東評論接口:從多維度分析到商業價值落地的技術方案
API實戰指南:如何高效采集京東商品詳情數據?這幾個接口必須掌握!
京東商品詳情接口實戰解析:從調用優化到商業價值挖掘(附避坑代碼)
孔夫子舊書網開放平臺接口實戰:古籍圖書檢索與商鋪數據集成
巧用京東 API,精準把握京東平臺用戶消費偏好
實戰|京東 jd.union.open.goods.search 接口:精準檢索與 2025 商業機會挖掘
評論