我尝试在 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
。
按照上面的方法,我仍然收到错误:
Exception: findItemsAdvanced: Domain: Marketplace, Severity: Error, errorId: 3, Invalid category ID.
最佳答案
下面的代码将在英国 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 的结果相匹配,但不允许您在请求中指定与搜索比利时站点相同的值。
我希望这会有所帮助。
关于ebay-api - findItemsAdvanced 调用中的 eBay API CategoryId 返回错误的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19336901/