批量获取亚马逊商品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)简化开发,但需注意合规性。
相关推荐
RestCloud20 小时前
iPaaS实施的前提是先进行集成关系的梳理
api
用户268001379191 天前
小红书笔记详情API接口系列,json数据返回
api
RestCloud2 天前
通过ETL工具,同步SQLserver数据至starrocks数据库
api
RestCloud2 天前
爆单不慌!RestCloud iPaaS让618双11财务对账丝滑到飞起
api
wuzuyu3652 天前
SyntaxError: Failed to execute ‘open‘ on ‘XMLHttpRequest‘: Invalid URL
ajax·html·api
老顾聊技术2 天前
网关如何聚合各个微服务的接口文档?
微服务·api
万粉变现经纪人2 天前
如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
ide·pycharm·beautifulsoup·pandas·fastapi·pip·httpx
掘金安东尼2 天前
🚀 6 行 HTML,让应用瞬间“起飞”:Speculation Rules API 全解析
前端·api·浏览器
RestCloud3 天前
从易用性的角度来看,哪个ETL平台比较好用?
api
RestCloud3 天前
了解CDC(变更数据捕获)如何革新数据集成方式
api