0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

京东关键词item_search-按关键字搜索京东商品

来源:jf_57394773 作者:jf_57394773 2026-01-06 09:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

京东关键词搜索(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(可通过「分类列表接口」获取) 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< String, String > params) {
        // 按ASCII升序排序
        List< Map.Entry< String, String >> entryList = new ArrayList<  >(params.entrySet());
        entryList.sort(Map.Entry.comparingByKey());
        // 拼接字符串
        StringBuilder signStr = new StringBuilder();
        for (Map.Entry< String, String > 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< String, String > 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< String, String > 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. 核心字段提取(JSON 结构示例)

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(低评价占比,竞争小)、couponInfo.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
    API
    +关注

    关注

    2

    文章

    2507

    浏览量

    67141
  • 京东
    +关注

    关注

    2

    文章

    1135

    浏览量

    50161
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    从踩坑到高效落地:关键词搜索京东商品列表 API 的实操心得

    京东商品列表 API 是获取京东平台商品数据的核心接口,支持关键词搜索、分类筛选、价格区间、销量排序等多条件查询,返回
    的头像 发表于 03-11 13:29 791次阅读

    关键词搜索京东列表 API 技术对接指南

    一、前言 在电商数据服务、代购集运系统搭建、电商平台竞品分析、自有商城商品同步等业务场景中,京东商品列表的精准、实时获取是核心环节之一。 二、接口概述 关键词
    的头像 发表于 02-05 16:36 621次阅读

    京东关键词的应用

    京东关键词应用核心是围绕搜索匹配与流量获取,贯穿商品上架、搜索优化、付费推广、精细化运营等全链路,以精准匹配用户需求、提升排名与转化为目标。以下是具体应用与实操方法: 一、
    的头像 发表于 01-20 09:05 1119次阅读

    使用京东关键词搜索接口获取商品数据的实操指南

    一、接口接入前期准备 使用京东关键词搜索接口前,需完成京东开放平台的账号认证、应用创建及权限申请,这是获取合法调用资格的基础,也是保障接口稳定调用的前提。 (一)注册并认证开发者账号 1. 访问
    的头像 发表于 01-12 11:46 725次阅读

    京东关键词API接口获取

    你想要获取京东关键词相关的 API 接口,以此替代传统爬虫,更合规、稳定地获取商品列表等信息,我会先讲解 官方合规的 API 获取与使用方式 (推荐),再说明非官方接口的情况(仅供学习),并给出
    的头像 发表于 01-09 14:16 1079次阅读

    京东关键词搜索商品列表的Python实战

    一、实现思路分析 URL 构造 :京东搜索 URL 格式为 https://search.jd.com/Search?keyword=关键词
    的头像 发表于 01-09 10:34 1305次阅读

    京东关键词 API 场景的需求梳理模板

    京东关键词 API 场景需求梳理模板 本模板适用于 联盟推广、商家运营、工具开发、市场分析 等基于京东关键词 API 的业务需求梳理,可直接用于需求文档撰写、API 对接方案评审。 核心模块 填写项
    的头像 发表于 01-08 13:45 343次阅读

    京东关键词的应用场景

    京东关键词在 API 层面的应用,是串联 商品检索、数据运营、商业决策、工具开发 的核心纽带,结合京东开放平台 API(如商品查询、联盟推广、数据统计类接口),其应用场景覆盖电商全链路
    的头像 发表于 01-08 13:38 967次阅读

    京东关键词搜索接口获取商品数据的实操指南

    京东关键词搜索接口获取商品数据 实操指南 本指南聚焦 京东开放平台合规接口 (item_search基础版 /
    的头像 发表于 01-07 13:56 517次阅读

    京东关键词API赋能

    京东关键词 API 赋能:从数据采集到业务增长的全链路落地指南 京东关键词 API(以item_search/item_search_pro为核心)的核心赋能价值,是 打破电商数据壁垒
    的头像 发表于 01-07 09:53 1028次阅读

    京东关键字搜索商品 API接口item_search Pro

    京东搜索商品 API(item_search Pro)赋能电商运营全指南 item_search Pro 是
    的头像 发表于 01-05 11:03 811次阅读

    浅谈京东关键词

    一、京东搜索关键词的核心特性 支持中文直接搜索京东官网支持中文关键词输入(如 “笔记本电脑”
    的头像 发表于 01-04 10:40 1460次阅读

    京东关键词搜索商品列表的Python爬虫实战

    京东关键词搜索商品列表 Python 爬虫实战 你想要实现京东关键词搜索商品的爬虫,我会从 合规
    的头像 发表于 01-04 10:16 1588次阅读

    Temu跨境电商关键字搜索Temu商品API的应用及接口请求示例

    限于以下几个方面: 用户搜索商品:当用户在Temu平台上输入关键字搜索商品时,API会根据输入的关键字
    的头像 发表于 11-29 15:08 884次阅读

    item_search-关键字搜索商品列表API接口

    一、引言 淘宝是中国最大的电商平台之一,拥有数亿的商品和用户。为了方便开发者进行应用开发,淘宝提供了丰富的API接口,其中之一就是关键词搜索接口。通过该接口,开发者可以轻松地获取淘宝上的商品
    的头像 发表于 11-16 17:13 476次阅读