Я работал с API поиска Walmart для приложения Django и предпочел бы искать только официальные данные о продукте Walmart, а не Walmart Marketplace.Я пытался использовать фасетные фильтры, чтобы ограничить возвращаемый ответ json элементами, которые имеют только marketplace = false, но я не добился успеха.
Возможны варианты ответа фасета: pickup_and_delivery, brand, price и retailer (см. facets_list.txt для ответа на стандартный запрос «ipod»):
"facets": [{
"name": "pickup_and_delivery",
"properties": {
"multi": "or",
"nullCount": "0"
},
"displayName": "Shipping & Pickup",
"facetValues": [{
"name": "2-Day Shipping",
"count": 141
}, {
"name": "Ship to Home",
"count": 260
}, {
"name": "FREE Pickup",
"count": 10
}]
}, {
"name": "brand",
"properties": {
"multi": "or",
"nullCount": "4"
},
"displayName": "Brand",
"facetValues": [{
"name": "Apple",
"count": 158
}, {
"name": "Jensen",
"count": 2
}, {
"name": "Insten",
"count": 20
}, {
"name": "RAM Game Room",
"count": 8
}, {
"name": "Home Comforts",
"count": 4
}, {
"name": "Unbranded",
"count": 4
}, {
"name": "Colordrives",
"count": 3
}, {
"name": "EpicDealz",
"count": 3
}, {
"name": "Group Vertical",
"count": 3
}, {
"name": "AGPTEK",
"count": 2
}, {
"name": "AGPtek",
"count": 2
}, {
"name": "CELLET",
"count": 2
}, {
"name": "DLO - Phillips",
"count": 2
}, {
"name": "MyNetDeals",
"count": 2
}, {
"name": "SuperGuardZ",
"count": 2
}, {
"name": "ULAK",
"count": 2
}, {
"name": "USA Gear",
"count": 2
}, {
"name": "XtremeMac",
"count": 2
}, {
"name": "jWIN",
"count": 2
}, {
"name": "APPLE IPODS AND APPLE TV",
"count": 1
}]
}, {
"name": "price",
"properties": {
"multi": "or",
"nullCount": "0"
},
"displayName": "Price",
"facetValues": [{
"name": "$0 - $75"
}, {
"name": "$75 - $100"
}, {
"name": "$100 - $150"
}, {
"name": "$150 - $200"
}, {
"name": "$200 - $250"
}, {
"name": "$250+"
}]
}, {
"name": "retailer",
"properties": {
"multi": "or",
"nullCount": "1"
},
"displayName": "Retailer",
"facetValues": [{
"name": "Walmart.com",
"count": 9
}, {
"name": "VIPOUTLET",
"count": 2
}, {
"name": "Altatac",
"count": 2
}, {
"name": "Simple Cell Inc",
"count": 6
}, {
"name": "The iSuperStore",
"count": 123
}, {
"name": "eForCity",
"count": 21
}, {
"name": "Landloop Corporation",
"count": 8
}, {
"name": "HOME COMFORTS",
"count": 5
}, {
"name": "LUCKYSTARTECHNOLOGYINC",
"count": 5
}, {
"name": "Concept Electronics",
"count": 4
}, {
"name": "EpicDealz",
"count": 4
}, {
"name": "Lindmeyers",
"count": 4
}, {
"name": "Quality Photo",
"count": 4
}, {
"name": "Wombat Reserve",
"count": 4
}, {
"name": "Group Vertical",
"count": 3
}, {
"name": "Tetchy Tech",
"count": 3
}, {
"name": "2ndstreet Electronics",
"count": 2
}, {
"name": "Clover Hill",
"count": 2
}, {
"name": "DealClock",
"count": 2
}, {
"name": "Direct Deals",
"count": 2
}]
}]
}
Я установил для фильтра фасетов значение «retailer: Walmart.com», но это все же позволило возвращать элементы рынка в поиск.Вот ответ, упрощенный до первого возвращенного элемента и нескольких ключевых значений, представляющих интерес:
{
"query": "ipod",
"sort": "relevance",
"responseGroup": "base",
"totalResults": 260,
"start": 1,
"numItems": 10,
"items": [{
"itemId": 42608125,
"parentItemId": 42608125,
"name": "Apple iPod touch 32GB",
"msrp": 247.0,
"salePrice": 249.0,
"upc": "888462353151",
"categoryPath": "",
"shortDescription": "",
"longDescription": "",
"thumbnailImage": "",
"mediumImage": "",
"largeImage": "",
"productTrackingUrl": "",
"standardShipRate": 0.0,
"marketplace": true,
"modelNumber": "MKJ02LL/A",
"sellerInfo": "ElectroCell",
"productUrl": "",
"customerRating": "4.517",
"numReviews": 209,
"customerRatingImage": "",
"categoryNode": "",
"rhid": "32367",
"bundle": false,
"stock": "Available",
"addToCartUrl": "",
"affiliateAddToCartUrl": "",
"freeShippingOver35Dollars": false,
"giftOptions": {},
"imageEntities": [{
"thumbnailImage": "",
"mediumImage": "",
"largeImage": "",
"entityType": ""
}
http://api.walmartlabs.com/v1/search?query=ipod&format=json&facet=on&facet.filter=retailer:Walmart.com&apiKey={apikeyhere}
Я использовал Interactive API Tool, чтобы сгенерировать этот запрос дляпростота примера: https://developer.walmartlabs.com/io-docs
Я также попытался использовать группу ответа на предмет (https://developer.walmartlabs.com/docs/read/Item_Field_Description), чтобы ограничить поиск, но я не был уверен, как правильно структурировать этотип запроса. Я закончил форматирование запроса так: http://api.walmartlabs.com/v1/search?query=ipod&format=json&facet=on&facet.filter=marketplace:False&apiKey={apikeyhere} с использованием фильтра фасетов в качестве «marketplace: False».
Я пытался использовать «sort», чтобы попытаться изменить элементГруппа ответа, но это тоже не работает. Параметр запроса «responseGroup», по-видимому, допускает только два возможных ввода: базовый, полный. Они только изменяют объем информации, возвращаемой при поиске.
Я не являюсьдействительно уверен, как действовать дальше, так как документация по API поиска довольно ограничена, поэтому любые рекомендации приветствуются. https://developer.walmartlabs.com/docs/read/Search_API
ОжидаемыйВ результате только ретранслятор Walmart.com вернулся с использованием фазовой фильтрации.
---- EDIT ---
Я более внимательно посмотрел на результаты запросов, которые я получал, когда «Walmart.com» использовался в качестве розничного продавца в фасетном фильтре, и заметил, что все работает правильно.Проблема, которая меня смущала, заключалась в том, что результаты запроса по-прежнему возвращали рыночную площадь: «истинное» значение для стороннего поставщика.
Однако, когда я сравниваю результаты запроса с ибез активного фильтра фасетов вы можете видеть рынок: false возвращается почти для каждого значения (я упростил результаты запроса до нескольких значений ниже):
Query=ipod (9 results) Query=ipod (10 results)
Facet=on&facet.filter=retailer:Walmart.com Facet=off
"marketplace": true, "marketplace": true,
"modelNumber": "MKJ02LL/A", "modelNumber": "MKJ02LL/A",
"sellerInfo": "ElectroCell", "sellerInfo": "ElectroCell",
"marketplace": false, "marketplace": false,
"modelNumber": "MKWM2LL/A", "modelNumber": "MKWM2LL/A",
"marketplace": false, "marketplace": true,
"modelNumber": "MKHJ2LL/A", "sellerInfo": "Quality Photo",
"marketplace": false, "marketplace": false,
"modelNumber": "AMZ94926", "modelNumber": "MKJ02LL/A",
"marketplace": false, "marketplace": true,
"modelNumber": "ID7HXS-F00", "modelNumber": "MKN22LLA_NEW90",
"sellerInfo": "The iSuperStore",
"marketplace": false, "marketplace": true
"modelNumber": "IPOD5CBPCH", "modelNumber": "MKN52LL/A","marketplace": true,
"sellerInfo": "The iSuperStore",
"marketplace": false, "marketplace": false,
"modelNumber": "GM-iLOOP", "modelNumber": "MKMJ2LL/A",
"marketplace": false, "marketplace": true,
"modelNumber": "RBMD481LL/A", "modelNumber": "MKN52LL/A",
"sellerInfo": "The iSuperStore",
"marketplace": false, "marketplace": true,
"modelNumber": "MC027LL/A", "sellerInfo": "Concept Electronics",
"marketplace": true,
"modelNumber": "VIPRB-MKJ02LL/A",
"sellerInfo": "VIPOUTLET",
Я не знаю, почемуПоставщик Electrocell по-прежнему классифицируется как Walmart.com в качестве розничного продавца, но, похоже, это все еще эффективный метод сокращения результатов запросов третьих сторон с использованием API поиска.
Если у кого-то есть более эффективный способвыполнив этот поиск, чтобы теперь возвращались сторонние результаты, такие как использование responseGroup, пожалуйста, дайте мне знать.