2013-10-12 70 views
2
工作

我试图使用的categoryId在我findItemsAdvanced查询:的categoryId似乎并不findItemsAdvanced

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

但是结果我得到的是,例如(打印“信息搜索结果”字典):

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

你可以看到,结果有69202一的categoryId,而不是51148.

什么我错在这里做什么?我只是用finding.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。”

+0

再试一次。让我们一起工作。可能您的端点具有不同的允许类别。 –

+0

我不知道这是否有帮助,但英国eBay网站上不存在51148类别。 –

+0

我尝试没有categoryId的要求,然后我采取其中一个输出,所以它必须存在!特别是,我正在尝试177,这对应于笔记本电脑和笔记本电脑。 – elelias

回答

1

下面的代码会做在英国eBay网站“笔记本电脑”关键字搜索,并限制搜索到的两类苹果笔记本电脑(111422)和PC笔记本电脑上网本&(177)。此外,结果将被过滤,只显示价格介于200英镑和400英镑之间的前25个旧物品。结果也按价格从高到低排序。

关于这个例子有几点需要注意。

  • 它假定您已经安装了ebaysdk-python
  • 根据易趣docs CategoryID字段是一个字符串,并且可以指定一个以上的类别。因此,阵列用于保存我们感兴趣的类别ID。
  • 我们的请求需要搜索英国eBay网站上的项目。因此,我们通过EBAY-GB作为siteid参数。
  • 类别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的代码结果相匹配,但不会让您在搜索比利时网站时在请求中指定相同的值。

我希望这会有所帮助。

+0

非常感谢。这是一件愚蠢的事情,ebaysdk示例中的参数siteid由于某种原因被设置为'EBAY-NLBE'。但有趣的是,搜索DOES输出类别'177',但试图在过滤器中使用该类别会再次发生错误。你知道为什么吗?再次感谢 – elelias

+0

我已经更新了我的答案,希望能够解释你得到的搜索结果 –

+0

这是一个非常深入的答案,再次感谢您的帮助。 – elelias

1

因为类标识符是已repeatable。您需要将数组传入呼叫。像这样的东西应该工作。

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

注意:请参阅itemFilter元件是如何在SDK的sample file阵列。

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

nop,谢谢你的回答,但那也行不通。为什么要在大括号之间加上Id? itemFilter有一个字典结构来提供名称和值,但categoryId只能有字符串。我已经尝试'categoryId':[“51148”],也'categoryId':[{'value':'51148'}],但似乎没有工作:( – elelias

+0

你能得到XML生成? –

+0

嗨,我用这个XML编辑帖子。谢谢。 – elelias