【问题标题】:eBay API categoryId in findItemsAdvanced call returns wrong categoriesfindItemsAdvanced 调用中的 eBay API categoryId 返回错误的类别
【发布时间】:2013-10-12 17:07:56
【问题描述】:

我正在尝试在我的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。

我在这里做错了什么?我只是在以下位置使用 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 无效。

【问题讨论】:

  • 再试一次。让一个工作。可能您的端点有不同的允许类别。
  • 我不知道这是否会有所帮助,但英国 eBay 网站上不存在类别 51148。
  • 我尝试不使用 categoryId 要求,然后在输出中取其中一个,所以它必须存在!特别是,我正在尝试使用 177,它对应于笔记本电脑和笔记本电脑。
  • 你能澄清一下到底是什么问题吗?如果您在任何请求中使用类别 ID 51148,它将根本不起作用,因为该类别对英国站点无效。如果您使用的是 177 类,那么据我所知,代码应该没问题。
  • 如果我不使用任何 categoryId 要求,并打印我的搜索检索到的 categoryIds,例如,我会得到 177。现在我重复完全相同的搜索,但我添加'categoryId':'177',这应该是只为该类别获取结果的方式。然后它抱怨我在上面粘贴的错误“无效的类别 ID”。 categoryId是有效的,我刚才是从之前的搜索中得到的,所以不知道是怎么回事。

标签: ebay-api


【解决方案1】:

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

关于这个例子有几点需要牢记。

  • 假设你已经安装了ebaysdk-python
  • 根据 eBay docs,categoryId 字段是一个字符串,可以指定多个类别。因此,我们使用一个数组来保存我们感兴趣的类别 ID。
  • 我们的请求需要在英国 eBay 网站上搜索商品。因此,我们将 EBAY-GB 作为 siteid 参数传递。
  • 每个 eBay 站点的类别 ID 都不同。例如,比利时不存在类别 PC 笔记本电脑和上网本 (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 中,我可以看到在比利时网站上对“笔记本电脑”进行了关键字搜索,结果经过过滤,因此只返回位于英国的项目。

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

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

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

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

我希望这会有所帮助。

【讨论】:

  • 非常感谢。这是一件愚蠢的事情,ebaysdk 示例中的参数 siteid 出于某种原因设置为“EBAY-NLBE”。然而,有趣的是,搜索确实会输出类别“177”,但尝试在过滤器中使用该类别会使错误再次发生。你知道为什么吗?再次感谢
  • 我已经更新了我的答案,希望能解释你得到的搜索结果。
  • 这是一个很好的深入回答,再次感谢您的帮助。
【解决方案2】:

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

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

注意:在 SDK 的 sample file 中查看 itemFilter 元素如何是一个数组。

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

【讨论】:

  • 不,感谢您的回答,但这也不起作用。为什么要在大括号之间加上 Id? itemFilter 有一个字典结构来提供名称和值,但 categoryId 应该只有字符串。我已经尝试使用'categoryId':[“51148”],还有'categoryId':[{'value':'51148'}],但似乎没有任何效果:(
  • 你能得到生成的XML吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多