Поиск
| Метод | Когда у вас есть |
|---|---|
search(query) | Текст: название товара, слово, код |
filter({ brand }) | Название бренда |
filter({ barcode }) | Штрихкод с упаковки |
searchSubpositions(query) | Тип товара, без бренда |
dvCert(number) | Номер сертификата |
card(code), get(code) | Точный 17-значный код |
Чтобы просматривать каталог по уровням, см. Каталог.
По тексту
const page = await mxik.search('Maccoffee')Ищет по названиям, брендам, атрибутам и кодам. Работает и кириллица, и латиница: 'кофе' и 'kofe' находят похожие результаты. Элементы имеют тип SearchItem.
По полям
filter() ищет по конкретным полям. Элементы имеют тип CatalogItem.
await mxik.filter({ brand: 'Samsung' })
await mxik.filter({ barcode: '6934177746536' })
await mxik.filter({ text: 'vacuum', brand: 'Xiaomi' })| Фильтр | Что ищет |
|---|---|
text | Слова в названии, бренде, атрибутах и коде |
brand | Название бренда, частично и без учёта регистра |
code | Точный 17-значный код |
barcode | Штрихкод товара (GTIN) |
Примечание
У barcode приоритет: если он задан, API игнорирует остальные фильтры.
По типу товара
const page = await mxik.searchSubpositions('кофе')
page.items[0].mxikCode // '00901001004000000'
page.items[0].mxikName // 'Сублимированный кофе'Находит субпозиции: общие коды типа товара, без бренда. Подходит, когда нужен код «молотого кофе», а не конкретного товара. Элементы имеют тип CatalogItem.
По номеру сертификата
await mxik.dvCert(certNumber)Возвращает коды, связанные с сертификатом, в виде CatalogItem.
Отдельный код
Получить код можно двумя способами. Оба возвращают null, если кода не существует.
card() возвращает карточку, которую показывает сайт: названия на одном языке, штрихкод, краткое название, льготу и упаковки с единицами измерения.
const card = await mxik.card('00901001001048023')
card?.mxikName // 'Молотый (порошкообразный) кофе: Maccoffee, в пакет 3в1 20г'
card?.shortName // 'Молот. (порошко.) кофе Maccoffee в пак. 3в1 20г'
card?.internationalCode // '8887290101004'
card?.packages?.[0].name // 'шт. (пачка) 20 грамм'get() возвращает названия сразу на русском и узбекском, но полей меньше:
const details = await mxik.get('00901001001048023')
details?.subPositionNameRu // 'Молотый (порошкообразный) кофе'
details?.subPositionNameUz // 'Майдаланган (кукунсимон) кофе'Все поля — в MxikCard и MxikDetails.
Внимание
Сайт больше не использует эндпоинты, на которых работают get() и dvCert(). Сейчас они отвечают, но могут быть отключены без предупреждения. В новом коде лучше использовать card().
У кодов бывают ведущие нули, поэтому храните их строками. Чтобы проверить формат до запроса, используйте isMxikCode():
import { isMxikCode } from 'mxik'
isMxikCode('00901001001048023') // true
isMxikCode('901001001048023') // falseСтраницы
search(), filter() и dvCert() возвращают по одной странице:
const page = await mxik.search('кофе', { page: 2, size: 50 })| Поле | Описание |
|---|---|
items | Результаты на этой странице |
total | Результаты на всех страницах |
page | Номер страницы, начиная с 1 |
size | Размер страницы |
hasNext | Есть ли следующая страница |
По умолчанию на странице 20 результатов. Это меняется для отдельного запроса через size или для всего клиента через pageSize.
Все результаты
searchAll() и filterAll() сами проходят по всем страницам. Следующая страница запрашивается по ходу перебора, поэтому если остановиться раньше, лишних запросов не будет:
for await (const item of mxik.filterAll({ brand: 'Xiaomi' })) {
if (item.internationalCode === barcode)
break
}Чем больше size, тем меньше запросов. API принимает как минимум 500:
mxik.searchAll('кофе', { size: 500 })Язык
Названия в результатах search(), filter() и dvCert() по умолчанию на русском. На узбекский (кириллица) можно переключить для отдельного запроса или для всего клиента:
await mxik.search('кофе', { lang: 'uz' })
const mxik = createMxik({ lang: 'uz' })get() от языка не зависит: в карточке есть все названия на обоих языках, например subPositionNameRu и subPositionNameUz.