京東關鍵詞搜索(item_search)技術實現指南:合規 API 調用 + 數據運營實戰
京東商品關鍵詞搜索(item_search)是電商技術從業者核心需求之一,需優先采用京東官方開放平臺 API或合規第三方數據服務(避免直接爬取官網,存在反爬封禁、法律風險)。本文將從「接口接入、多語言代碼實現、數據提取、運營落地」四個維度,提供可直接落地的技術方案,覆蓋選品、定價、庫存監控等核心場景。
一、合規前提:京東 item_search 接口類型選擇
| 接口類型 | 適用場景 | 合規性 | 調用限制 | 核心優勢 |
|---|---|---|---|---|
| 京東開放平臺「商品搜索接口」 | 自有店鋪運營、官方數據對接 | 100% 合規 | 需申請 AppKey,有 QPS 限制 | 數據權威、字段完整(含庫存 / 銷量 / 優惠券) |
| 京東聯盟 API「商品搜索接口」 | 聯盟推廣、選品數據分析 | 100% 合規 | 需聯盟賬號備案 | 支持傭金比例、推廣鏈接提取 |
| 第三方合規數據平臺 API | 快速驗證需求、非店鋪運營 | 合規(需資質) | 按調用次數計費 | 接入門檻低、無需復雜備案 |
?? 重要提醒:京東官網(jd.com)禁止未經授權的爬蟲抓取,輕則 IP 封禁,重則涉及《反不正當競爭法》,優先選擇上述合規接口!
二、京東開放平臺 item_search 接口接入流程(推薦)
1. 前期準備
注冊京東開放平臺開發者賬號:https://open.jd.com/
創建應用,申請「商品搜索」接口權限(需完成企業 / 個人資質認證)
獲取核心憑證:AppKey、AppSecret(在應用管理頁查看)
接口文檔參考:京東開放平臺 - 商品搜索接口(v3.0):https://open.jd.com/doc/api.htm?apiId=34526
2. 核心接口參數(item_search)
| 參數名 | 類型 | 必選 | 說明 | 示例值 |
|---|---|---|---|---|
| keyword | String | 是 | 搜索關鍵詞(支持多關鍵詞組合,空格分隔) | 「無線藍牙耳機 主動降噪」 |
| page | Int | 否 | 頁碼(默認 1,最大支持 50 頁) | 1 |
| page_size | Int | 否 | 每頁條數(默認 30,最大 50) | 50 |
| sort_type | String | 否 | 排序方式(price_asc:低價;price_desc:高價;sales_desc:銷量;review_desc:評價) | sales_desc |
| cat | String | 否 | 商品分類 ID(可通過「分類列表接口」獲?。?/td> | 6528(手機配件類) |
| is_promotion | Int | 否 | 是否只顯示促銷商品(1:是;0:否) | 1 |
3. 簽名算法(京東 API 核心驗證步驟)
京東 API 采用HMAC-SHA256簽名機制,步驟如下:
按參數名 ASCII 升序排列所有請求參數(含公共參數:app_key、timestamp、format 等)
拼接為「key=value&key=value」格式的字符串(無 url 編碼)
用AppSecret作為密鑰,對拼接字符串進行 HMAC-SHA256 加密,得到簽名值(sign)
將簽名值加入請求參數,以 GET/POST 方式提交請求
公共參數說明:必須包含app_key、timestamp(格式:yyyy-MM-dd HH:mm:ss)、format(默認 json)、v(接口版本,如 3.0)、sign(簽名值)
三、多語言代碼實現(item_search 接口調用)
以下代碼基于「京東開放平臺商品搜索接口 v3.0」,包含 Python/Java/PHP 三種主流語言,直接替換AppKey、AppSecret即可運行。
1. Python 實現(推薦,含數據解析)
python
運行
import requests import hashlib import hmac import time from urllib.parse import urlencode, quote_plus class JDItemSearch: def __init__(self, app_key, app_secret): self.app_key = app_key self.app_secret = app_secret self.url = "https://api.jd.com/routerjson" # 京東API網關地址 # 生成簽名 def generate_sign(self, params): # 按ASCII升序排序參數 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 拼接為key=value字符串(無url編碼) sign_str = "&".join([f"{k}={v}" for k, v in sorted_params]) # HMAC-SHA256加密 hmac_obj = hmac.new(self.app_secret.encode("utf-8"), sign_str.encode("utf-8"), hashlib.sha256) return hmac_obj.hexdigest().upper() # 執行搜索 def search(self, keyword, page=1, page_size=30, sort_type="sales_desc"): # 公共參數 params = { "app_key": self.app_key, "method": "jd.union.open.goods.search", # 京東聯盟搜索接口(或官方商品搜索接口) "format": "json", "v": "3.0", "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "keyword": keyword, "page": str(page), "page_size": str(page_size), "sort_type": sort_type } # 生成簽名 params["sign"] = self.generate_sign(params) # 發送請求 response = requests.get(self.url, params=params, timeout=10) if response.status_code == 200: return response.json() else: raise Exception(f"請求失敗:狀態碼{response.status_code},響應內容{response.text}") # ------------------- 實戰調用 ------------------- if __name__ == "__main__": # 替換為你的AppKey和AppSecret APP_KEY = "你的京東開放平臺AppKey" APP_SECRET = "你的京東開放平臺AppSecret" jd_search = JDItemSearch(APP_KEY, APP_SECRET) # 搜索「無線藍牙耳機 主動降噪」,按銷量排序,第1頁,50條/頁 result = jd_search.search( keyword="無線藍牙耳機 主動降噪", page=1, page_size=50, sort_type="sales_desc" ) # 解析核心數據(選品/運營關鍵字段) goods_list = result.get("jd_union_open_goods_search_response", {}).get("result", {}).get("data", []) for goods in goods_list: print("="*50) print(f"商品ID:{goods.get('skuId')}") print(f"商品標題:{goods.get('goodsName')}") print(f"售價:{goods.get('price')}元") print(f"銷量:{goods.get('salesCount')}件") print(f"傭金比例:{goods.get('commissionRatio')}%") print(f"庫存狀態:{'有貨' if goods.get('stock') > 0 else '缺貨'}") print(f"店鋪名稱:{goods.get('shopName')}") print(f"優惠券金額:{goods.get('couponInfo', {}).get('discount', 0)}元")
2. Java 實現(含簽名工具類)
java
運行
import org.apache.commons.codec.digest.HmacUtils;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
public class JDItemSearch {
private static final String APP_KEY = "你的京東開放平臺AppKey";
private static final String APP_SECRET = "你的京東開放平臺AppSecret";
private static final String API_URL = "https://api.jd.com/routerjson";
// 生成簽名
private static String generateSign(Map params) {
// 按ASCII升序排序
List> entryList = new ArrayList?>(params.entrySet());
entryList.sort(Map.Entry.comparingByKey());
// 拼接字符串
StringBuilder signStr = new StringBuilder();
for (Map.Entry entry : entryList) {
signStr.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
signStr.deleteCharAt(signStr.length() - 1);
// HMAC-SHA256加密
return new HmacUtils("HmacSHA256", APP_SECRET).hmacHex(signStr.toString()).toUpperCase();
}
// 搜索商品
public static JSONObject search(String keyword, int page, int pageSize, String sortType) throws Exception {
Map params = new HashMap?>();
// 公共參數
params.put("app_key", APP_KEY);
params.put("method", "jd.union.open.goods.search");
params.put("format", "json");
params.put("v", "3.0");
params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
// 業務參數
params.put("keyword", keyword);
params.put("page", String.valueOf(page));
params.put("page_size", String.valueOf(pageSize));
params.put("sort_type", sortType);
// 生成簽名
params.put("sign", generateSign(params));
// 構建請求URL
StringBuilder urlBuilder = new StringBuilder(API_URL).append("?");
for (Map.Entry entry : params.entrySet()) {
urlBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
}
String url = urlBuilder.deleteCharAt(urlBuilder.length() - 1).toString();
// 發送請求
try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpGet request = new HttpGet(url);
return JSONObject.parseObject(EntityUtils.toString(client.execute(request).getEntity()));
}
}
// 主函數調用
public static void main(String[] args) throws Exception {
JSONObject result = search("無線藍牙耳機 主動降噪", 1, 50, "sales_desc");
// 解析核心字段
JSONArray goodsList = result.getJSONObject("jd_union_open_goods_search_response")
.getJSONObject("result")
.getJSONArray("data");
for (Object obj : goodsList) {
JSONObject goods = (JSONObject) obj;
System.out.println("商品ID:" + goods.getString("skuId"));
System.out.println("商品標題:" + goods.getString("goodsName"));
System.out.println("售價:" + goods.getBigDecimal("price") + "元");
System.out.println("銷量:" + goods.getIntValue("salesCount") + "件");
System.out.println("庫存狀態:" + (goods.getIntValue("stock") > 0 ? "有貨" : "缺貨"));
System.out.println("---------------------");
}
}
}
3. PHP 實現(簡潔版)
php
運行
?php
class JDItemSearch {
private $appKey = "你的京東開放平臺AppKey";
private $appSecret = "你的京東開放平臺AppSecret";
private $apiUrl = "https://api.jd.com/routerjson";
// 生成簽名
private function generateSign($params) {
ksort($params); // 按ASCII升序排序
$signStr = http_build_query($params, '', '&');
return strtoupper(hash_hmac('sha256', $signStr, $this-?>appSecret));
}
// 搜索商品
public function search($keyword, $page = 1, $pageSize = 30, $sortType = "sales_desc") {
$params = [
'app_key' => $this->appKey,
'method' => 'jd.union.open.goods.search',
'format' => 'json',
'v' => '3.0',
'timestamp' => date('Y-m-d H:i:s'),
'keyword' => $keyword,
'page' => (string)$page,
'page_size' => (string)$pageSize,
'sort_type' => $sortType
];
$params['sign'] = $this->generateSign($params);
// 發送請求
$url = $this->apiUrl . '?' . http_build_query($params);
$response = file_get_contents($url);
return json_decode($response, true);
}
}
// 調用示例
$jdSearch = new JDItemSearch();
$result = $jdSearch->search("無線藍牙耳機 主動降噪", 1, 50, "sales_desc");
// 解析數據
$goodsList = $result['jd_union_open_goods_search_response']['result']['data'] ?? [];
foreach ($goodsList as $goods) {
echo "商品ID:" . $goods['skuId'] . "n";
echo "商品標題:" . $goods['goodsName'] . "n";
echo "售價:" . $goods['price'] . "元n";
echo "銷量:" . $goods['salesCount'] . "件n";
echo "-----------------n";
}
?>
四、數據提取與運營實戰(選品 / 定價 / 庫存)
調用接口后,核心是從返回數據中提取運營關鍵字段,并落地到業務場景:
1. 核心字段提?。↗SON 結構示例)
json
{
"jd_union_open_goods_search_response": {
"result": {
"data": [
{
"skuId": "100062888888", // 商品唯一ID(關鍵)
"goodsName": "無線藍牙耳機 主動降噪...", // 商品標題
"price": 299.00, // 現價
"originalPrice": 399.00, // 原價
"salesCount": 12560, // 累計銷量
"reviewCount": 3280, // 評價數
"stock": 568, // 庫存數量
"shopName": "XX官方旗艦店", // 店鋪名稱
"shopType": "JD_MALL", // 店鋪類型(京東自營/第三方)
"commissionRatio": 15.00, // 傭金比例(聯盟API特有)
"couponInfo": {
"discount": 50, // 優惠券金額
"startTime": "2024-01-01", // 優惠券生效時間
"endTime": "2024-01-31" // 優惠券失效時間
},
"categoryId": "6528", // 分類ID
"brandName": "XX品牌" // 品牌名稱
}
]
}
}
}
2. 運營場景落地
(1)選品分析(高銷量低競爭)
篩選條件:salesCount > 5000(高銷量)、reviewCount/salesCount < 0.3(低評價占比,競爭?。ouponInfo.discount > 30(有大額優惠券)
代碼示例(Python):
python
運行
# 篩選高銷量、大額券、低競爭商品
high_potential_goods = []
for goods in goods_list:
sales = goods.get('salesCount', 0)
review = goods.get('reviewCount', 0)
coupon = goods.get('couponInfo', {}).get('discount', 0)
# 篩選條件
if sales > 5000 and coupon > 30 and (review/sales < 0.3 if sales > 0 else False):
high_potential_goods.append({
'skuId': goods['skuId'],
'goodsName': goods['goodsName'],
'price': goods['price'],
'sales': sales,
'coupon': coupon
})
print("高潛力選品:", high_potential_goods)
(2)定價策略參考
提取同類商品價格區間:min_price = min([g['price'] for g in goods_list])、max_price = max([g['price'] for g in goods_list])
定價建議:若為第三方店鋪,定價可低于區間均值 5%-10%;若為自營,可參考區間中位數,搭配優惠券提升競爭力。
(3)庫存監控
實時監控爆款庫存:for goods in goods_list: if goods['salesCount'] > 10000: print(f"爆款{goods['goodsName']}庫存:{goods['stock']}")
觸發預警:當庫存goods['stock'] < 100時,發送郵件 / 短信提醒補貨。
五、常見問題與解決方案
| 問題類型 | 原因分析 | 解決方案 |
|---|---|---|
| 簽名錯誤(sign invalid) | 參數排序錯誤、AppSecret 錯誤 | 嚴格按 ASCII 升序排序參數,核對 AppSecret 是否正確 |
| 調用頻率限制(QPS 超限) | 超過平臺規定的 QPS 上限 | 1. 申請提高 QPS;2. 加入請求重試機制(帶延遲);3. 緩存重復搜索結果 |
| 數據返回為空 | 關鍵詞無匹配商品、權限不足 | 1. 優化關鍵詞(更具體);2. 檢查接口權限是否開通 |
| 庫存 / 銷量字段缺失 | 接口版本過低 | 升級到 v3.0 及以上版本,確認接口權限包含「銷量 / 庫存」字段 |
六、合規與風險提示
禁止使用爬蟲爬取京東官網(jd.com)、京東超市等非開放平臺頁面,僅允許調用官方開放平臺或合規第三方 API。
數據使用范圍:僅用于自身店鋪運營、選品分析,不得泄露、轉售他人數據,遵守《京東開放平臺服務協議》。
接口調用規范:嚴格遵守 QPS 限制,避免高頻次惡意調用,否則會導致 AppKey 封禁。
審核編輯 黃宇
-
API
+關注
關注
2文章
2368瀏覽量
66752 -
京東
+關注
關注
2文章
1108瀏覽量
50076
發布評論請先 登錄
京東關鍵詞item_search-按關鍵字搜索京東商品
評論