易贝(eBay)作为全球最大的在线交易平台之一,其开放平台的item_get接口是获取商品详情的核心工具,适用于跨境电商分析、多平台比价、选品系统等场景。本文将全面讲解该接口的对接流程、认证机制、代码实现及最佳实践,帮助开发者系统掌握从入门到精通的全流程。
一、接口基础认知
二、对接前置准备
三、接口调用流程
四、代码实现示例(Python)
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')}")