2013-10-12 3 views
2

Я пытаюсь использовать CategoryId в моем findItemsAdvanced запросе:CategoryId не похоже на работу в findItemsAdvanced

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

но результаты я получаю, например (напечатав «SEARCHRESULT» словарь):

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

Вы можете видеть, что результат имеет CategoryId из 69202, а не 51148.

что я здесь делаю неправильно? Я просто используя код finding.py по адресу:

https://github.com/timotheus/ebaysdk-python

Благодарности

Edit: некоторые тесты, которые я сделал.

Я извлекаю xml, который строит sdk. Если я позвоню с:

'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. Если я делаю это, я не получаю сообщение об ошибке, но результат не ограничивается запросом категории. Выполнение этого, как указано выше, я до сих пор получаю ошибку:

«Исключение: findItemsAdvanced: Domain: Marketplace, Severity: Error, errorId: 3, Invalid category ID».

+0

Попробуйте другой. Давайте работать. Возможно, ваша конечная точка имеет разные допустимые категории. –

+0

Я не знаю, поможет ли это, но категория 51148 не существует на сайте eBay в Великобритании. –

+0

Я пробую без требования categoryId, а затем беру один из них на выходе, поэтому он должен существовать! В частности, я пытаюсь использовать 177, что соответствует ноутбукам и ноутбукам. – elelias

ответ

1

ниже код будет делать поиск по ключевым словам для «ноутбуков» по ​​всей территории Великобритании eBay и ограничить поиск двух категорий Apple, ноутбуки (111422) и ПК Ноутбуки & Ноутбуки (177). Кроме того, результаты фильтруются, чтобы показывать только первые 25 предметов, стоимость которых составляет от 200 до 400 фунтов стерлингов. Результаты также сортируются по цене от высокой к низкой.

В этом примере нужно иметь в виду несколько вещей.

  • Предполагается, что вы уже установили ebaysdk-python.
  • В соответствии с eBay docs поле categoryId является строкой и может быть указана более чем одна категория. Поэтому массив используется для хранения интересующих нас идентификаторов категорий.
  • Наш запрос требует поиска предметов на веб-сайте Великобритании eBay. Поэтому мы передаем EBAY-GB в качестве параметра siteid.
  • Категория ids различна на каждом сайте eBay.К примеру, в категории Ноутбуки для ПК & Нетбуков (177) в Бельгии нет. (Который между прочим это сайт, который используется в ebaysdk-питона 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 позволяет продавцам с одного сайта появляться в результатах поиска другого сайта, если они отвечают требуемым критериям, например, предлагают международную доставку. Это позволяет продавцам продавать в другие страны без необходимости фактически перечислять на этих сайтах.

Из примера XML, который предоставил elelias, я вижу, что поиск по ключевым словам для «ноутбука» был сделан на сайте в Бельгии с отфильтрованными результатами, чтобы возвращались только предметы, находящиеся в Великобритании.

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

Поскольку поиск был ограничен теми, которые находятся в Великобритании, вы не увидите никаких результатов в Бельгии. Поскольку элементы, перечисленные на веб-сайте Великобритании, будут содержать информацию, относящуюся к Великобритании. Например, идентификатор категории 177. eBay не преобразует информацию, чтобы сделать ее релевантной для сайта, который вы ищете.

Важно помнить, что то, что вы пытаетесь сделать с помощью API поиска, также может быть повторено с использованием фактического предварительного поиска на eBay. Например, можно воссоздать проблему, выполнив поиск по ключевым словам для используемых элементов на сайте в Бельгии.

Этот url является эквивалентом вашего кода, который выполнял поиск, не указав категорию 177. Как вы можете видеть из результатов, она возвращает элементы, которые указаны на веб-сайте Великобритании, но которые появляются на сайте в Бельгии. Вы нажимаете на некоторые элементы, для example вы даже можете увидеть, что на нем отображаются ноутбуки для ПК категории & Нетбуки (177), хотя этого не существует на сайте в Бельгии. Это соответствует результатам вашего кода, где он возвращал 177, но не позволял вам указывать то же значение в запросе, когда вы искали сайт в Бельгии.

Надеюсь, это поможет.

+0

Большое спасибо. Это была глупая вещь, параметр siteid в примере ebaysdk по какой-то причине установлен на «EBAY-NLBE». Однако, забавно, что вывод search DOES категория '177', но при попытке использовать эту категорию в фильтре делает ошибку еще раз. Знаете почему? Еще раз спасибо – elelias

+0

Я обновил свой ответ, надеюсь, объясню результаты поиска, которые вы получали. –

+0

Это большой углубленный ответ, большое спасибо за вашу помощь снова. – elelias

1

Потому что categoryId является repeatable. Вам нужно будет передать массив в вызов. Что-то вроде этого должно работать.

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

Примечание: Посмотрите, как элемент itemFilter массив в sample file из SDK.

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

nop, спасибо за ответ, но это тоже не работает. Зачем нужно иметь идентификатор между фигурными скобками? itemFilter имеет структуру словаря, чтобы указать имя и значение, но categoryId должен иметь только строки. Я уже пробовал с 'categoryId': ["51148"], также 'categoryId': [{'значение': '51148'}], но ничего не работает :( – elelias

+0

Можете ли вы получить XML-код? –

+0

hi, I отредактировал сообщение с XML. Спасибо. – elelias

Смежные вопросы