2013-10-12 100 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