批量获取亚马逊商品SKU商品规格调用流程

批量获取亚马逊商品SKU及商品规格的调用流程主要涉及 注册开发者账号、获取API权限、构建批量请求、处理响应数据 四个核心步骤,以下是详细说明:

一、注册与认证

  1. 注册亚马逊开发者账号

    • 访问 [亚马逊开发者中心],使用企业邮箱注册账号(个人账号可能权限受限)。
    • 创建 安全配置文件(Security Profile) ,获取 Client IDClient Secret,用于后续OAuth 2.0认证。
  2. 申请API访问权限

    • 根据需求选择API类型:

      • Product Advertising API(PA-API) :适合获取商品详情、搜索列表,需提交使用场景说明(如竞品监控、价格追踪)。
      • Selling Partner API(SP-API) :适合卖家操作(如库存管理、订单处理),需提供卖家账号信息。
    • 提交申请后,亚马逊会审核并分配 Access Key IDSecret Access Key(用于签名请求)。

  3. 获取OAuth 2.0令牌

    • 使用 Client IDClient SecretRefresh Token(通过授权流程获取)定期刷新 Access Token(有效期24小时)。

    • 示例请求(Python):

      kotlin 复制代码
      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"]

二、构建批量请求

  1. 选择批量查询接口

    • PA-API :使用 ListCatalogItems 接口,通过 MarketplaceId(如美国站 ATVPDKIKX0DER)和 Query(关键词或ASIN列表)批量获取商品。
    • SP-API :使用 /products/v0/listings/{sellerId} 接口,通过卖家ID和ASIN列表获取商品规格。
  2. 设置请求参数

    • 必需参数

      • MarketplaceId:目标站点ID。
      • Query:ASIN列表(如 ["B000012345", "B000067890"])。
      • MaxResultsPerPage:每页最多返回1000条数据。
    • 可选参数

      • IncludedData:指定返回字段(如 images,price,description,attributes)。
      • SortBy:按价格、评分等排序。
  3. 生成签名(PA-API示例)

    • PA-API需对请求参数进行签名,确保安全性:

      scss 复制代码
      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")

三、发送请求与处理响应

  1. 发送HTTP请求

    • 使用GET或POST方式发送请求到亚马逊API服务器:

      csharp 复制代码
      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()
  2. 解析响应数据

    • 响应通常为JSON格式,包含商品SKU、标题、价格、库存、规格等字段:

      css 复制代码
      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
              }
            ]
          }
        ]
      }
  3. 错误处理与重试

    • 检查响应状态码:

      • 200:成功,解析数据。
      • 403:权限不足,检查API密钥或令牌。
      • 429:频率超限,实现指数退避重试(如等待5秒后重试)。

四、优化与扩展

  1. 分页处理

    • 若商品数量超过单页限制(如1000条),需循环请求下一页:

      ini 复制代码
      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
  2. 数据存储与更新

    • 将获取的数据存储到数据库(如MySQL、MongoDB)或CSV文件,便于后续分析:

      kotlin 复制代码
      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", "")
                  ])
  3. 结合第三方服务

    • 若亚马逊API限制较多,可考虑使用第三方服务(如Pangolin Scrape API)简化开发,但需注意合规性。
相关推荐
RestCloud7 小时前
ETL调度最佳实践:避免高峰期任务冲突与资源争抢
api
RestCloud8 小时前
RestCloud × 物流行业:让货物追踪更精准,让供应链协同更高效
api
一只专注做软件的湖南人8 小时前
京东商品评论接口(jingdong.ware.comment.get)技术解析:数据拉取与情感分析优化
前端·后端·api
老坛程序员1 天前
FastAPI WebSocket 由浅入深的开发范例
websocket·网络协议·fastapi
API开发2 天前
apiSQL+GoView:一个API接口开发数据大屏
前端·后端·api·数据可视化·数据大屏·apisql
万粉变现经纪人2 天前
如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘tokenizers’ 问题
python·selenium·测试工具·scrapy·beautifulsoup·fastapi·pip
BTU_YC2 天前
FastAPI+Vue前后端分离架构指南
vue.js·架构·fastapi
RestCloud2 天前
医疗数据集成的挑战,iPaaS 如何保障隐私与安全?
api
RestCloud2 天前
数据传输一致性保障:如何避免‘少数据’或‘脏数据’?
api