Неофициальный nodejs api-клиент для Сбермаркета, полностью на typescript. Для чего?
- просто по-фану;
- очень хочется накидывать в корзину типовые товары быстро и без боли, прям скриптом; :-)
- поиск наилучших ценовых предложений по магазинам доступным в Сбермаркете;
К сожалению, официального публичного api не нашлось. Саппорт тоже ничего по этому поводу не ответил.
WARNING! Under construction.
npm i sbermarket-api
или
yarn add sbermarket-api
- Необходимо передать Credentials
email
,password
,latitude
,longitude
; - Примеры выполнения кода можно найти в папке
example
;
const sbermarketApi= require("sbermarket-api");
const credentials = {
email: "asd@asd.asd", //email
password: "123123123", //пароль
latitude: 45.0001, // широта
longitude: 36.0001 // долгота
}
// По широте и долготе сервак сбермаркета определяет какие магазины доступны.
const apiClient = new sbermarketApi(credentials);
// логинимся
apiClient.login().then((isValid) => {
if (!isValid) return false;
// получить данные о текущем юзере
apiClient.getUser().then((data) => {
console.log(data);
});
// получить данные о текущем заказе, оно же корзина
apiClient.getCurrentOrder().then((data) => {
console.log(data);
});
// получить данные о магазине
apiClient.getStore(251).then((data) => {
console.log(data.store.location);
});
apiClient.search(251, "икра путина").then((data) => {
console.log(data);
});
});
У ребят используется классическая Basic авторизация base64(email:password)
в заголовок Authorization
.
Пример: Authorization: Basic ZW1haWw6cGFzc3dvcmQ==
baseUrl : https://api.sbermarket.ru/v2/
Для логина есть готовый метод login()
Название метода | Что делает? |
---|---|
getUser | Получить данные о юзере |
getStore | Получить данные о магазине |
getStores | Получить список магазинов доступных в текущей локации |
getCurrentOrder | Получить текущий заказ/корзину |
getCategories | Получить все категории магазина |
getCategoryProducts | Получить список продуктов в категории |
getProduct | Получить информацию о товаре |
addToOrder | Добавить товар в заказ/корзину |
removeFromOrder | Удалить предложение из корзины |
search | Искать по товарам с пагинацией в конкретном магазине |
Получить информацию о текущем юзере.
apiClient.getUser().then((data) => {
console.log(data);
});
Получение данных о магазине.
apiClient.getStore(251).then((data) => {
console.log(data);
});
Получить список магазинов доступных в текущей локации.
apiClient.getStores().then((data) => {
console.log(data);
});
Получить текущий заказ/корзину.
apiClient.getCurrentOrder().then((data) => {
console.log(data);
});
Получить все категории магазина.
Принимает параметр:
storeId
- id магазина;
apiClient.getCategories(251).then((data) => {
console.log(data);
});
Получить список продуктов в категории.
Принимает два параметра:
taxonId
- id категории;storeId
- id магазина;
apiClient.getCategoryProducts(1145,251).then((data) => {
console.log(data);
});
Получить информацию о товаре.
Принимает один параметр:
productId
- id продукта;
apiClient.getProduct(666777).then((data) => {
console.log(data);
});
Добавить товар в заказ/корзину.
Принимает три параметра:
orderNumber
- номер заказа;productId
- id продукта;quantity
- количество;
apiClient.getProduct("R*********",666777,1).then((data) => {
console.log(data);
});
Возвращает: line_item
, как я понял конкретное актуальное торговое предложение.
Удалить предложение из корзины.
Принимает один параметр:
lineItemId
- id торгового предложения;
apiClient.removeFromOrder(1231231).then((data) => {
console.log(data);
});
Искать по товарам с пагинацией в конкретном магазине.
Принимает четыре параметра:
storeId
- id магазина;query
- поисковый запрос;perPage
- количество продуктов на одной странице;page
- номер страницы, отсчет от 1;
apiClient.search(251,"Кошкина радость",20,1).then((data) => {
console.log(data);
});
- выровнять readme.md
- получение доступных магазинов
- кэширование дерева
- кэширование токена
- эмуляция гео
- типизировать все запросы
- поиск товаров и категорий
- тесты
Автор сего кода не несет никакой ответственности. Использовать только на свой страх и риск, все права пренадлежат владельцам прав.