categoryId似乎不适用于findItemsAdvanced

时间:2013-10-12 17:07:57

标签: api ebay

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

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

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

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

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

我在这里做错了什么?我只是在:

使用finds.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的相应名称是'CategoryId',有大写字母C.如果我这样做我没有得到错误,但结果不限于类别id请求。 像上面这样做,我仍然得到错误:

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

2 个答案:

答案 0 :(得分:1)

因为categoryId是repeatable。您需要将一个数组传递给调用。这样的事情应该有效。

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

注意:请参阅SDK的sample file中itemFilter元素是一个数组。

'itemFilter': [
        {'name': 'Condition',
         'value': 'Used'},
        {'name': 'LocatedIn',
         'value': 'GB'},
    ],

答案 1 :(得分:1)

以下代码将在英国eBay网站上对“笔记本电脑”进行关键字搜索,并将搜索范围限制在两类Apple Laptops(111422)和PC Laptops&amp;上网本(177)。此外,结果将被过滤,仅显示前25个使用的物品,价格在200英镑到400英镑之间。结果也按价格从高到低排序。

关于这个例子,有几点要记住。

  • 假设您已安装ebaysdk-python
  • 根据易趣docs,categoryId字段是一个字符串,可以指定多个类别。因此,数组用于保存我们感兴趣的类别ID。
  • 我们的要求需要在英国易趣网站上搜索商品。因此,我们将EBAY-GB作为siteid参数传递。
  • 每个易趣网站的类别ID都不同。例如,类别PC Laptops&amp;比利时不存在上网本(177)。 (这是ebaysdk-python finding.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,我可以看到在比利时网站上搜索“laptop”的关键字,结果已过滤,因此只返回位于英国的商品。

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

由于搜索仅限于位于英国的搜索,因此您不会在搜索结果中看到任何比利时项目。由于在英国网站上列出的项目,它们将包含与英国相关的信息。例如,类别ID 177.易趣不会转换信息,使其与您搜索的网站相关。

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

url相当于您执行搜索但未指定类别177的代码。正如您从结果中看到的那样,它会返回在英国网站上列出但出现在比利时的项目现场。你单击某些项目,example,你甚至可以看到它显示英国类别PC Laptops&amp;上网本(177)即使在比利时网站上不存在。这与您返回177的代码的结果相匹配,但不会让您在请求中指定与搜索比利时网站时相同的值。

我希望这会有所帮助。