亚马逊产品广告 API 5.0 错误:“代码”:“TooManyRequests”,“消息”:“请求因请求限制而被拒绝

问题描述 投票:0回答:1

我正在尝试通过亚马逊产品广告 API 5.0 获取产品信息,但我一直收到相同的错误:

Error calling PA-API 5.0!
Status code: 429
Errors : {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was denied due to request throttling. Please verify the number of requests made per second to the Amazon Product Advertising API."}]}
Request ID: ee3f3ad0-e512-463f-b34b-395af81e347d

我按照docs中的说明进行操作,但我似乎无法解决问题。

我下载了 python 示例包 并使用了 sample_get_items_api.py 脚本:

from paapi5_python_sdk.api.default_api import DefaultApi
from paapi5_python_sdk.models.condition import Condition
from paapi5_python_sdk.models.get_items_request import GetItemsRequest
from paapi5_python_sdk.models.get_items_resource import GetItemsResource
from paapi5_python_sdk.models.partner_type import PartnerType
from paapi5_python_sdk.rest import ApiException


def parse_response(item_response_list):
    """
    The function parses GetItemsResponse and creates a dict of ASIN to Item object
    :param item_response_list: List of Items in GetItemsResponse
    :return: Dict of ASIN to Item object
    """
    mapped_response = {}
    for item in item_response_list:
        mapped_response[item.asin] = item
    return mapped_response


def get_items():
    """ Following are your credentials """
    """ Please add your access key here """
    access_key = "<YOUR ACCESS KEY>"

    """ Please add your secret key here """
    secret_key = "<YOUR SECRET KEY>"

    """ Please add your partner tag (store/tracking id) here """
    partner_tag = "<YOUR PARTNER TAG>"

    """ PAAPI host and region to which you want to send request """
    """ For more details refer: https://webservices.amazon.com/paapi5/documentation/common-request-parameters.html#host-and-region"""
    host = "webservices.amazon.com"
    region = "us-east-1"

    """ API declaration """
    default_api = DefaultApi(
        access_key=access_key, secret_key=secret_key, host=host, region=region
    )

    """ Request initialization"""

    """ Choose item id(s) """
    item_ids = ["059035342X", "B00X4WHP5E", "B00ZV9RDKK"]

    """ Choose resources you want from GetItemsResource enum """
    """ For more details, refer: https://webservices.amazon.com/paapi5/documentation/get-items.html#resources-parameter """
    get_items_resource = [
        GetItemsResource.ITEMINFO_TITLE,
        GetItemsResource.OFFERS_LISTINGS_PRICE,
    ]

    """ Forming request """

    try:
        get_items_request = GetItemsRequest(
            partner_tag=partner_tag,
            partner_type=PartnerType.ASSOCIATES,
            marketplace="www.amazon.com",
            condition=Condition.NEW,
            item_ids=item_ids,
            resources=get_items_resource,
        )
    except ValueError as exception:
        print("Error in forming GetItemsRequest: ", exception)
        return

    try:
        """ Sending request """
        response = default_api.get_items(get_items_request)

        print("API called Successfully")
        print("Complete Response:", response)

        """ Parse response """
        if response.items_result is not None:
            print("Printing all item information in ItemsResult:")
            response_list = parse_response(response.items_result.items)
            for item_id in item_ids:
                print("Printing information about the item_id: ", item_id)
                if item_id in response_list:
                    item = response_list[item_id]
                    if item is not None:
                        if item.asin is not None:
                            print("ASIN: ", item.asin)
                        if item.detail_page_url is not None:
                            print("DetailPageURL: ", item.detail_page_url)
                        if (
                            item.item_info is not None
                            and item.item_info.title is not None
                            and item.item_info.title.display_value is not None
                        ):
                            print("Title: ", item.item_info.title.display_value)
                        if (
                            item.offers is not None
                            and item.offers.listings is not None
                            and item.offers.listings[0].price is not None
                            and item.offers.listings[0].price.display_amount is not None
                        ):
                            print(
                                "Buying Price: ",
                                item.offers.listings[0].price.display_amount,
                            )
                else:
                    print("Item not found, check errors")

        if response.errors is not None:
            print("\nPrinting Errors:\nPrinting First Error Object from list of Errors")
            print("Error code", response.errors[0].code)
            print("Error message", response.errors[0].message)

    except ApiException as exception:
        print("Error calling PA-API 5.0!")
        print("Status code:", exception.status)
        print("Errors :", exception.body)
        print("Request ID:", exception.headers["x-amzn-RequestId"])

    except TypeError as exception:
        print("TypeError :", exception)

    except ValueError as exception:
        print("ValueError :", exception)

    except Exception as exception:
        print("Exception :", exception)

有人知道如何让它工作吗?

python api amazon-product-api amazon-paapi
1个回答
0
投票

我也遇到了同样的问题。问题可能是由多种因素造成的。

首先 是您发出的请求太多(同一请求中有超过 10 个 ASIN 或请求靠得太近)。在这种情况下,解决方案很简单。您将每个请求的 asin 数量限制为 10 个并输入:

import time
time.sleep(3)

在一个请求和另一个请求之间。这应该足够了。

第二个 案例像我的,或者您在过去 30 天内没有进行任何销售。如果您不为平台创造收入,亚马逊就不会投资为您提供 API 访问权限。理论上,如果您在 48 小时内从您的会员链接收到购买,他们应该开始接受请求,因此应该不再出现该错误。

您是否需要赚取最低利润才能获得访问权限还有待观察。在我的例子中,利润是 0.12 美元,现在(大约 48 小时过去了)错误仍然存在。也许你需要达到 1 美元。 但这最后一点还有待考证

第三种情况,您已经达到了每日最大限额,因此您需要等待。 12-24 小时。我建议您减少每日请求的数量并慢慢增加它们以查看您的限制大约是多少,然后相应地进行调整。这是因为每个基于销售数量的联属网络营销帐户都对它可以发出的请求数量有括号。从您的会员帐户购买的商品越多,您可以提出的请求就越多。

第四个也是最后一个案例,您已经在进行销售,但即使在一段时间后也会出现相同的消息。在这种情况下,您应该直接联系亚马逊并要求澄清。也许会有一些技术问题。

© www.soinside.com 2019 - 2024. All rights reserved.