Как использовать python ebaysdk для фильтрации элементов из списка с несколькими вариантами (список из более чем одного элемента) - PullRequest
0 голосов
/ 17 апреля 2020

Когда я использую python Finding SDK для поиска списков с помощью eBay, я обычно получаю результаты, которые содержат список, содержащий два или более элементов, которые я не ищу. Пример:

request1 = {
        'keywords': "Iphone x 64gb", # I am searching for Listings of an iPhone x 64gb
        'itemFilter': [
            {'name': 'Condition', 'value': 'Used'},
            {'name': 'currency', 'value': 'CAD'},
            {'name': 'minPrice', 'value': 100.0}
        ],
        'paginationInput': {
            'entriesPerPage': 100,
            'pageNumber': 13
        },
        'sortOrder': 'BestMatch'
}

 api = find_connect(config_file='ebay.yml',  siteid="EBAY-ENCA")
 resp = api.execute('FindPopularItems', request1).dict() # Change from XML to dictionary
 parse_response(reps) # send the dictionary of listings to be parsed

Когда я смотрю на некоторые из списков, которые были возвращены из запроса API, я могу получить что-то вроде этого

itemId: 303279232871
title: Apple iPhone X Smartphone 64GB 256GB AT&T Sprint T-Mobile Verizon or Unlocked
globalId: EBAY-US
subtitle: 30-Day Warranty - Free Charger & Cable - Easy Returns!
primaryCategory: {'categoryId': '9355', 'categoryName': 'Cell Phones & Smartphones'}
galleryURL: https://thumbs4.ebaystatic.com/pict/303279232871404000000001_2.jpg
viewItemURL: https://www.ebay.ca/itm/Apple-iPhone-X-Smartphone-64GB-256GB-AT-T-Sprint-T-Mobile-Verizon-Unlocked-/303279232871?var=602277420740
paymentMethod: PayPal
autoPay: true
postalCode: 660**
location: USA
country: US
shippingInfo: {'shippingServiceCost': {'_currencyId': 'CAD', 'value': '23.83'}, 'shippingType': 'Flat', 'shipToLocations': 'Worldwide'}
sellingStatus: {'currentPrice': {'_currencyId': 'USD', 'value': '309.0'}, 'convertedCurrentPrice': {'_currencyId': 'CAD', 'value': '436.46'}, 'sellingState': 'Active', 'timeLeft': 'P21DT20H28M35S'}
listingInfo: {'bestOfferEnabled': 'false', 'buyItNowAvailable': 'false', 'startTime': '2019-09-09T14:07:31.000Z', 'endTime': '2020-05-09T14:07:31.000Z', 'listingType': 'FixedPrice', 'gift': 'false', 'watchCount': '18'}
galleryPlusPictureURL: https://galleryplus.ebayimg.com/ws/web/303279232871_1_3459_1_00000001.jpg
condition: {'conditionId': '2500', 'conditionDisplayName': 'Seller refurbished'}
isMultiVariationListing: true # **This means that it is a multi variation listing**
topRatedListing: false

Это список Iphone x 64 ГБ и 256 ГБ, которые имеют разные цены. Там может быть даже более 2 товаров с разными ценами (клиент может захотеть, но он использовал или новый, и т. Д. c). Однако я не хочу просто удалить его из набора данных, так как API eBay возвращает максимум 10000 записей и разрешает только 5000 вызовов в день (данные по-прежнему актуальны). Как я могу отфильтровать каждый отдельный элемент из списка?

1 Ответ

0 голосов
/ 21 апреля 2020

Мне может помочь одна вещь, если вы делаете запрос по аспектам, а не используете ключевое слово. В приведенном ниже примере ищутся результаты «iphone x» с «64 ГБ» хранилища. Фильтрация аспектов должна выполняться в соответствующей категории. Это также предполагает, что продавец создал листинг со структурированными данными.

api_request = {
    'keywords': "Iphone x", 
    'itemFilter': [
        {'name': 'Condition', 'value': 'Used'},
        {'name': 'currency', 'value': 'CAD'},
        {'name': 'minPrice', 'value': 100.0}
    ],
    'aspectFilter': [
        {
            'aspectName': 'Storage Capacity',
            'aspectValueName': '16 GB',
        }
    ],
    'categoryId': 9355,
    'outputSelector': [
        'AspectHistogram',
    ],
    'paginationInput': {
        'entriesPerPage': 100,
        'pageNumber': 1
    },
    'sortOrder': 'BestMatch'
}
...