易贝(eBay)作为全球最大的在线交易平台之一,其开放平台的item_get接口是获取商品详情的核心工具,适用于跨境电商分析、多平台比价、选品系统等场景。本文将全面讲解该接口的对接流程、认证机制、代码实现及最佳实践,帮助开发者系统掌握从入门到精通的全流程。
一、接口基础认知
核心功能item_get接口通过商品 ID(Item ID)获取 eBay 平台的商品详细信息,涵盖:
基本信息:商品 ID、标题、描述、主图及图片列表、商品 URL
价格信息:售价、原价、折扣、货币单位(支持全球多币种)
库存信息:库存数量、销售状态、是否支持立即购买
交易信息:已售数量、评分、评论数、拍卖结束时间(针对拍卖商品)
规格信息:颜色、尺寸等多规格组合及对应价格 / 库存
物流信息:运费、配送范围、预计送达时间、发货地
卖家信息:卖家 ID、店铺名称、好评率、卖家所在地
认证方式:采用 OAuth 2.0 认证(需 Access Token)
二、对接前置准备
开发者账号注册访问eBay 开发者平台注册账号,完成开发者认证(个人和企业账号均可,权限略有差异)。
创建应用与获取密钥
在开发者控制台创建应用,选择应用类型(如 "Client Credentials" 或 "Authorization Code")
应用创建后,获取App ID(Client ID)和Cert ID(Client Secret)
通过 OAuth 2.0 流程获取Access Token(有效期通常为 7200 秒)
权限申请
item_get接口属于 Buy API 中的 Browse API,需在应用中启用该权限
基础权限可获取公开商品信息,高级权限需单独申请
接口调用有频率限制(默认 QPS 为 5,可申请提升)
环境准备
开发语言:支持 Python/Java/PHP 等任意可发起 HTTP 请求的语言
测试工具:Postman 或 eBay 开放平台调试工具
依赖库:Python 需安装requests库(pip install requests)
三、接口调用流程
参数组装接口参数分为「请求头参数」和「路径参数」:
请求头参数:Authorization(Bearer Token)、X-EBAY-C-MARKETPLACE-ID(站点 ID)
路径参数:item_id(商品 ID,必填)
查询参数:fieldgroups(需要返回的字段组,可选)
示例请求头:
plaintext
{
"Authorization": "Bearer your_access_token",
"X-EBAY-C-MARKETPLACE-ID": "EBAY-US",
"Content-Type": "application/json"
}
Token 获取通过 Client Credentials 流程获取 Access Token:
向https://api.ebay.com/identity/v1/oauth2/token发送 POST 请求
请求体包含grant_type=client_credentials和scope=https://api.ebay.com/oauth/api_scope/buy.browse
使用 Base64 编码的App ID:Cert ID进行 Basic 认证
响应中包含access_token和expires_in(有效期)
发送请求将商品 ID 放入 URL 路径,添加必要的请求头,发送 GET 请求到接口地址。
响应处理成功响应包含商品详情的完整字段,错误响应包含errors数组(错误码和描述)。
四、代码实现示例(Python)
以下是调用 eBay item_get接口的完整代码,包含 Token 获取、多站点支持和错误处理:
import requests
import base64
import time
class EbayItemApi:
def init(self, client_id, client_secret, marketplace_id="EBAY-US"):
self.client_id = client_id
self.client_secret = client_secret
self.marketplace_id = marketplace_id # 站点ID:EBAY-US/EBAY-GB/EBAY-DE等
self.base_url = "https://api.ebay.com/buy/browse/v1/item"
self.token_url = "https://api.ebay.com/identity/v1/oauth2/token"
self.access_token = None
self.token_expire_time = 0 # 令牌过期时间(时间戳,秒)
def get_access_token(self):
"""获取Access Token"""
# 检查是否已有有效令牌
if self.access_token and time.time() < self.token_expire_time - 60:
return self.access_token
# 构建Basic认证
auth_str = f"{self.client_id}:{self.client_secret}"
auth_bytes = auth_str.encode('utf-8')
auth_base64 = base64.b64encode(auth_bytes).decode('utf-8')
# 发送请求
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": f"Basic {auth_base64}"
}
data = {
"grant_type": "client_credentials",
"scope": "https://api.ebay.com/oauth/api_scope/buy.browse"
}
try:
response = requests.post(
self.token_url,
headers=headers,
data=data,
timeout=10
)
response.raise_for_status()
result = response.json()
self.access_token = result["access_token"]
self.token_expire_time = time.time() + int(result["expires_in"])
return self.access_token
except Exception as e:
raise Exception(f"获取令牌失败: {str(e)}")
def item_get(self, item_id, fieldgroups=None):
"""
获取商品详情
:param item_id: 商品ID(必填)
:param fieldgroups: 需要返回的字段组,多个用逗号分隔
:return: 商品详情数据
"""
# 获取令牌
self.get_access_token()
# 构建请求头
headers = {
"Authorization": f"Bearer {self.access_token}",
"X-EBAY-C-MARKETPLACE-ID": self.marketplace_id,
"Content-Type": "application/json"
}
# 构建URL
url = f"{self.base_url}/{item_id}"
params = {}
if fieldgroups:
params["fieldgroups"] = fieldgroups
try:
# 发送GET请求
response = requests.get(
url=url,
headers=headers,
params=params,
timeout=15
)
response.raise_for_status()
result = response.json()
# 处理响应
if "errors" in result:
return {
"success": False,
"errors": result["errors"]
}
return {
"success": True,
"data": result
}
except Exception as e:
return {
"success": False,
"error_msg": f"请求异常: {str(e)}"
}
使用示例
if name == "main":
# 替换为实际参数
CLIENT_ID = "your_client_id" # App ID
CLIENT_SECRET = "your_client_secret" # Cert ID
MARKETPLACE_ID = "EBAY-US" # 美国站点
# 初始化API客户端
api = EbayItemApi(CLIENT_ID, CLIENT_SECRET, MARKETPLACE_ID)
# 调用接口,获取商品详情(Item ID为示例)
result = api.item_get(
item_id="123456789012",
fieldgroups="PRODUCT,INVENTORY,PRICING,Seller,SHIPPING"
)
if result["success"]:
item = result["data"]
print(f"商品ID: {item.get('itemId')}")
print(f"标题: {item.get('title')}")
print(f"售价: {item.get('price', {}).get('value')} {item.get('price', {}).get('currency')}")
print(f"库存: {item.get('inventory', {}).get('availableQuantity')}")
print(f"卖家: {item.get('seller', {}).get('username')}")
print(f"好评率: {item.get('seller', {}).get('feedbackPercentage')}%")
print(f"主图: {item.get('image', {}).get('imageUrl')}")
print(f"商品URL: {item.get('itemWebUrl')}")
else:
print(f"获取失败: {result.get('error_msg') or result.get('errors')}")
五、参数与返回字段详解
核心参数说明
item_id:商品唯一标识,可从 eBay 商品详情页 URL 提取(如https://www.ebay.com/itm/123456789012中,item_id=123456789012)
fieldgroups:指定返回字段组,常用组合:
BASIC:基础信息(默认)
PRODUCT:商品属性(品牌、型号等)
PRICING:价格详情(原价、折扣等)
INVENTORY:库存信息
SHIPPING:物流信息
SELLER:卖家信息
RETURNS:退货政策
多规格商品处理多规格商品的详细信息在variations字段中:
json
"variations": {
"variation": [
{
"variationId": "12345",
"attributes": [
{"name": "Color", "value": "Black"},
{"name": "Size", "value": "M"}
],
"price": {"value": "29.99", "currency": "USD"},
"availableQuantity": 50
}
]
}
价格与库存特殊说明
拍卖商品的价格信息包含currentBidPrice(当前出价)和reservePriceMet(是否达到保留价)
库存信息中availableQuantity为剩余库存,soldQuantity为已售数量
六、错误处理与调试
常见错误码解析
INVALID_ACCESS_TOKEN:令牌无效 → 重新获取 Access Token
INVALID_ITEM_ID:商品 ID 无效 → 检查 item_id 是否正确
MARKETPLACE_ID_INVALID:站点 ID 错误 → 确认X-EBAY-C-MARKETPLACE-ID是否正确
REQUEST_LIMIT_EXCEEDED:请求超限 → 降低调用频率,未超过 QPS 限制
RESOURCE_NOT_FOUND:商品不存在 → 商品已下架或被删除
调试技巧
使用 eBay 开发者平台的API 测试工具验证请求
检查X-EBAY-C-MARKETPLACE-ID与商品所在站点是否匹配
确保 Access Token 的 scope 包含buy.browse权限
开启请求日志,记录完整的请求头和响应内容
七、最佳实践与注意事项
全球多站点适配
为不同站点设置对应的marketplace_id(如英国站用EBAY-GB)
处理多币种转换(结合实时汇率接口)
注意区域特有字段(如欧盟站点的增值税信息)
性能优化
按需指定fieldgroups,只请求必要的字段(减少数据传输量)
实现令牌缓存机制(在有效期内复用,减少 Token 请求次数)
批量获取商品详情时,控制并发数(建议≤5),避免触发限流
合规使用
遵守《eBay 开发者协议》,不得用于爬虫或数据倒卖
展示商品数据时需包含 eBay 的品牌标识和原始商品链接
不得修改或歪曲商品信息,需保持数据真实性
稳定性保障
实现令牌自动刷新机制,在过期前 60 秒重新获取
设计超时重试策略(最多 3 次,间隔 1-3 秒)
监控接口调用成功率,异常时切换备用 IP 或服务节点
通过本文的指南,开发者可以系统掌握 eBay item_get接口的对接方法和全球跨境场景适配技巧。在实际应用中,应重点关注 OAuth 2.0 认证的正确性和多站点适配,设计合理的调用策略,平衡数据实时性与接口性能,构建稳定高效的商品信息获取功能