91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

京東關(guān)鍵詞搜索 item_search_pro API 接口獲取數(shù)據(jù)

? 來源:jf_57394773 ? 作者:jf_57394773 ? 2026-01-06 15:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

京東item_search_pro是官方推出的增強(qiáng)版關(guān)鍵詞搜索 API,相比基礎(chǔ)版item_search,其核心優(yōu)勢(shì)在于「字段更全、篩選維度更多、數(shù)據(jù)精度更高」(支持品牌、價(jià)格區(qū)間、服務(wù)標(biāo)簽等多維度精準(zhǔn)篩選,返回商品規(guī)格、售后保障、店鋪評(píng)分等深度數(shù)據(jù)),適用于中高階選品分析、競(jìng)品監(jiān)控、精細(xì)化運(yùn)營等場(chǎng)景。本文將從「接口特性、合規(guī)接入、多語言進(jìn)階代碼、高級(jí)數(shù)據(jù)解析、實(shí)戰(zhàn)場(chǎng)景落地」五大維度,提供可直接落地的技術(shù)方案。

一、item_search_pro 核心優(yōu)勢(shì)與適用場(chǎng)景

1. 核心優(yōu)勢(shì)(對(duì)比基礎(chǔ)版 item_search)

特性 item_search(基礎(chǔ)版) item_search_pro(增強(qiáng)版)
篩選維度 僅支持關(guān)鍵詞、排序、分類 支持品牌、價(jià)格區(qū)間、服務(wù)標(biāo)簽、規(guī)格、產(chǎn)地等 10 + 維度
返回字段數(shù)量 基礎(chǔ)字段(價(jià)格、銷量、庫存) 新增店鋪評(píng)分、商品規(guī)格、售后政策、實(shí)時(shí)銷量、物流信息等 30 + 字段
數(shù)據(jù)精度 累計(jì)銷量、基礎(chǔ)價(jià)格 實(shí)時(shí)銷量(近 7 天 / 30 天)、優(yōu)惠后實(shí)際價(jià)格、規(guī)格對(duì)應(yīng)價(jià)格
批量查詢支持 單關(guān)鍵詞單次查詢 支持多關(guān)鍵詞批量查詢、分頁批量獲?。ㄗ畲笾С?100 頁)
適用場(chǎng)景 簡單選品、基礎(chǔ)數(shù)據(jù)監(jiān)控 精細(xì)化選品、競(jìng)品深度分析、定價(jià)策略優(yōu)化、服務(wù)對(duì)標(biāo)

2. 合規(guī)接入前提

item_search_pro屬于京東開放平臺(tái)高級(jí)接口,需滿足以下條件:

已注冊(cè)京東開放平臺(tái)開發(fā)者賬號(hào)(企業(yè) / 個(gè)人資質(zhì)認(rèn)證通過);

已創(chuàng)建應(yīng)用并申請(qǐng)「商品搜索增強(qiáng)版」接口權(quán)限(需單獨(dú)申請(qǐng),基礎(chǔ)版權(quán)限不包含);

核心憑證:AppKey、AppSecret(與基礎(chǔ)版通用,無需重新申請(qǐng));

官方文檔參考:京東開放平臺(tái) - item_search_pro 接口(v4.0):https://open.jd.com/doc/api.htm?apiId=45487

二、item_search_pro 接口核心配置(參數(shù) + 簽名)

1. 公共參數(shù)(與基礎(chǔ)版一致)

參數(shù)名 類型 必選 說明 示例值
app_key String 應(yīng)用唯一標(biāo)識(shí)(應(yīng)用管理頁獲?。?/td> 23456789(替換為實(shí)際值)
method String 接口名稱(pro 版固定值) jd.union.open.goods.search.pro
format String 響應(yīng)格式(默認(rèn) json) json
v String 接口版本(pro 版推薦 v4.0) 4.0
timestamp String 請(qǐng)求時(shí)間戳(格式:yyyy-MM-dd HH:mm:ss) 2024-08-20 15:30:00
sign String 簽名值(HMAC-SHA256 算法 8F7A6B5C4D3E2F1A...

2. 專屬高級(jí)參數(shù)(pro 版核心亮點(diǎn))

參數(shù)名 類型 必選 說明 示例值
keyword String 搜索關(guān)鍵詞(支持多關(guān)鍵詞,空格分隔) 無線藍(lán)牙耳機(jī) 主動(dòng)降噪 長續(xù)航
page Int 頁碼(默認(rèn) 1,最大 100 頁) 2
page_size Int 每頁條數(shù)(默認(rèn) 30,最大 100) 100
sort_type String 排序方式(新增 real_sales:實(shí)時(shí)銷量) real_sales_desc(實(shí)時(shí)銷量降序)
brand_id String 品牌 ID(精準(zhǔn)篩選特定品牌,多品牌用逗號(hào)分隔) 12345,67890(需通過品牌列表接口獲?。?/td>
price_from Float 最低價(jià)格(元) 100.00
price_to Float 最高價(jià)格(元) 300.00
service_tags String 服務(wù)標(biāo)簽(多標(biāo)簽用逗號(hào)分隔,需參考標(biāo)簽 ID 字典) 1,3,5(1 = 京東物流,3=7 天無理由,5 = 上門換新)
is_jd_logistics Int 是否京東物流(1 = 是,0 = 否) 1
spec_ids String 規(guī)格 ID(篩選特定規(guī)格,如顏色、內(nèi)存) 8GB+256GB, 黑色(需通過商品規(guī)格接口獲?。?/td>
province String 省份(篩選區(qū)域庫存 / 價(jià)格) 廣東省

關(guān)鍵說明:

brand_id獲取:調(diào)用京東開放平臺(tái)「品牌列表接口」(jd.union.open.category.brand.get),根據(jù)分類 ID 查詢品牌 ID;

service_tags標(biāo)簽 ID 字典:可在京東開放平臺(tái)接口文檔中下載,包含京東物流、售后保障、發(fā)票服務(wù)等所有支持的標(biāo)簽 ID;

spec_ids:需先通過「商品規(guī)格接口」獲取目標(biāo)商品的規(guī)格 ID,再用于篩選。

3. 簽名算法(與基礎(chǔ)版一致,無需修改)

按參數(shù)名 ASCII 升序排列所有請(qǐng)求參數(shù)(含公共參數(shù) + 業(yè)務(wù)參數(shù));

拼接為「key=value&key=value」格式字符串(無 URL 編碼);

用AppSecret作為密鑰,執(zhí)行 HMAC-SHA256 加密,得到大寫簽名值(sign);

將 sign 加入請(qǐng)求參數(shù),以 GET/POST 方式提交。

三、多語言進(jìn)階代碼實(shí)現(xiàn)(item_search_pro)

以下代碼基于京東開放平臺(tái)item_search_pro(v4.0),包含高級(jí)參數(shù)配置、批量查詢、數(shù)據(jù)入庫功能,直接替換AppKey、AppSecret即可運(yùn)行。

1. Python 實(shí)現(xiàn)(推薦,含批量搜索 + MySQL 入庫)

python

運(yùn)行

import requests
import hashlib
import hmac
import time
import pymysql
from urllib.parse import urlencode
from typing import List, Dict

class JDItemSearchPro:
    def __init__(self, app_key: str, app_secret: str, db_config: Dict = None):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://api.jd.com/routerjson"
        # 數(shù)據(jù)庫連接(可選,用于存儲(chǔ)數(shù)據(jù))
        self.db = pymysql.connect(**db_config) if db_config else None
        self.cursor = self.db.cursor() if self.db else None

    # 生成簽名(核心方法)
    def generate_sign(self, params: Dict) -> str:
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
        hmac_obj = hmac.new(
            self.app_secret.encode("utf-8"),
            sign_str.encode("utf-8"),
            hashlib.sha256
        )
        return hmac_obj.hexdigest().upper()

    # 單關(guān)鍵詞搜索(支持高級(jí)篩選)
    def search_single_keyword(self, keyword: str, **kwargs) -> Dict:
        """
        kwargs支持的高級(jí)參數(shù):
        page: 頁碼,default=1
        page_size: 每頁條數(shù),default=100
        sort_type: 排序方式,default=real_sales_desc
        brand_id: 品牌ID,default=""
        price_from: 最低價(jià)格,default=0.0
        price_to: 最高價(jià)格,default=99999.0
        service_tags: 服務(wù)標(biāo)簽,default=""
        is_jd_logistics: 是否京東物流,default=1
        """
        # 公共參數(shù)
        params = {
            "app_key": self.app_key,
            "method": "jd.union.open.goods.search.pro",
            "format": "json",
            "v": "4.0",
            "timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
            "keyword": keyword,
            "page": str(kwargs.get("page", 1)),
            "page_size": str(kwargs.get("page_size", 100)),
            "sort_type": kwargs.get("sort_type", "real_sales_desc"),
            "brand_id": kwargs.get("brand_id", ""),
            "price_from": str(kwargs.get("price_from", 0.0)),
            "price_to": str(kwargs.get("price_to", 99999.0)),
            "service_tags": kwargs.get("service_tags", ""),
            "is_jd_logistics": str(kwargs.get("is_jd_logistics", 1))
        }
        # 生成簽名
        params["sign"] = self.generate_sign(params)
        # 發(fā)送請(qǐng)求
        response = requests.get(self.api_url, params=params, timeout=15)
        if response.status_code == 200:
            return response.json()
        else:
            raise Exception(f"請(qǐng)求失?。籂顟B(tài)碼{response.status_code},響應(yīng):{response.text}")

    # 多關(guān)鍵詞批量搜索
    def batch_search(self, keywords: List[str], **kwargs) -> List[Dict]:
        """批量搜索多個(gè)關(guān)鍵詞,返回合并后的數(shù)據(jù)"""
        all_goods = []
        for keyword in keywords:
            print(f"正在搜索關(guān)鍵詞:{keyword}")
            for page in range(1, kwargs.get("max_page", 3) + 1):  # 最多獲取3頁
                try:
                    result = self.search_single_keyword(
                        keyword=keyword,
                        page=page,
                        page_size=kwargs.get("page_size", 100),
                        sort_type=kwargs.get("sort_type", "real_sales_desc"),
                        brand_id=kwargs.get("brand_id", ""),
                        price_from=kwargs.get("price_from", 0.0),
                        price_to=kwargs.get("price_to", 99999.0),
                        service_tags=kwargs.get("service_tags", ""),
                        is_jd_logistics=kwargs.get("is_jd_logistics", 1)
                    )
                    # 解析數(shù)據(jù)
                    goods_list = self.parse_result(result)
                    if not goods_list:
                        break  # 無更多數(shù)據(jù),停止分頁
                    all_goods.extend(goods_list)
                    # 存入數(shù)據(jù)庫(如果配置了DB)
                    if self.db:
                        self.save_to_db(goods_list)
                    time.sleep(1)  # 避免QPS超限
                except Exception as e:
                    print(f"關(guān)鍵詞{keyword}第{page}頁搜索失?。簕str(e)}")
                    continue
        return all_goods

    # 解析返回結(jié)果(提取pro版核心字段)
    def parse_result(self, result: Dict) -> List[Dict]:
        """提取商品核心字段,適配運(yùn)營需求"""
        parsed_goods = []
        data = result.get("jd_union_open_goods_search_pro_response", {}) 
            .get("result", {}) 
            .get("data", [])
        for goods in data:
            # 解析規(guī)格信息(pro版新增)
            spec_info = goods.get("specInfo", {})
            spec_details = "; ".join([f"{k}:{v}" for k, v in spec_info.items()]) if spec_info else "無"
            
            # 解析售后保障(pro版新增)
            after_sale = goods.get("afterSaleService", {})
            after_sale_details = f"7天無理由:{'是' if after_sale.get('sevenDaysNoReasonReturn') else '否'};" 
                                f"上門換新:{'是' if after_sale.get('onSiteReplacement') else '否'};" 
                                f"全國聯(lián)保:{'是' if after_sale.get('nationalWarranty') else '否'}"
            
            parsed_goods.append({
                "sku_id": goods.get("skuId", ""),  # 商品唯一ID
                "goods_name": goods.get("goodsName", ""),  # 商品標(biāo)題
                "brand_name": goods.get("brandName", ""),  # 品牌名稱
                "brand_id": goods.get("brandId", ""),  # 品牌ID
                "current_price": goods.get("price", 0.0),  # 現(xiàn)價(jià)
                "original_price": goods.get("originalPrice", 0.0),  # 原價(jià)
                "real_sales_7d": goods.get("realSales7d", 0),  # 7天實(shí)時(shí)銷量(pro新增)
                "total_sales": goods.get("salesCount", 0),  # 累計(jì)銷量
                "review_count": goods.get("reviewCount", 0),  # 評(píng)價(jià)數(shù)
                "shop_name": goods.get("shopName", ""),  # 店鋪名稱
                "shop_type": goods.get("shopType", ""),  # 店鋪類型(自營/第三方)
                "shop_score": goods.get("shopScore", 0.0),  # 店鋪評(píng)分(pro新增)
                "stock": goods.get("stock", 0),  # 庫存
                "is_jd_logistics": goods.get("isJdLogistics", 0),  # 是否京東物流
                "service_tags": goods.get("serviceTags", ""),  # 服務(wù)標(biāo)簽
                "spec_details": spec_details,  # 規(guī)格詳情
                "after_sale_details": after_sale_details,  # 售后詳情
                "coupon_amount": goods.get("couponInfo", {}).get("discount", 0.0),  # 優(yōu)惠券金額
                "create_time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 數(shù)據(jù)采集時(shí)間
            })
        return parsed_goods

    # 數(shù)據(jù)存入MySQL(可選)
    def save_to_db(self, goods_list: List[Dict]):
        """創(chuàng)建商品數(shù)據(jù)表并插入數(shù)據(jù)"""
        # 創(chuàng)建表SQL
        create_table_sql = """
        CREATE TABLE IF NOT EXISTS jd_goods_pro (
            id INT AUTO_INCREMENT PRIMARY KEY,
            sku_id VARCHAR(50) UNIQUE NOT NULL,
            goods_name VARCHAR(500) NOT NULL,
            brand_name VARCHAR(100),
            brand_id VARCHAR(50),
            current_price DECIMAL(10,2),
            original_price DECIMAL(10,2),
            real_sales_7d INT,
            total_sales INT,
            review_count INT,
            shop_name VARCHAR(200),
            shop_type VARCHAR(50),
            shop_score DECIMAL(3,2),
            stock INT,
            is_jd_logistics TINYINT,
            service_tags VARCHAR(200),
            spec_details VARCHAR(500),
            after_sale_details VARCHAR(500),
            coupon_amount DECIMAL(10,2),
            create_time DATETIME
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
        """
        self.cursor.execute(create_table_sql)
        # 插入數(shù)據(jù)SQL
        insert_sql = """
        INSERT IGNORE INTO jd_goods_pro (
            sku_id, goods_name, brand_name, brand_id, current_price, original_price,
            real_sales_7d, total_sales, review_count, shop_name, shop_type, shop_score,
            stock, is_jd_logistics, service_tags, spec_details, after_sale_details,
            coupon_amount, create_time
        ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        """
        # 批量插入
        values = [
            (
                g["sku_id"], g["goods_name"], g["brand_name"], g["brand_id"], g["current_price"],
                g["original_price"], g["real_sales_7d"], g["total_sales"], g["review_count"],
                g["shop_name"], g["shop_type"], g["shop_score"], g["stock"], g["is_jd_logistics"],
                g["service_tags"], g["spec_details"], g["after_sale_details"], g["coupon_amount"],
                g["create_time"]
            ) for g in goods_list
        ]
        self.cursor.executemany(insert_sql, values)
        self.db.commit()
        print(f"成功存入{len(values)}條商品數(shù)據(jù)")

# ------------------- 實(shí)戰(zhàn)調(diào)用示例 -------------------
if __name__ == "__main__":
    # 配置信息(替換為實(shí)際值)
    APP_KEY = "你的京東AppKey"
    APP_SECRET = "你的京東AppSecret"
    DB_CONFIG = {
        "host": "localhost",
        "user": "root",
        "password": "你的數(shù)據(jù)庫密碼",
        "database": "jd_data",
        "charset": "utf8mb4"
    }

    # 初始化實(shí)例(如需存儲(chǔ)數(shù)據(jù),傳入DB_CONFIG;無需則不傳)
    jd_pro = JDItemSearchPro(APP_KEY, APP_SECRET, DB_CONFIG)

    # 1. 單關(guān)鍵詞高級(jí)搜索(篩選京東物流、100-300元、華為品牌)
    single_result = jd_pro.search_single_keyword(
        keyword="無線藍(lán)牙耳機(jī) 主動(dòng)降噪",
        brand_id="1000000779",  # 華為品牌ID(示例)
        price_from=100.0,
        price_to=300.0,
        service_tags="1,3",  # 1=京東物流,3=7天無理由
        sort_type="real_sales_desc"
    )
    parsed_single = jd_pro.parse_result(single_result)
    print(f"單關(guān)鍵詞搜索結(jié)果:{len(parsed_single)}條商品")

    # 2. 多關(guān)鍵詞批量搜索(存儲(chǔ)到MySQL)
    keywords = ["無線藍(lán)牙耳機(jī) 主動(dòng)降噪", "機(jī)械鍵盤 青軸", "充電寶 20000mAh"]
    batch_result = jd_pro.batch_search(
        keywords=keywords,
        max_page=2,  # 每個(gè)關(guān)鍵詞獲取2頁
        page_size=100,
        price_from=50.0,
        is_jd_logistics=1
    )
    print(f"批量搜索總結(jié)果:{len(batch_result)}條商品")

    # 關(guān)閉數(shù)據(jù)庫連接
    if jd_pro.db:
        jd_pro.cursor.close()
        jd_pro.db.close()

2. Java 實(shí)現(xiàn)(含高級(jí)篩選 + 數(shù)據(jù)解析)

java

運(yùn)行

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 com.alibaba.fastjson.JSONArray;
import java.util.*;
import java.net.URLEncoder;

public class JDItemSearchPro {
    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) {
        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);
        return new HmacUtils("HmacSHA256", APP_SECRET).hmacHex(signStr.toString()).toUpperCase();
    }

    // 高級(jí)搜索方法(支持多維度篩選)
    public static JSONObject searchPro(String keyword, int page, int pageSize, String brandId,
                                       double priceFrom, double priceTo, String serviceTags, int isJdLogistics) throws Exception {
        Map params = new HashMap();
        // 公共參數(shù)
        params.put("app_key", APP_KEY);
        params.put("method", "jd.union.open.goods.search.pro");
        params.put("format", "json");
        params.put("v", "4.0");
        params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        // 業(yè)務(wù)參數(shù)(高級(jí)篩選)
        params.put("keyword", keyword);
        params.put("page", String.valueOf(page));
        params.put("page_size", String.valueOf(pageSize));
        params.put("sort_type", "real_sales_desc");
        params.put("brand_id", brandId);
        params.put("price_from", String.valueOf(priceFrom));
        params.put("price_to", String.valueOf(priceTo));
        params.put("service_tags", serviceTags);
        params.put("is_jd_logistics", String.valueOf(isJdLogistics));
        // 生成簽名
        params.put("sign", generateSign(params));

        // 構(gòu)建請(qǐng)求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();

        // 發(fā)送請(qǐng)求
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpGet request = new HttpGet(url);
            return JSONObject.parseObject(EntityUtils.toString(client.execute(request).getEntity()));
        }
    }

    // 解析Pro版核心數(shù)據(jù)
    public static List> parseProResult(JSONObject result) {
        List> parsedGoods = new ArrayList();
        JSONArray data = result.getJSONObject("jd_union_open_goods_search_pro_response")
                .getJSONObject("result")
                .getJSONArray("data");

        for (Object obj : data) {
            JSONObject goods = (JSONObject) obj;
            Map goodsMap = new HashMap();

            // 基礎(chǔ)字段
            goodsMap.put("skuId", goods.getString("skuId"));
            goodsMap.put("goodsName", goods.getString("goodsName"));
            goodsMap.put("brandName", goods.getString("brandName"));
            goodsMap.put("currentPrice", goods.getBigDecimal("price"));
            goodsMap.put("originalPrice", goods.getBigDecimal("originalPrice"));

            // Pro版新增字段
            goodsMap.put("realSales7d", goods.getIntValue("realSales7d"));
            goodsMap.put("shopScore", goods.getBigDecimal("shopScore"));
            goodsMap.put("specDetails", goods.getJSONObject("specInfo").toString());
            goodsMap.put("afterSaleDetails", goods.getJSONObject("afterSaleService").toString());
            goodsMap.put("isJdLogistics", goods.getIntValue("isJdLogistics"));

            parsedGoods.add(goodsMap);
        }
        return parsedGoods;
    }

    // 主函數(shù)調(diào)用
    public static void main(String[] args) throws Exception {
        // 搜索:華為無線藍(lán)牙耳機(jī)(品牌ID=1000000779),100-300元,京東物流
        JSONObject result = searchPro(
                "無線藍(lán)牙耳機(jī) 主動(dòng)降噪",
                1, 100,
                "1000000779",
                100.0, 300.0,
                "1,3", 1
        );

        // 解析數(shù)據(jù)
        List> goodsList = parseProResult(result);
        System.out.println("搜索結(jié)果數(shù)量:" + goodsList.size());
        for (Map goods : goodsList) {
            System.out.println("商品ID:" + goods.get("skuId"));
            System.out.println("商品名稱:" + goods.get("goodsName"));
            System.out.println("7天實(shí)時(shí)銷量:" + goods.get("realSales7d"));
            System.out.println("店鋪評(píng)分:" + goods.get("shopScore"));
            System.out.println("---------------------");
        }
    }
}

3. PHP 實(shí)現(xiàn)(簡潔版,含高級(jí)參數(shù))

php

運(yùn)行

appSecret));
    }

    // 高級(jí)搜索
    public function searchPro($keyword, $page = 1, $pageSize = 100, $brandId = '', $priceFrom = 0, $priceTo = 99999, $serviceTags = '', $isJdLogistics = 1) {
        $params = [
            'app_key' => $this->appKey,
            'method' => 'jd.union.open.goods.search.pro',
            'format' => 'json',
            'v' => '4.0',
            'timestamp' => date('Y-m-d H:i:s'),
            'keyword' => $keyword,
            'page' => (string)$page,
            'page_size' => (string)$pageSize,
            'sort_type' => 'real_sales_desc',
            'brand_id' => $brandId,
            'price_from' => (string)$priceFrom,
            'price_to' => (string)$priceTo,
            'service_tags' => $serviceTags,
            'is_jd_logistics' => (string)$isJdLogistics
        ];
        $params['sign'] = $this->generateSign($params);

        // 發(fā)送請(qǐng)求
        $url = $this->apiUrl . '?' . http_build_query($params);
        $response = file_get_contents($url);
        return json_decode($response, true);
    }

    // 解析數(shù)據(jù)
    public function parseResult($result) {
        $goodsList = $result['jd_union_open_goods_search_pro_response']['result']['data'] ?? [];
        $parsed = [];
        foreach ($goodsList as $goods) {
            $parsed[] = [
                'sku_id' => $goods['skuId'],
                'goods_name' => $goods['goodsName'],
                'brand_name' => $goods['brandName'],
                'current_price' => $goods['price'],
                'real_sales_7d' => $goods['realSales7d'],
                'shop_score' => $goods['shopScore'],
                'spec_details' => json_encode($goods['specInfo']),
                'after_sale' => json_encode($goods['afterSaleService'])
            ];
        }
        return $parsed;
    }
}

// 調(diào)用示例
$jdPro = new JDItemSearchPro();
$result = $jdPro->searchPro(
    '無線藍(lán)牙耳機(jī) 主動(dòng)降噪',
    1, 100,
    '1000000779',  // 華為品牌ID
    100, 300,
    '1,3', 1
);
$parsedData = $jdPro->parseResult($result);
print_r("搜索結(jié)果:" . count($parsedData) . "條n");
print_r($parsedData[0]);
?>

四、item_search_pro 核心數(shù)據(jù)解析與運(yùn)營落地

1. Pro 版新增核心字段(運(yùn)營關(guān)鍵)

字段名 說明 運(yùn)營價(jià)值
realSales7d/realSales30d 7 天 / 30 天實(shí)時(shí)銷量(非累計(jì)) 判斷商品近期熱度,避免選品 “過時(shí)爆款”
shopScore 店鋪評(píng)分(1-5 分) 篩選高口碑店鋪,降低合作 / 對(duì)標(biāo)風(fēng)險(xiǎn)
specInfo 商品規(guī)格詳情(顏色、內(nèi)存、尺寸等) 分析熱門規(guī)格,優(yōu)化自身商品 SKU 配置
afterSaleService 售后保障(7 天無理由、上門換新等) 對(duì)標(biāo)競(jìng)品服務(wù),提升自身店鋪售后競(jìng)爭(zhēng)力
isJdLogistics 是否京東物流(1 = 是) 篩選高物流體驗(yàn)商品,適合主打 “極速送達(dá)” 場(chǎng)景
couponEffectiveTime 優(yōu)惠券生效 / 失效時(shí)間 精準(zhǔn)把握促銷節(jié)點(diǎn),調(diào)整定價(jià) / 推廣策略

2. 高階運(yùn)營場(chǎng)景落地(基于 Pro 版數(shù)據(jù))

(1)精細(xì)化選品(精準(zhǔn)鎖定高潛力商品)

篩選邏輯:京東物流(is_jd_logistics=1)+ 7 天實(shí)時(shí)銷量 > 500(realSales7d>500)+ 店鋪評(píng)分 > 4.8(shopScore>4.8)+ 有上門換新服務(wù)(afterSaleService.onSiteReplacement=true)+ 價(jià)格區(qū)間 100-300 元。Python 代碼示例

python

運(yùn)行

# 篩選高潛力商品
high_potential = [
    g for g in parsed_single
    if g["real_sales_7d"] > 500
    and g["shop_score"] > 4.8
    and "上門換新:是" in g["after_sale_details"]
    and 100 <= g["current_price"] <= 300
]
print(f"高潛力商品數(shù)量:{len(high_potential)}")
for goods in high_potential:
    print(f"商品:{goods['goods_name']},7天銷量:{goods['real_sales_7d']},店鋪評(píng)分:{goods['shop_score']}")

(2)競(jìng)品服務(wù)對(duì)標(biāo)分析

核心需求:分析競(jìng)品的售后保障、服務(wù)標(biāo)簽,優(yōu)化自身店鋪服務(wù)配置。數(shù)據(jù)提取邏輯:提取同類競(jìng)品的service_tags和after_sale_details,統(tǒng)計(jì)高頻服務(wù)標(biāo)簽和售后政策。代碼示例

python

運(yùn)行

# 統(tǒng)計(jì)競(jìng)品高頻服務(wù)標(biāo)簽
service_tags_count = {}
for goods in batch_result:
    tags = goods["service_tags"].split(",")
    for tag in tags:
        if tag:
            service_tags_count[tag] = service_tags_count.get(tag, 0) + 1

# 統(tǒng)計(jì)售后政策分布
after_sale_count = {"7天無理由": 0, "上門換新": 0, "全國聯(lián)保": 0}
for goods in batch_result:
    if "7天無理由:是" in goods["after_sale_details"]:
        after_sale_count["7天無理由"] += 1
    if "上門換新:是" in goods["after_sale_details"]:
        after_sale_count["上門換新"] += 1
    if "全國聯(lián)保:是" in goods["after_sale_details"]:
        after_sale_count["全國聯(lián)保"] += 1

print("競(jìng)品服務(wù)標(biāo)簽分布:", service_tags_count)
print("競(jìng)品售后政策分布:", after_sale_count)

(3)動(dòng)態(tài)定價(jià)策略優(yōu)化

核心邏輯:基于同類商品的價(jià)格區(qū)間、優(yōu)惠券金額、規(guī)格配置,制定差異化定價(jià)。

提取同類商品價(jià)格區(qū)間:min_price = min([g["current_price"] for g in batch_result]),max_price = max([g["current_price"] for g in batch_result]);

熱門規(guī)格溢價(jià)分析:若 “8GB+256GB” 規(guī)格的商品價(jià)格比 “6GB+128GB” 高 30% 以上,可適當(dāng)降低溢價(jià),提升競(jìng)爭(zhēng)力。

五、常見問題與解決方案(Pro 版專屬)

問題類型 原因分析 解決方案
接口權(quán)限不足(403) 未申請(qǐng)「商品搜索增強(qiáng)版」權(quán)限,僅擁有基礎(chǔ)版 登錄京東開放平臺(tái),在 “應(yīng)用權(quán)限管理” 中申請(qǐng) item_search_pro 權(quán)限
realSales7d 字段缺失 接口版本低于 v4.0,或未開通實(shí)時(shí)銷量權(quán)限 升級(jí)接口版本至 v4.0,申請(qǐng) “實(shí)時(shí)銷量數(shù)據(jù)” 權(quán)限
brand_id 篩選無效 品牌 ID 錯(cuò)誤,或該品牌無匹配商品 通過「品牌列表接口」重新獲取品牌 ID,優(yōu)化關(guān)鍵詞 + 品牌組合
分頁數(shù)據(jù)重復(fù) 未按 sku_id 去重,或接口返回?cái)?shù)據(jù)緩存 存入數(shù)據(jù)庫時(shí)用 sku_id 作為唯一鍵(INSERT IGNORE),或添加去重邏輯
QPS 超限(429) 超過 Pro 版 QPS 限制(通常為 10-20 QPS) 1. 申請(qǐng)?zhí)岣?QPS;2. 批量查詢時(shí)加入 1-2 秒延遲;3. 緩存重復(fù)查詢結(jié)果

六、合規(guī)與風(fēng)險(xiǎn)提示

接口使用限制:item_search_pro的 QPS 限制高于基礎(chǔ)版,但仍需遵守平臺(tái)規(guī)定,禁止高頻惡意調(diào)用(否則會(huì)導(dǎo)致 AppKey 封禁);

數(shù)據(jù)使用范圍:僅用于自身運(yùn)營分析,不得轉(zhuǎn)售、泄露商品數(shù)據(jù)或店鋪信息,遵守《京東開放平臺(tái)服務(wù)協(xié)議》;

權(quán)限有效期:高級(jí)接口權(quán)限需定期審核,確保資質(zhì)合規(guī),避免權(quán)限到期導(dǎo)致服務(wù)中斷。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2383

    瀏覽量

    66818
  • 京東
    +關(guān)注

    關(guān)注

    2

    文章

    1114

    瀏覽量

    50091
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)鍵詞搜索京東列表 API 技術(shù)對(duì)接指南

    一、前言 在電商數(shù)據(jù)服務(wù)、代購集運(yùn)系統(tǒng)搭建、電商平臺(tái)競(jìng)品分析、自有商城商品同步等業(yè)務(wù)場(chǎng)景中,京東商品列表的精準(zhǔn)、實(shí)時(shí)獲取是核心環(huán)節(jié)之一。 二、接口概述
    的頭像 發(fā)表于 02-05 16:36 ?381次閱讀

    京東關(guān)鍵詞的應(yīng)用

    京東關(guān)鍵詞應(yīng)用核心是圍繞搜索匹配與流量獲取,貫穿商品上架、搜索優(yōu)化、付費(fèi)推廣、精細(xì)化運(yùn)營等全鏈路,以精準(zhǔn)匹配用戶需求、提升排名與轉(zhuǎn)化為目標(biāo)。以下是具體應(yīng)用與實(shí)操方法: 一、
    的頭像 發(fā)表于 01-20 09:05 ?539次閱讀

    接入京東關(guān)鍵詞API的核心利弊分析

    業(yè)務(wù)決策提供參考。 一、核心優(yōu)勢(shì):數(shù)據(jù)驅(qū)動(dòng)下的效率與收益提升 接入京東關(guān)鍵詞API的優(yōu)勢(shì)貫穿電商運(yùn)營全鏈路,從基礎(chǔ)的數(shù)據(jù)采集到高階的戰(zhàn)略決策,均能實(shí)現(xiàn)對(duì)傳統(tǒng)人工模式的升級(jí),核心體現(xiàn)在以
    的頭像 發(fā)表于 01-14 15:39 ?246次閱讀

    使用京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù)的實(shí)操指南

    一、接口接入前期準(zhǔn)備 使用京東關(guān)鍵詞搜索接口前,需完成京東開放平臺(tái)的賬號(hào)認(rèn)證、應(yīng)用創(chuàng)建及權(quán)限申請(qǐng),這是
    的頭像 發(fā)表于 01-12 11:46 ?377次閱讀

    京東關(guān)鍵詞API接口獲取

    你想要獲取京東關(guān)鍵詞相關(guān)的 API 接口,以此替代傳統(tǒng)爬蟲,更合規(guī)、穩(wěn)定地獲取商品列表等信息,我會(huì)先講解 官方合規(guī)的
    的頭像 發(fā)表于 01-09 14:16 ?414次閱讀

    京東關(guān)鍵詞搜索商品列表的Python實(shí)戰(zhàn)

    一、實(shí)現(xiàn)思路分析 URL 構(gòu)造 :京東搜索 URL 格式為 https://search.jd.com/Search?keyword=關(guān)鍵詞
    的頭像 發(fā)表于 01-09 10:34 ?670次閱讀

    京東關(guān)鍵詞 API 場(chǎng)景的需求梳理模板

    京東關(guān)鍵詞 API 場(chǎng)景需求梳理模板 本模板適用于 聯(lián)盟推廣、商家運(yùn)營、工具開發(fā)、市場(chǎng)分析 等基于京東關(guān)鍵詞 API 的業(yè)務(wù)需求梳理,可直接用于需求文檔撰寫、
    的頭像 發(fā)表于 01-08 13:45 ?172次閱讀

    京東關(guān)鍵詞的應(yīng)用場(chǎng)景

    京東關(guān)鍵詞API 層面的應(yīng)用,是串聯(lián) 商品檢索、數(shù)據(jù)運(yùn)營、商業(yè)決策、工具開發(fā) 的核心紐帶,結(jié)合京東開放平臺(tái) API(如商品查詢、聯(lián)盟推廣
    的頭像 發(fā)表于 01-08 13:38 ?501次閱讀

    京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù)的實(shí)操指南

    京東關(guān)鍵詞搜索接口獲取商品數(shù)據(jù) 實(shí)操指南 本指南聚焦 京東開放平臺(tái)合規(guī)
    的頭像 發(fā)表于 01-07 13:56 ?294次閱讀

    京東關(guān)鍵詞API賦能

    京東關(guān)鍵詞 API 賦能:從數(shù)據(jù)采集到業(yè)務(wù)增長的全鏈路落地指南 京東關(guān)鍵詞 API(以item_sear
    的頭像 發(fā)表于 01-07 09:53 ?561次閱讀

    京東關(guān)鍵詞item_search-按關(guān)鍵搜索京東商品

    京東關(guān)鍵詞搜索item_search)技術(shù)實(shí)現(xiàn)指南:合規(guī) API 調(diào)用 + 數(shù)據(jù)運(yùn)營實(shí)戰(zhàn) 京東
    的頭像 發(fā)表于 01-06 09:27 ?929次閱讀

    京東關(guān)鍵搜索商品 API接口item_search Pro

    京東搜索商品 APIitem_search Pro)賦能電商運(yùn)營全指南 item_search
    的頭像 發(fā)表于 01-05 11:03 ?501次閱讀

    利用京東搜索關(guān)鍵詞 API 接口賦能電商運(yùn)營

    利用京東搜索關(guān)鍵詞 API 接口賦能電商運(yùn)營:從技術(shù)調(diào)用到業(yè)務(wù)增長全指南 京東
    的頭像 發(fā)表于 01-05 09:21 ?334次閱讀

    京東關(guān)鍵詞搜索商品列表的Python爬蟲實(shí)戰(zhàn)

    京東關(guān)鍵詞搜索商品列表 Python 爬蟲實(shí)戰(zhàn) 你想要實(shí)現(xiàn)京東關(guān)鍵詞搜索商品的爬蟲,我會(huì)從 合規(guī)聲明、環(huán)境準(zhǔn)備、頁面分析、代碼實(shí)現(xiàn)、反爬優(yōu)化 五個(gè)方面展開,幫助你完成實(shí)戰(zhàn)項(xiàng)目。 一、前
    的頭像 發(fā)表于 01-04 10:16 ?794次閱讀

    item_search-按關(guān)鍵搜索商品列表API接口

    一、引言 淘寶是中國最大的電商平臺(tái)之一,擁有數(shù)億的商品和用戶。為了方便開發(fā)者進(jìn)行應(yīng)用開發(fā),淘寶提供了豐富的API接口,其中之一就是關(guān)鍵詞搜索接口
    的頭像 發(fā)表于 11-16 17:13 ?278次閱讀