批量获取亚马逊商品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)简化开发,但需注意合规性。
相关推荐
开源技术12 小时前
Fastapi教程: 身份认证与授权03——带有 password 和 Bearer 的简单 OAuth2
fastapi
2601_961946081 天前
AI API 网关实战:从单 Key 管理到企业级多租户架构
大数据·人工智能·金融·架构·api·个人开发
jump_jump1 天前
深入理解 GraphQL:一条查询到底是怎么执行的
性能优化·api·graphql
java1234_小锋1 天前
FastAPI python web开发- 表单数据与模型 & 请求表单与文件 & 响应类型 - 返回文件类型
fastapi
hboot2 天前
AI工程师第五课 - 大语言模型基础
python·llm·fastapi
喜欢的名字被抢了2 天前
Python实战:SQLAlchemy ORM与FastAPI项目集成
开发语言·python·sql·教程·fastapi
林小果12 天前
LinkAGI:面向 Claude Code、Codex 与 Gemini CLI 的统一 API 接入服务
api·codex·claude code·gemini cli
VIP_CQCRE2 天前
用 Ace Data Cloud 快速接入 AI 视频生成:HappyHorse Videos API 实战指南
人工智能·python·api·ai视频生成·acedatacloud
阿豪只会阿巴2 天前
两小时快速入门 FastAPI--第二回
windows·python·fastapi
阿豪只会阿巴3 天前
两小时快速入门 FastAPI--第一回
开发语言·python·fastapi