批量获取亚马逊商品SKU商品规格调用流程
批量获取亚马逊商品SKU及商品规格的调用流程主要涉及 注册开发者账号、获取API权限、构建批量请求、处理响应数据 四个核心步骤,以下是详细说明:
一、注册与认证
- 注册亚马逊开发者账号
- 访问 亚马逊开发者中心,使用企业邮箱注册账号(个人账号可能权限受限)。
- 创建 安全配置文件(Security Profile),获取
Client ID
和Client Secret
,用于后续OAuth 2.0认证。
- 申请API访问权限
- 根据需求选择API类型:
- Product Advertising API(PA-API):适合获取商品详情、搜索列表,需提交使用场景说明(如竞品监控、价格追踪)。
- Selling Partner API(SP-API):适合卖家操作(如库存管理、订单处理),需提供卖家账号信息。
- 提交申请后,亚马逊会审核并分配
Access Key ID
和Secret Access Key
(用于签名请求)。
- 根据需求选择API类型:
- 获取OAuth 2.0令牌
- 使用
Client ID
、Client Secret
和Refresh Token
(通过授权流程获取)定期刷新Access Token
(有效期24小时)。 - 示例请求(Python):
python
import requests
def refresh_access_token(client_id, client_secret, refresh_token):
url = "https://api.amazon.com/auth/o2/token"
data = {
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": client_id,
"client_secret": client_secret
}
response = requests.post(url, data=data)
return response.json()["access_token"]
- 使用
二、构建批量请求
- 选择批量查询接口
- PA-API:使用
ListCatalogItems
接口,通过MarketplaceId
(如美国站ATVPDKIKX0DER
)和Query
(关键词或ASIN列表)批量获取商品。 - SP-API:使用
/products/v0/listings/{sellerId}
接口,通过卖家ID和ASIN列表获取商品规格。
- PA-API:使用
- 设置请求参数
- 必需参数:
MarketplaceId
:目标站点ID。Query
:ASIN列表(如["B000012345", "B000067890"]
)。MaxResultsPerPage
:每页最多返回1000条数据。
- 可选参数:
IncludedData
:指定返回字段(如images,price,description,attributes
)。SortBy
:按价格、评分等排序。
- 必需参数:
- 生成签名(PA-API示例)
- PA-API需对请求参数进行签名,确保安全性:
python
import hmac
import hashlib
import base64
from datetime import datetime
def generate_signature(params, secret_key):
sorted_params = sorted(params.items())
query_string = "&".join([f"{k}={v}" for k, v in sorted_params])
signature = hmac.new(
secret_key.encode(),
query_string.encode(),
hashlib.sha256
).digest()
return base64.b64encode(signature).decode()
params = {
"Service": "AWSECommerceService",
"Operation": "ListCatalogItems",
"MarketplaceId": "ATVPDKIKX0DER",
"Query": "B000012345,B000067890",
"AWSAccessKeyId": "YOUR_ACCESS_KEY",
"Timestamp": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
}
params["Signature"] = generate_signature(params, "YOUR_SECRET_KEY")
- PA-API需对请求参数进行签名,确保安全性:
三、发送请求与处理响应
- 发送HTTP请求
- 使用GET或POST方式发送请求到亚马逊API服务器:
python
import requests
def batch_get_products(asins, marketplace_id, access_token):
url = "https://api.amazon.com/products/v0/listings"
headers = {
"Authorization": f"Bearer {access_token}",
"x-amz-access-token": access_token
}
params = {
"MarketplaceId": marketplace_id,
"Query": ",".join(asins),
"IncludedData": "images,price,attributes"
}
response = requests.get(url, headers=headers, params=params)
return response.json()
- 使用GET或POST方式发送请求到亚马逊API服务器:
- 解析响应数据
- 响应通常为JSON格式,包含商品SKU、标题、价格、库存、规格等字段:
json
{
"Items": [
{
"ASIN": "B000012345",
"Title": "Example Product",
"Price": {
"Amount": 199.99,
"CurrencyCode": "USD"
},
"Attributes": {
"Color": "Black",
"Size": "XL",
"Material": "Cotton"
},
"Images": [
{
"URL": "https://m.media-amazon.com/images/I/51Zymoq7UnL.jpg",
"Height": 500,
"Width": 500
}
]
}
]
}
- 响应通常为JSON格式,包含商品SKU、标题、价格、库存、规格等字段:
- 错误处理与重试
- 检查响应状态码:
200
:成功,解析数据。403
:权限不足,检查API密钥或令牌。429
:频率超限,实现指数退避重试(如等待5秒后重试)。
- 检查响应状态码:
四、优化与扩展
- 分页处理
- 若商品数量超过单页限制(如1000条),需循环请求下一页:
python
def batch_get_all_products(asins, marketplace_id, access_token):
all_data = []
page_size = 1000
for i in range(0, len(asins), page_size):
page_asins = asins[i:i + page_size]
response = batch_get_products(page_asins, marketplace_id, access_token)
all_data.extend(response["Items"])
return all_data
- 若商品数量超过单页限制(如1000条),需循环请求下一页:
- 数据存储与更新
- 将获取的数据存储到数据库(如MySQL、MongoDB)或CSV文件,便于后续分析:
python
import csv
def save_to_csv(data, filename="products.csv"):
with open(filename, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["ASIN", "Title", "Price", "Color", "Size"])
for item in data:
writer.writerow([
item["ASIN"],
item["Title"],
item["Price"]["Amount"],
item["Attributes"].get("Color", ""),
item["Attributes"].get("Size", "")
])
- 将获取的数据存储到数据库(如MySQL、MongoDB)或CSV文件,便于后续分析:
- 结合第三方服务
- 若亚马逊API限制较多,可考虑使用第三方服务(如Pangolin Scrape API)简化开发,但需注意合规性。