Android Activity - 根 Activity 变化、APP 崩溃与自动重启
2026/8/5 12:46:07
你想要获取京东关键词相关的 API 接口,以此替代传统爬虫,更合规、稳定地获取商品列表等信息,我会先讲解官方合规的 API 获取与使用方式(推荐),再说明非官方接口的情况(仅供学习),并给出具体的调用示例。
京东没有向普通个人用户开放免费的关键词搜索 API,所有合法可用的接口均需通过「京东开放平台」申请,且多数接口要求企业资质,同时有调用频率限制和费用规则;非官方的第三方接口存在合规性、稳定性风险,仅建议用于技术学习。
这是获取京东关键词相关数据的唯一合法途径,适合商用或合规的开发场景。
官网地址:https://open.jd.com/home/home#/index
AppKey:应用唯一标识(调用 API 时必填);AppSecret:应用密钥(用于生成 API 签名,需严格保密)。京东开放平台中,与「关键词搜索商品」匹配的核心接口是:
jingdong.union.open.goods.promotion.query(京东联盟商品搜索接口);官方 API 调用的核心是签名生成(京东采用 MD5 签名防篡改),以下是简化示例:
python
运行
import requests import hashlib import time import json class JdOfficialAPI: def __init__(self, app_key, app_secret): self.app_key = app_key # 替换为你的AppKey self.app_secret = app_secret # 替换为你的AppSecret self.base_url = "https://router.jd.com/api" # 京东API网关固定地址 def _generate_sign(self, params): """生成API签名(京东API必填,规则必须严格遵循)""" # 1. 按参数名ASCII升序排序 sorted_params = sorted(params.items(), key=lambda x: x[0]) # 2. 拼接签名字符串(AppSecret + 参数名值对 + AppSecret) sign_str = self.app_secret for k, v in sorted_params: if v: # 跳过空值参数 sign_str += f"{k}{v}" sign_str += self.app_secret # 3. MD5加密并转大写 sign = hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper() return sign def search_goods(self, keyword, page=1, page_size=20): """ 调用京东联盟商品搜索API :param keyword: 搜索关键词 :param page: 页码(从1开始) :param page_size: 每页商品数(最大20) :return: 商品列表字典,失败返回None """ # 1. 构造基础参数(接口要求的固定参数) params = { "method": "jingdong.union.open.goods.promotion.query", # 接口方法名 "app_key": self.app_key, "format": "json", # 返回格式(固定为json) "v": "1.0", # 接口版本(固定为1.0) "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"), # 北京时间戳 "page_index": page, # 页码 "page_size": page_size, # 每页条数 "keyword": keyword # 搜索关键词 } # 2. 生成签名并添加到参数中 params["sign"] = self._generate_sign(params) # 3. 发送请求 try: response = requests.get(self.base_url, params=params, timeout=10) result = response.json() # 校验调用结果 if result.get("code") == 0: return result.get("data", {}) # 返回商品数据 else: print(f"API调用失败:{result.get('msg')}(错误码:{result.get('code')})") return None except Exception as e: print(f"请求异常:{str(e)}") return None # 调用示例 if __name__ == "__main__": # 替换为你从开放平台获取的真实凭证 APP_KEY = "你的AppKey" APP_SECRET = "你的AppSecret" # 初始化API对象 jd_api = JdOfficialAPI(APP_KEY, APP_SECRET) # 调用关键词搜索接口 goods_data = jd_api.search_goods(keyword="Python编程", page=1, page_size=20) if goods_data: print("获取到的商品数据:") print(json.dumps(goods_data, ensure_ascii=False, indent=2))非官方接口是第三方开发者基于爬虫封装的 API,无需企业资质,但风险极高,仅适合个人技术学习。
python
运行
import requests import json def get_jd_goods_unofficial(keyword, page=1): """ 非官方京东商品搜索API调用(示例,接口可能已失效) """ # 替换为开源/口碑较好的非官方API地址 url = "https://api.example.com/jd/search" params = { "keyword": keyword, "page": page, "page_size": 20, "token": "test_token" # 部分非官方API需临时token } try: response = requests.get(url, params=params, timeout=10) if response.status_code == 200: return response.json() else: print(f"调用失败,状态码:{response.status_code}") return None except Exception as e: print(f"请求异常:{str(e)}") return None # 学习用调用示例 if __name__ == "__main__": data = get_jd_goods_unofficial("Python编程", page=1) if data: print(json.dumps(data, ensure_ascii=False, indent=2))