2

我正在尝试categoryId在我的findItemsAdvanced查询中使用:

api.execute('findItemsAdvanced', {
         'keywords': 'laptop',
         'categoryId': '51148'}

我得到的结果是,例如(打印searchResult字典):

'itemId': {'value': '200971548007'}, 'isMultiVariationListing': .............
'primaryCategory': {'categoryId': {'value': '69202'}, 'categoryName': {'value': 'Air Conditioning'}}  
....."

您可以看到结果的 acategoryId为 69202,而不是 51148。

我在这里做错了什么?我只是在以下位置使用 find.py 代码:

https://github.com/timotheus/ebaysdk-python

谢谢


编辑

我做了一些测试。我提取了 SDK 构建的 XML。如果我打电话给:

'categoryId': '177'

回应是:

    the request_xml is  <?xml version='1.0' encoding='utf-8'?><findItemsAdvancedRequest 
xmlns="http://www.ebay.com/marketplace/search/v1/services"><categoryId>177</categoryId>
<itemFilter><name>Condition</name><value>Used</value></itemFilter><itemFilter>
<name>LocatedIn</name><value>GB</value></itemFilter><keywords>laptop</keywords>
<paginationInput><entriesPerPage>100</entriesPerPage><pageNumber>1</pageNumber>
</paginationInput></findItemsAdvancedRequest>

我也一样

'categoryId': ['177']

我觉得这有点奇怪,我认为 XML 的适当名称categoryId是带有大写 C 的“CategoryId”。如果这样做,我不会收到错误,但结果不限于所categoryId请求的。像上面那样做,我仍然得到错误:

异常:findItemsAdvanced:域:市场,严重性:错误,errorId:3,无效的类别 ID。

4

2 回答 2

1

下面的代码将在英国 eBay 网站上对“笔记本电脑”进行关键字搜索,并将搜索限制为 Apple 笔记本电脑 (111422) 和 PC 笔记本电脑和上网本 (177) 这两个类别。此外,过滤结果仅显示价格在 200 英镑到 400 英镑之间的前 25 个二手商品。结果也按价格从高到低排序。

关于这个例子,有几件事情要记住。

  • 它假定您已经安装了ebaysdk-python
  • 根据 eBay文档,categoryId 字段是一个字符串,可以指定多个类别。因此,我们使用一个数组来保存我们感兴趣的类别 ID。
  • 我们的请求需要在英国 eBay 网站上搜索商品。因此,我们将 EBAY-GB 作为 siteid 参数传递。
  • 每个 eBay 网站的类别 ID 都不同。例如,比利时不存在类别 PC 笔记本电脑和上网本 (177)。(顺便说一下,在 ebaysdk-pythonfinding.py 示例中使用的站点

此示例也可用作Gist

import ebaysdk
from ebaysdk import finding

api = finding(siteid='EBAY-GB', appid='<REPLACE WITH YOUR OWN APPID>')

api.execute('findItemsAdvanced', {
    'keywords': 'laptop',
    'categoryId' : ['177', '111422'],
    'itemFilter': [
        {'name': 'Condition', 'value': 'Used'},
        {'name': 'MinPrice', 'value': '200', 'paramName': 'Currency', 'paramValue': 'GBP'},
        {'name': 'MaxPrice', 'value': '400', 'paramName': 'Currency', 'paramValue': 'GBP'}
    ],
    'paginationInput': {
        'entriesPerPage': '25',
        'pageNumber': '1'
    },
    'sortOrder': 'CurrentPriceHighest'
})

dictstr = api.response_dict()

for item in dictstr['searchResult']['item']:
    print "ItemID: %s" % item['itemId'].value
    print "Title: %s" % item['title'].value
    print "CategoryID: %s" % item['primaryCategory']['categoryId'].value

我希望下面将解释为什么在比利时站点上执行搜索会导致包含类别 177 的项目,即使这对比利时无效但对英国有效。

基本上,eBay 允许来自一个站点的卖家出现在另一个站点的搜索结果中,只要他们符合要求的标准,例如提供国际运输。它允许卖家向其他国家/地区销售,而无需在这些网站上实际列出。

从 elelias 提供的示例 XML 中,我可以看到在比利时网站上对“笔记本电脑”进行了关键字搜索,并过滤了结果,以便仅返回位于英国的项目。

<itemFilter>
    <name>LocatedIn</name>
    <value>GB</value>
</itemFilter>

因为搜索仅限于位于英国的那些,您不会在结果中看到任何比利时项目。由于英国网站上列出的项目将包含与英国相关的信息。例如类别 id 177。eBay 不会转换信息以使其与您正在搜索的网站相关。

重要的是要记住,您尝试使用 Finding API 执行的任何操作也可以使用 eBay 上的实际高级搜索来重复。例如,可以通过在比利时网站上对使用过的项目执行关键字搜索来重新创建问题。

url等效于执行搜索但未指定类别 177 的代码。从结果中可以看出,它返回的项目在英国站点上列出但出现在比利时站点中。例如,如果您单击某些项目,您甚至可以看到它显示英国类别 PC 笔记本电脑和上网本 (177),即使比利时站点上不存在该类别。这与您的代码中返回 177 的结果相匹配,但不允许您在请求中指定与搜索比利时站点相同的值。

我希望这有帮助。

于 2013-10-15T16:09:09.700 回答
1

因为 categoryId 是可重复的。您需要将一个数组传递给调用。像这样的东西应该工作。

api.execute('findItemsAdvanced', {
        'keywords': 'laptop',
        'categoryId': [
             {'51148'}
    ]
}

注意:在 SDK 的示例文件中查看 itemFilter 元素如何成为数组。

'itemFilter': [
        {'name': 'Condition',
         'value': 'Used'},
        {'name': 'LocatedIn',
         'value': 'GB'},
    ],
于 2013-10-13T14:40:57.647 回答