需要使用XML和PHP使用eBay getsellerlist api函数提取所有产品

时间:2014-09-28 19:27:13

标签: php xml api request ebay

我正在尝试从用户的ebay帐户中获取所有产品,但是当我运行我的代码时,我只获得了几百个。我可以确认有2 000种产品。

如何在不使用开始和结束时间和日期参数的情况下拉出所有产品?

如果我删除使用<StartTimeFrom><EndTimeTo>的代码行,则根本不会显示任何产品。

$url = 'https://api.ebay.com/ws/api.dll';
$user_name  = "{username is in here}";
$auth_token = "{token is in here}";
for ($i = 1; $i <= 10; $i++) {
    $headers = array(
      'Content-Type: text/xml',
      'X-EBAY-API-COMPATIBILITY-LEVEL:877',
      'X-EBAY-API-DEV-NAME:177b0624-2d99-428a-8659-7404d9043c76',
      'X-EBAY-API-APP-NAME:PeteNayl-d415-49bb-a950-495237441c1c',
      'X-EBAY-API-CERT-NAME:6c336965-1a1f-4d11-94b1-3843c3ac995b',
      'X-EBAY-API-SITEID:3',
      'X-EBAY-API-CALL-NAME:GetSellerList'
    );

    $xml = '<?xml version="1.0" encoding="utf-8"?>
    <GetSellerListRequest xmlns="urn:ebay:apis:eBLBaseComponents">
    <RequesterCredentials>
    <eBayAuthToken>'.$auth_token.'</eBayAuthToken>
    </RequesterCredentials>
    <Pagination ComplexType="PaginationType">
        <EntriesPerPage>200</EntriesPerPage>
    <PageNumber>'.$i.'</PageNumber>
    </Pagination>
    <StartTimeFrom>2014-06-01T21:59:59.005Z</StartTimeFrom>
    <StartTimeTo>2014-06-02T21:59:59.005Z</StartTimeTo>
    <EndTimeFrom>2014-09-29T21:59:59.005Z</EndTimeFrom>
    <EndTimeTo>2014-09-30T21:59:59.005Z</EndTimeTo>
    <DetailLevel>ItemReturnDescription</DetailLevel>
    <UserID>'.$user_name.'</UserID>
    </GetSellerListRequest>';

...

4 个答案:

答案 0 :(得分:7)

您不能在没有时间范围的情况下发送请求,并且from和to之间的时间段不能超过120天。如果您想要撤回所有产品,则必须向 GetSellerList 发出多个请求,其中每个请求涵盖特定的120天期限。

可以在eBay文档中找到有关请求中EndTimeFromStartTimeFrom字段的信息。请注意,文档并未说明这些字段是必需的,但您未在请求中包含这些字段,失败值将在响应的 Ack 字段中返回

答案 1 :(得分:2)

请查看官方ebay doc,您只需根据以下粗体标记部分调整您的参数:)

  

<强> GetSellerList

     

使用此调用来检索由列出的项目   经过身份验证的用户,包括项目数据。

     

GetSellerList返回零个或多个项目的数组,具体取决于   用户的活动和呼叫中使用的输入。输入字段可以   增加或过滤返回的数据。请参阅浏览卖家的项目   有关使用GetSellerList检索项目的详细说明。

     

使用细节在所有通话中,必须至少有一个日期范围过滤器   指定。

     

您可以指定DetailLevel来控制响应数据。如果你设置   在DetailLevel中,您必须设置分页值。

     

GetSellerList每次调用最多返回5,000个项目(这是   如果您没有指定详细级别,则可以返回   每个项目的最小数据集)。但是,如果您指定任何   DetailLevel值(从而增加为每个返回的字段   item),您可能需要使用分页值来获得完整的   结果集。如果使用DetailLevel,则响应不能再包含   每次通话超过200件。

     

许多商品详情(例如商品说明和商品详情)   不经常改变,获得这些价值会增加开销   你的电话。在您最初下载一组的详细信息之后   项目,对这些项目的后续请求应仅检索   可能会更改的项目信息。最好避免使用   ReturnAll的DetailLevel或Fine的GranularityLevel   GetSellerList。或者考虑使用GetSellerEvents代替   GetSellerList。

     

如果您需要使用ReturnAll检索所有项目详细信息,请使用a   较小的EntriesPerPage值可以限制返回的项目数   来自电话。要提高性能,请指定较短的时间范围   使用EndTimeFrom和EndTimeTo。

     

您可以在自己的中指定DetailLevel或GranularityLevel   请求,但不是两者。请参阅指定细节级别和粒度   关于详细程度的更多信息的级别。

     

使用分页来控制返回的数据页面。该   Pagination.EntriesPerPage字段控制返回的项目数   每次调用,Pagination.PageNumber指定要访问的数据页   在当前通话中检索。为EntriesPerPage指定的值   必须在1到200之间。

     

您可以在同一个通话中使用多个日期范围过滤器。例如,   如果想要响应,可以使用StartTimeFrom和StartTimeTo   包含两次之间开始的列表。使用EndTimeFrom   和EndTimeTo返回两次结束的列表。

     

使用Response GetSellerList返回卖家列表   ItemArray容器中的项目。

     

响应数据包含ItemArray中的ItemType对象。   每个ItemType对象都包含列表的数据。存储该项目   您的应用程序所需的数据。在输出中,   ReturnedItemCountActual属性指示有多少项   通过电话回来;计数表示可以有多少项   回。 HasMoreItems,如果为true,表示有更多项   要退回,需要一个或多个额外的电话。的PageNumber   表示返回的数据页面,ItemsPerPage表示   每次通话退回的物品数量。

     

测试GetSellerList您可以在Sandbox中测试此调用   使用AddItem添加至少两个项目后的环境。

     

只有在呼叫请求者是卖家的情况下,才会返回某些值   这个项目。要从另一个用户的角度测试呼叫,请致电   GetSellerList的用户不是列出该项目的用户。

     

对于列出不同类型项目的应用程序(例如中文   拍卖和固定价格项目),创建所有可能类型的列表   使用AddItem,然后尝试使用GetSellerList检索数据。

     

如果适用于应用程序的用例,请列出测试项目   单位和计算运费。然后检索项目   GetSellerList。

     

用于创建竞争性投标项目列表的应用程序(中文   拍卖),之前使用Sandbox用户界面对项目出价   使用GetSellerList检索项目。这将填补高位   结果集中项目的投标人数据。

     

使用不同的细节组合测试对GetSellerList的调用   级别,分页和基于日期的过滤,以涵盖所有   应用程序可能需要适应的可能情况   现实世界的条件。

我希望我能帮到你。

答案 2 :(得分:0)

我遇到了这个问题,但最终得到了简单的解决方案。时间范围不应设置为相隔超过120天。您可以从任意年份和月份开始,只要它们之间的值不应超过120天。例如,下面的查询返回2016年以来的项目。

isinstance(my_int, str)

答案 3 :(得分:0)

分页机制。

我遇到了同样的问题。

为解决这个问题,我建立了一个分页机制,该机制从特定的EBAY_START_DATE开始,一次加载120天的产品。有问题的日期基于eBay物品的开始时间。

这是伪代码

    from_date = EBAY_START_DATE

    while from_date < NOW:

        to_date = from_date + 120 DAYS

        call GetSellList (from_date, to_date)

        Do something with the data

        from_date = from_date + 120 DAYS

这是python中的实际实现。该代码还调用GetItem以获取每个项目的完整数据。该代码使用了Tim Keefer出色的ebaysdk.trading库进行调用。

    def getProducts(self):
        products = []

        # loop thru seller list 120 days at a time
        from_date = str2datetime(EBAY_START_DATE + ' 00:00:00')
        while from_date < datetime.now():

            # get seller list
            to_date = from_date + timedelta(days=120)
            request = {'StartTimeFrom': from_date, 'StartTimeTo': to_date}
            resp = self.ebayApi.get('GetSellerList', request)

            # get each product
            if resp.reply.ItemArray:
                items = resp.reply.ItemArray.Item
                if not isinstance(items, list):
                    items = [items]
                for item in items:
                    item_id = item.ItemID
                    request = {'ItemID': item_id}                     
                    resp = self.ebayApi.get('GetItem', request)
                    products.append(resp.dict()['Item'])

            from_date = from_date + timedelta(days=120)

        return products

我希望这会有所帮助。 :-)