小红书的item_get接口是获取商品全方位信息的核心工具,能返回商品价格、规格、库存、销量、图文详情等关键数据,适配竞品调研、电商选品、舆情监测等电商相关场景。该接口无官方原生公开接口,多依赖第三方合规服务商封装的接口实现功能,以下是从入门到精通的对接全攻略:
一、接口核心认知
二、对接前置准备
三、实操落地:Python 代码实现完整流程
import requests
import hashlib
import time
import json
import logging
# 配置日志,记录接口调用情况
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
handlers=[logging.FileHandler("xiaohongshu_item_get.log"), logging.StreamHandler()]
)
# 接口核心配置,替换为服务商提供的信息
API_KEY = "你的key"
API_SECRET = "你的secret"
API_URL = "https://api - gw.onebound.cn/smallredbook/item_get" # 服务商接口地址
def generate_sign(params):
"""生成签名,不同服务商规则可能不同,此处为通用MD5规则"""
# 按参数名ASCII升序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼接参数字符串
param_str = "&".join([f"{k}={v}" for k, v in sorted_params]) + f"&secret={API_SECRET}"
# MD5加密并转为大写
md5 = hashlib.md5()
md5.update(param_str.encode("utf - 8"))
return md5.hexdigest().upper()
def get_xiaohongshu_item(num_iid, cache="no"):
"""
调用item_get接口获取小红书商品详情
:param num_iid: 小红书商品ID
:param cache: 是否使用缓存
:return: 标准化后的商品数据
"""
# 1. 构建请求参数
params = {
"key": API_KEY,
"api_name": "item_get",
"num_iid": num_iid,
"cache": cache,
"timestamp": str(int(time.time() * 1000)) # 毫秒级时间戳
}
# 2. 生成签名
params["sign"] = generate_sign(params)
try:
# 3. 发送GET请求
response = requests.get(
url=API_URL,
params=params,
timeout=15,
verify=True
)
response.raise_for_status()
result = response.json()
# 4. 解析响应数据
if result.get("code") == 200 and result.get("data"):
raw_data = result["data"]
# 标准化数据格式
standard_data = {
"商品ID": raw_data.get("num_iid", ""),
"商品名称": raw_data.get("title", ""),
"商品价格": raw_data.get("price", 0),
"优惠价格": raw_data.get("promotion_price", 0),
"库存": raw_data.get("stock", 0),
"销量": raw_data.get("sales", 0),
"品牌": raw_data.get("brand", ""),
"商品主图": raw_data.get("pic_url", ""),
"商品图集": ",".join(raw_data.get("pic_list", [])),
"商品规格": str(raw_data.get("spec_list", {})),
"商品详情": raw_data.get("desc", ""),
"店铺名称": raw_data.get("shop_name", ""),
"店铺评分": raw_data.get("shop_score", 0),
"发布时间": raw_data.get("pub_time", ""),
"数据获取时间": time.strftime("%Y - %m - %d %H:%M:%S", time.localtime())
}
return {"success": True, "data": standard_data}
else:
error_msg = result.get("msg", "接口调用失败")
logging.error(f"数据获取失败:{error_msg}")
return {"success": False, "error_msg": error_msg}
except requests.exceptions.RequestException as e:
logging.error(f"网络异常:{str(e)}")
return {"success": False, "error_msg": f"网络异常:{str(e)}"}
except Exception as e:
logging.error(f"数据处理异常:{str(e)}")
return {"success": False, "error_msg": f"数据处理异常:{str(e)}"}
# 调用示例
if __name__ == "__main__":
# 替换为实际小红书商品ID
test_item_id = "5eb1097ba091410953951d17"
item_info = get_xiaohongshu_item(test_item_id)
if item_info["success"]:
print("商品详情获取成功:")
for key, value in item_info["data"].items():
print(f"{key}:{value}")
else:
print(f"商品详情获取失败:{item_info['error_msg']}")