快手开放平台的 item_get 接口是通过商品 ID 精准获取快手小店商品详情的核心能力,支持返回商品基础信息、价格库存、营销活动、店铺信息等全量数据,广泛应用于电商导购、竞品分析、库存同步、订单履约等业务场景。本攻略从接口认知、权限申请、对接实操、调试优化到合规上线,全方位拆解对接流程,适配个人 / 企业开发者快速落地。
一、接口核心认知:功能与特性
1. 核心价值与适用场景
2. 接口核心限制
3. 核心参数与返回字段
(1)请求参数(必填 + 可选)
(2)返回核心字段(按业务分类)
二、对接前置准备:3 步搞定权限与环境
1. 快手开放平台账号与权限申请
2. 技术环境准备
3. 签名规则(关键!快手电商接口兼容淘宝 TOP 协议)
签名示例
三、对接实操:Python 代码完整实现
1. 依赖安装
2. 完整代码实现
import requests
import hashlib
import time
import json
import pandas as pd
from typing import Dict, Optional
# ==================== 配置信息 ====================
APP_KEY = "你的app_key" # 替换为开放平台获取的app_key
APP_SECRET = "你的app_secret" # 替换为开放平台获取的app_secret
API_URL = "https://open.kuaishou.com/router/rest" # 快手电商API网关地址
SAVE_PATH = "快手商品详情.xlsx" # 商品数据保存路径
def generate_sign(params: Dict, app_secret: str) -> str:
"""
生成快手item_get接口签名(兼容淘宝TOP协议)
:param params: 接口请求参数(不含sign)
:param app_secret: 应用密钥
:return: 大写MD5签名
"""
# 1. 按参数名ASCII升序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 2. 拼接参数字符串
param_str = "&".join([f"{k}={v}" for k, v in sorted_params])
# 3. 追加app_secret并加密
sign_str = f"{param_str}&app_secret={app_secret}"
md5 = hashlib.md5()
md5.update(sign_str.encode("utf-8"))
return md5.hexdigest().upper()
def get_kuaishou_item_detail(item_id: str) -> Optional[Dict]:
"""
调用快手item_get接口,获取商品详情
:param item_id: 快手商品ID
:return: 标准化的商品详情字典,失败返回None
"""
# 1. 构建基础请求参数
params = {
"app_key": APP_KEY,
"method": "taobao.items.get",
"item_id": item_id,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
"format": "json",
"v": "2.0"
}
# 2. 生成签名
params["sign"] = generate_sign(params, APP_SECRET)
try:
# 3. 发送HTTP请求
response = requests.post(
url=API_URL,
params=params,
headers={"Content-Type": "application/x-www-form-urlencoded"},
timeout=15,
verify=True
)
response.raise_for_status() # 抛出HTTP错误(如400/401/500)
result = response.json()
# 4. 解析响应结果
if result.get("code") == 0:
item_data = result.get("data", {}).get("item", {})
if not item_data:
print(f"商品ID {item_id} 无详情数据")
return None
# 5. 标准化商品数据(适配业务使用)
sku_list = item_data.get("sku_list", [])
sku_info = []
for sku in sku_list:
sku_info.append({
"SKU ID": sku.get("sku_id"),
"规格名称": sku.get("sku_name"),
"SKU价格": sku.get("price"),
"SKU库存": sku.get("stock_num")
})
coupon_list = item_data.get("coupon_list", [])
coupon_info = []
for coupon in coupon_list:
coupon_info.append({
"优惠券面额": coupon.get("denomination"),
"使用门槛": coupon.get("threshold"),
"有效期": f"{coupon.get('start_time')}至{coupon.get('end_time')}"
})
return {
"请求时间": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
"商品ID": item_data.get("item_id"),
"商品标题": item_data.get("title"),
"商品主图": item_data.get("pic_url"),
"商品类目": item_data.get("category_name"),
"标价": item_data.get("price"),
"优惠价": item_data.get("promotion_price"),
"总库存": item_data.get("stock_num"),
"累计销量": item_data.get("sales_count"),
"上架状态": "上架" if item_data.get("on_sale_status") == 1 else "下架",
"发货地": item_data.get("location"),
"店铺ID": item_data.get("shop_id"),
"店铺名称": item_data.get("shop_name"),
"店铺类型": item_data.get("shop_type"),
"分销佣金比例": item_data.get("commission_rate"),
"SKU信息": sku_info,
"优惠券信息": coupon_info,
"商品创建时间": item_data.get("create_time"),
"商品更新时间": item_data.get("update_time")
}
else:
error_msg = result.get("msg", "接口调用失败")
error_code = result.get("code", -1)
print(f"商品ID {item_id} 接口返回错误:[{error_code}] {error_msg}")
return None
except requests.exceptions.RequestException as e:
print(f"商品ID {item_id} 请求异常:{str(e)}")
return None
except Exception as e:
print(f"商品ID {item_id} 数据解析异常:{str(e)}")
return None
def batch_get_items(item_ids: list, save_path: str = SAVE_PATH):
"""
批量获取多个商品详情并保存到Excel
:param item_ids: 商品ID列表
:param save_path: 保存路径
"""
all_items = []
for idx, item_id in enumerate(item_ids):
print(f"正在获取第 {idx+1}/{len(item_ids)} 个商品:{item_id}")
item_detail = get_kuaishou_item_detail(item_id)
if item_detail:
all_items.append(item_detail)
# 控制调用频率,避免超限(默认100次/分钟 → 间隔0.6秒)
time.sleep(0.6)
else:
print(f"商品 {item_id} 获取失败,跳过")
# 保存到Excel
if all_items:
df = pd.DataFrame(all_items)
# 处理嵌套的SKU和优惠券信息(转换为字符串)
df["SKU信息"] = df["SKU信息"].apply(lambda x: json.dumps(x, ensure_ascii=False))
df["优惠券信息"] = df["优惠券信息"].apply(lambda x: json.dumps(x, ensure_ascii=False))
df.to_excel(save_path, index=False, engine="openpyxl")
print(f"批量获取完成!共获取 {len(all_items)} 个商品,数据已保存至 {save_path}")
else:
print("批量获取失败,无有效商品数据")
# ==================== 调用示例 ====================
if __name__ == "__main__":
# 单个商品查询
target_item_id = "1234567890" # 替换为实际商品ID
item_detail = get_kuaishou_item_detail(target_item_id)
if item_detail:
print("=== 快手商品详情 ===")
for k, v in item_detail.items():
print(f"{k}: {v}")
# 批量商品查询
# target_item_ids = ["1234567890", "9876543210"] # 替换为实际商品ID列表
# batch_get_items(target_item_ids)