批量获取亚马逊商品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
(用于签名请求)。
-
-
获取OAuth 2.0令牌
-
使用
Client ID
、Client Secret
和Refresh Token
(通过授权流程获取)定期刷新Access Token
(有效期24小时)。 -
示例请求(Python):
kotlinpython 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需对请求参数进行签名,确保安全性:
scsspython 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")
-
三、发送请求与处理响应
-
发送HTTP请求
-
使用GET或POST方式发送请求到亚马逊API服务器:
csharppython 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()
-
-
解析响应数据
-
响应通常为JSON格式,包含商品SKU、标题、价格、库存、规格等字段:
cssjson { "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 } ] } ] }
-
-
错误处理与重试
-
检查响应状态码:
200
:成功,解析数据。403
:权限不足,检查API密钥或令牌。429
:频率超限,实现指数退避重试(如等待5秒后重试)。
-
四、优化与扩展
-
分页处理
-
若商品数量超过单页限制(如1000条),需循环请求下一页:
inipython 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
-
-
数据存储与更新
-
将获取的数据存储到数据库(如MySQL、MongoDB)或CSV文件,便于后续分析:
kotlinpython 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", "") ])
-
-
结合第三方服务
- 若亚马逊API限制较多,可考虑使用第三方服务(如Pangolin Scrape API)简化开发,但需注意合规性。