如何使用 Python 调用沃尔玛商品详情 API 接口?(完整实操指南)
沃尔玛商品详情 API(核心接口如 Product Retrieval API)是沃尔玛开发者平台(Walmart Developer Portal)提供的标准化数据接口,支持获取商品基础信息、价格、库存、规格、商家信息等核心数据,适配电商分析、供应链管理、导购工具开发等场景。以下是 从前置准备到代码调用、数据解析 的全流程实操指南,基于 Python 语言实现,兼顾专业性与易用性,技术开发者可直接落地对接。
一、前置准备工作
1. 注册沃尔玛开发者账号并获取权限
- 可报告博主,完成企业 / 个人实名认证(企业认证可获取更高调用配额);
- 创建应用(Application),获取核心凭证:
Client ID(应用唯一标识)、Client Secret(签名密钥); - 申请商品详情 API 权限:在应用后台勾选
Product Retrieval接口权限,等待平台审核(通常 1-3 个工作日),审核通过后即可获取调用资格。
⚠️ 关键注意:沃尔玛 API 分为 沙箱环境(Sandbox) 和 生产环境(Production),测试阶段优先使用沙箱环境,避免消耗生产环境配额。
2. 明确接口核心信息
- 核心接口:
Product Retrieval API(获取单商品详情)、Bulk Products API(批量获取商品详情); - 请求方式:RESTful 风格,支持 GET 方法;
- 认证方式:OAuth 2.0 授权(需先获取 Access Token,再调用商品详情接口);
- 响应格式:默认 JSON,支持结构化字段解析;
- 沙箱环境地址:
https://sandbox-api.walmart.com,生产环境地址:https://api.walmart.com。
3. Python 环境配置
安装必备依赖库,用于授权请求、接口调用、数据解析:
pip install requests # 发送 HTTP 请求
pip install python-dotenv # 管理敏感配置(Client ID/Secret)
pip install pandas # 可选,用于数据格式化存储
二、核心流程:OAuth 2.0 授权 + 接口调用
沃尔玛 API 强制要求 OAuth 2.0 授权,需先通过 Client ID 和 Client Secret 获取 Access Token(有效期 1 小时),再用 Token 调用商品详情接口。
1. 配置敏感信息(避免硬编码)
创建 .env 文件存储敏感配置,提高代码安全性:
# .env 文件内容
WALMART_CLIENT_ID=你的ClientID
WALMART_CLIENT_SECRET=你的ClientSecret
WALMART_ENV=sandbox # 可选:sandbox(沙箱)、production(生产)
2. 获取 Access Token(Python 实现)
import os
import requests
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
def get_walmart_access_token():
"""获取 OAuth 2.0 Access Token"""
# 授权地址(沙箱/生产环境区分)
env = os.getenv("WALMART_ENV", "sandbox")
token_url = "https://sandbox-api.walmart.com/v3/token" if env == "sandbox" else "https://api.walmart.com/v3/token"
# 授权参数
payload = {
"grant_type": "client_credentials",
"client_id": os.getenv("WALMART_CLIENT_ID"),
"client_secret": os.getenv("WALMART_CLIENT_SECRET")
}
try:
response = requests.post(token_url, data=payload, timeout=10)
response.raise_for_status() # 抛出 HTTP 错误(如 401 授权失败)
token_data = response.json()
return token_data["access_token"] # 返回 Access Token
except requests.exceptions.RequestException as e:
raise Exception(f"获取 Access Token 失败:{str(e)},响应内容:{response.text if 'response' in locals() else ''}")
# 测试获取 Token
if __name__ == "__main__":
access_token = get_walmart_access_token()
print("Access Token 获取成功:", access_token)
3. 调用商品详情 API(单商品查询)
以 Product Retrieval API 为例,通过商品 ID(productId)获取商品详情,核心参数与响应解析如下:
完整代码实现
def get_walmart_product_detail(product_id, access_token):
"""
调用沃尔玛商品详情 API
:param product_id: 商品唯一 ID(沙箱环境可使用测试商品 ID:如 123456789)
:param access_token: OAuth 2.0 Access Token
:return: 结构化商品详情数据
"""
# 接口地址(沙箱/生产环境区分)
env = os.getenv("WALMART_ENV", "sandbox")
api_url = f"https://sandbox-api.walmart.com/v3/items/{product_id}" if env == "sandbox" else f"https://api.walmart.com/v3/items/{product_id}"
# 请求头(携带 Access Token)
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
# 可选参数:筛选返回字段(减少数据传输量)
params = {
"fields": "itemId,title,brand,price,availability,attributes,images" # 需返回的字段列表
}
try:
response = requests.get(api_url, headers=headers, params=params, timeout=15)
response.raise_for_status()
product_data = response.json()
return product_data
except requests.exceptions.RequestException as e:
raise Exception(f"调用商品详情 API 失败:{str(e)},响应内容:{response.text if 'response' in locals() else ''}")
# 主流程:获取 Token + 调用商品详情
if __name__ == "__main__":
try:
# 1. 获取 Access Token
access_token = get_walmart_access_token()
# 2. 调用商品详情 API(沙箱测试商品 ID:123456789,生产环境需替换为真实商品 ID)
product_id = "123456789"
product_detail = get_walmart_product_detail(product_id, access_token)
# 3. 打印核心商品信息
print("=== 沃尔玛商品详情 ===")
print(f"商品 ID:{product_detail.get('itemId')}")
print(f"商品标题:{product_detail.get('title')}")
print(f"品牌:{product_detail.get('brand')}")
print(f"售价:{product_detail.get('price', {}).get('currentPrice', {}).get('value')} {product_detail.get('price', {}).get('currentPrice', {}).get('currency')}")
print(f"库存状态:{product_detail.get('availability', {}).get('status')}")
print(f"主图 URL:{product_detail.get('images', {}).get('primaryImage', {}).get('url')}")
except Exception as e:
print(f"执行失败:{str(e)}")
4. 批量获取商品详情(Bulk Products API)
若需批量查询多个商品,可使用 Bulk Products API,通过 itemIds 参数传入多个商品 ID(用逗号分隔),代码示例:
def get_walmart_bulk_products(product_ids, access_token):
"""
批量获取商品详情
:param product_ids: 商品 ID 列表(如 ["123456789", "987654321"])
:param access_token: Access Token
:return: 批量商品详情
"""
env = os.getenv("WALMART_ENV", "sandbox")
api_url = "https://sandbox-api.walmart.com/v3/items" if env == "sandbox" else "https://api.walmart.com/v3/items"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
params = {
"itemIds": ",".join(product_ids), # 批量商品 ID 拼接
"fields": "itemId,title,price,availability"
}
try:
response = requests.get(api_url, headers=headers, params=params, timeout=20)
response.raise_for_status()
return response.json()
except Exception as e:
raise Exception(f"批量获取商品详情失败:{str(e)}")
# 测试批量调用
if __name__ == "__main__":
access_token = get_walmart_access_token()
product_ids = ["123456789", "987654321"] # 沙箱测试商品 ID
bulk_data = get_walmart_bulk_products(product_ids, access_token)
print("批量商品详情:", bulk_data)
三、数据解析关键要点
沃尔玛商品详情 API 返回的 JSON 数据结构清晰,核心字段解析如下:
1. 核心字段映射
| 字段路径 | 含义 | 示例值 |
|---|---|---|
itemId |
商品唯一 ID | "123456789" |
title |
商品标题 | "Walmart 无线蓝牙耳机" |
brand |
品牌名称 | "Walmart Essentials" |
price.currentPrice.value |
当前售价 | 29.99 |
price.currentPrice.currency |
货币单位 | "USD" |
availability.status |
库存状态 | "IN_STOCK"(有货) |
attributes.categoryPath |
商品类目 | "Electronics/Audio" |
images.primaryImage.url |
主图 URL | "https://i5.walmartimages.com/..." |
variants.variant |
SKU 列表(多规格商品) | [{"variantId": "xxx",...}] |
2. 复杂字段解析示例(SKU 规格提取)
# 从商品详情中提取 SKU 信息
def parse_sku_info(product_detail):
sku_list = []
variants = product_detail.get("variants", {}).get("variant", [])
for variant in variants:
sku_info = {
"variantId": variant.get("variantId"),
"color": variant.get("attributes", {}).get("color"),
"size": variant.get("attributes", {}).get("size"),
"price": variant.get("price", {}).get("currentPrice", {}).get("value"),
"stockStatus": variant.get("availability", {}).get("status")
}
sku_list.append(sku_info)
return sku_list
# 调用解析函数
sku_info = parse_sku_info(product_detail)
print("SKU 规格信息:", sku_info)
四、常见错误排查(避坑指南)
1. 错误码 401(Unauthorized)
- 原因:
Client ID/Secret错误、Access Token 过期或无效; - 排查:核对
.env中的凭证是否正确,重新获取 Access Token(有效期 1 小时,需定时刷新)。
2. 错误码 403(Forbidden)
- 原因:未申请商品详情 API 权限、沙箱环境调用生产接口;
- 排查:在沃尔玛开发者平台确认接口权限已开通,检查环境地址是否匹配(沙箱 / 生产)。
3. 错误码 429(Too Many Requests)
- 原因:调用频率超限(沃尔玛默认限制:沙箱 100 次 / 分钟,生产 500 次 / 分钟);
- 排查:添加请求延迟(
time.sleep(0.1))、实现限流逻辑,批量调用时拆分请求批次。
4. 错误码 404(Not Found)
- 原因:商品 ID 无效、商品已下架;
- 排查:确认商品 ID 正确,沙箱环境需使用平台提供的测试商品 ID(如 123456789)。
五、进阶优化与合规建议
1. 代码优化
- Token 缓存:Access Token 有效期 1 小时,用 Redis 或本地缓存存储,避免重复获取;
- 异常重试:使用
tenacity库实现带退避策略的重试(应对网络波动):bash
pip install tenacityfrom tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def get_walmart_product_detail(product_id, access_token): # 原有接口调用逻辑 - 批量请求拆分:
Bulk Products API单次最多支持 20 个商品 ID,批量查询时按 20 个 / 批次拆分。
2. 合规使用要求
- 数据用途:仅用于自身经营需求,禁止转售、恶意采集商品数据;
- 频率控制:严格遵守沃尔玛 API 调用配额,避免高频请求导致账号封禁;
- 隐私保护:不得提取商品关联的用户隐私信息,仅使用公开商品数据。
总结
Python 调用沃尔玛商品详情 API 的核心流程是 “OAuth 2.0 授权 → 获取 Access Token → 调用接口 → 数据解析”,关键在于正确配置授权凭证、区分沙箱 / 生产环境、处理频率限制与异常情况。通过本文的代码示例,可快速实现单商品 / 批量商品详情的获取,适配电商数据分析、供应链管理等场景。
若需进一步优化(如 Token 自动刷新、数据入库 MySQL),或对接其他沃尔玛 API(如库存 API、订单 API),可基于本文框架扩展开发。
更多推荐
所有评论(0)