@rrrublev/wb-private-api 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +220 -0
- package/index.js +11 -0
- package/package.json +43 -0
- package/src/Constants.js +1181 -0
- package/src/SessionBuilder.js +283 -0
- package/src/Utils.js +154 -0
- package/src/WBCatalog.js +37 -0
- package/src/WBFeedback.js +26 -0
- package/src/WBPrivateAPI.js +527 -0
- package/src/WBProduct.js +295 -0
- package/src/WBQuestion.js +7 -0
package/README.md
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# @rrrublev/wb-private-api
|
|
2
|
+
|
|
3
|
+
NodeJS модуль. Работает через приватное API Wildberries.
|
|
4
|
+
|
|
5
|
+
   
|
|
6
|
+
|
|
7
|
+
[](https://nodei.co/npm/@rrrublev/wb-private-api/)
|
|
8
|
+
|
|
9
|
+
## Установка
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm i @rrrublev/wb-private-api
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Получение токена
|
|
16
|
+
|
|
17
|
+
Библиотека использует внутреннее API Wildberries, для доступа к которому требуется токен `x_wbaas_token`. Авторизация на сайте не нужна.
|
|
18
|
+
|
|
19
|
+
**Как получить:**
|
|
20
|
+
|
|
21
|
+
1. Откройте [wildberries.ru](https://www.wildberries.ru) в браузере, дождитесь полной загрузки страницы
|
|
22
|
+
2. Откройте DevTools (`F12`) → вкладка **Console**
|
|
23
|
+
3. Вставьте и выполните содержимое файла [`scripts/get-wb-token.js`](https://github.com/rrrublev/wb-private-api/blob/main/scripts/get-wb-token.js)
|
|
24
|
+
4. Скопируйте выведенную строку JSON и сохраните в файл `.wbaas_token` в корне проекта
|
|
25
|
+
|
|
26
|
+
Токен действителен ~14 дней. По истечении повторите процедуру.
|
|
27
|
+
|
|
28
|
+
**Использование токена в коде:**
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
// Вариант 1 — файл .wbaas_token подхватывается автоматически
|
|
32
|
+
const wbapi = new WBPrivateAPI({ destination: Constants.DESTINATIONS.MOSCOW });
|
|
33
|
+
|
|
34
|
+
// Вариант 2 — передать токен явно
|
|
35
|
+
const wbapi = new WBPrivateAPI({
|
|
36
|
+
destination: Constants.DESTINATIONS.MOSCOW,
|
|
37
|
+
wbaasToken: "ВАШ_ТОКЕН"
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Вариант 3 — установить после создания
|
|
41
|
+
wbapi.setToken("ВАШ_ТОКЕН");
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Примеры
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary>Вывод данных о первом товаре из поисковой выдачи</summary>
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
import { WBPrivateAPI, Constants } from "@rrrublev/wb-private-api";
|
|
51
|
+
|
|
52
|
+
const destination = Constants.DESTINATIONS.MOSCOW;
|
|
53
|
+
const wbapi = new WBPrivateAPI({ destination });
|
|
54
|
+
|
|
55
|
+
const catalog = await wbapi.search("HotWheels", 2);
|
|
56
|
+
const product = catalog.products[0];
|
|
57
|
+
|
|
58
|
+
const stocks = await product.getStocks();
|
|
59
|
+
const feedbacks = await product.getFeedbacks();
|
|
60
|
+
const { items: questions } = await product.getQuestions();
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
</details>
|
|
64
|
+
|
|
65
|
+
<details>
|
|
66
|
+
<summary>Вывод рекламодателей из поисковой выдачи</summary>
|
|
67
|
+
|
|
68
|
+
```js
|
|
69
|
+
import { WBPrivateAPI, Constants } from "@rrrublev/wb-private-api";
|
|
70
|
+
|
|
71
|
+
const wbapi = new WBPrivateAPI({ destination: Constants.DESTINATIONS.MOSCOW });
|
|
72
|
+
|
|
73
|
+
const { pages, prioritySubjects, adverts } = await wbapi.getSearchAds("Менструальные чаши");
|
|
74
|
+
|
|
75
|
+
console.log(pages); // позиции рекламы на страницах
|
|
76
|
+
console.log(prioritySubjects); // темы по приоритету
|
|
77
|
+
console.log(adverts); // рекламодатели с CPM
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
</details>
|
|
81
|
+
|
|
82
|
+
<details>
|
|
83
|
+
<summary>Получение всех товаров поставщика</summary>
|
|
84
|
+
|
|
85
|
+
```js
|
|
86
|
+
import { WBPrivateAPI, Constants } from "@rrrublev/wb-private-api";
|
|
87
|
+
|
|
88
|
+
const wbapi = new WBPrivateAPI({ destination: Constants.DESTINATIONS.MOSCOW });
|
|
89
|
+
const supplierId = 845298;
|
|
90
|
+
|
|
91
|
+
const total = await wbapi.getSupplierProductCount(supplierId);
|
|
92
|
+
console.log(`Всего товаров: ${total}`);
|
|
93
|
+
|
|
94
|
+
// pageCount = 0 — все страницы (до 100), pageCount = 3 — только первые 3
|
|
95
|
+
const catalog = await wbapi.getSupplierCatalogAll(supplierId, 3);
|
|
96
|
+
|
|
97
|
+
console.log(`Получено: ${catalog.products.length}`);
|
|
98
|
+
console.log(`Страниц: ${catalog.pages}`);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
</details>
|
|
102
|
+
|
|
103
|
+
## API
|
|
104
|
+
|
|
105
|
+
### `WBPrivateAPI`
|
|
106
|
+
|
|
107
|
+
```js
|
|
108
|
+
new WBPrivateAPI({ destination, wbaasToken? })
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| Параметр | Тип | Описание |
|
|
112
|
+
|----------|-----|----------|
|
|
113
|
+
| `destination` | `object` | Направление доставки из `Constants.DESTINATIONS` |
|
|
114
|
+
| `wbaasToken` | `string` | Токен. Если не передан — читается из `.wbaas_token` |
|
|
115
|
+
|
|
116
|
+
#### Поиск
|
|
117
|
+
|
|
118
|
+
| Метод | Возвращает | Описание |
|
|
119
|
+
|-------|-----------|----------|
|
|
120
|
+
| `search(keyword, pageCount?, retries?, filters?)` | `WBCatalog` | Поиск товаров по ключевому слову. `pageCount = 0` — все страницы (до 100) |
|
|
121
|
+
| `getSearchAds(keyword)` | `object` | Рекламодатели в поисковой выдаче |
|
|
122
|
+
| `getCarouselAds(productId)` | `array` | Реклама в карусели внутри карточки товара |
|
|
123
|
+
| `keyHint(query)` | `array` | Поисковые подсказки WB |
|
|
124
|
+
| `searchSimilarByNm(productId)` | `object` | Похожие товары (как в разделе «Похожие товары» на WB) |
|
|
125
|
+
|
|
126
|
+
#### Товары
|
|
127
|
+
|
|
128
|
+
| Метод | Возвращает | Описание |
|
|
129
|
+
|-------|-----------|----------|
|
|
130
|
+
| `getListOfProducts(productIds)` | `array` | Данные по массиву артикулов |
|
|
131
|
+
| `getDeliveryDataByNms(productIds, retries?)` | `array` | Данные о доставке по массиву артикулов |
|
|
132
|
+
| `getPromos()` | `array` | Текущие промо-акции на WB |
|
|
133
|
+
|
|
134
|
+
#### Поставщики
|
|
135
|
+
|
|
136
|
+
| Метод | Возвращает | Описание |
|
|
137
|
+
|-------|-----------|----------|
|
|
138
|
+
| `getSupplierInfo(sellerId)` | `object` | Информация о поставщике |
|
|
139
|
+
| `getSupplierShipment(sellerId)` | `object` | Данные об отгрузке поставщика |
|
|
140
|
+
| `getSupplierProductCount(supplierId)` | `number` | Общее количество товаров поставщика |
|
|
141
|
+
| `getSupplierCatalogAll(supplierId, pageCount?, retries?)` | `WBCatalog` | Все товары поставщика с постраничным перебором |
|
|
142
|
+
| `getSupplierCatalogPage(supplierId, page?, retries?)` | `array` | Товары поставщика с указанной страницы |
|
|
143
|
+
|
|
144
|
+
#### Бренды
|
|
145
|
+
|
|
146
|
+
| Метод | Возвращает | Описание |
|
|
147
|
+
|-------|-----------|----------|
|
|
148
|
+
| `getBrandProductCount(brandId)` | `number` | Общее количество товаров бренда |
|
|
149
|
+
| `getBrandCatalogPage(brandId, page?, retries?)` | `array` | Товары бренда с указанной страницы |
|
|
150
|
+
|
|
151
|
+
#### Токен
|
|
152
|
+
|
|
153
|
+
| Метод | Описание |
|
|
154
|
+
|-------|----------|
|
|
155
|
+
| `setToken(token)` | Устанавливает токен `x_wbaas_token` |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### `WBCatalog`
|
|
160
|
+
|
|
161
|
+
Объект, возвращаемый методами `search()` и `getSupplierCatalogAll()`.
|
|
162
|
+
|
|
163
|
+
#### Свойства
|
|
164
|
+
|
|
165
|
+
| Свойство | Тип | Описание |
|
|
166
|
+
|----------|-----|----------|
|
|
167
|
+
| `products` | `WBProduct[]` | Массив товаров |
|
|
168
|
+
| `pages` | `number` | Количество страниц |
|
|
169
|
+
| `totalProducts` | `number` | Общее количество товаров в выдаче |
|
|
170
|
+
|
|
171
|
+
#### Методы
|
|
172
|
+
|
|
173
|
+
| Метод | Возвращает | Описание |
|
|
174
|
+
|-------|-----------|----------|
|
|
175
|
+
| `page(number)` | `WBProduct[]` | Товары с заданной страницы (нумерация с 1) |
|
|
176
|
+
| `getPosition(productId)` | `number` | Позиция товара по артикулу. `-1` если не найден |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### `WBProduct`
|
|
181
|
+
|
|
182
|
+
#### Создание
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
// Из поисковой выдачи — WBProduct создаётся автоматически внутри WBCatalog
|
|
186
|
+
const product = catalog.products[0];
|
|
187
|
+
|
|
188
|
+
// По артикулу напрямую
|
|
189
|
+
const product = await WBProduct.create(12345678);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
#### Свойства
|
|
193
|
+
|
|
194
|
+
| Свойство | Тип | Описание |
|
|
195
|
+
|----------|-----|----------|
|
|
196
|
+
| `totalStocks` | `number` | Суммарный остаток по всем складам (требует предварительного вызова `getStocks()`) |
|
|
197
|
+
| `currentPrice` | `number` | Текущая цена товара |
|
|
198
|
+
|
|
199
|
+
#### Методы
|
|
200
|
+
|
|
201
|
+
| Метод | Возвращает | Описание |
|
|
202
|
+
|-------|-----------|----------|
|
|
203
|
+
| `getStocks()` | `array` | Остатки на складах |
|
|
204
|
+
| `getPromo()` | `object` | Участие в промо-акции |
|
|
205
|
+
| `getFeedbacks()` | `WBFeedback[]` | Все отзывы о товаре |
|
|
206
|
+
| `getQuestions()` | `object` | Все вопросы о товаре. Возвращает `{ items, totalQuestions, fetchedQuestions, truncated }` |
|
|
207
|
+
| `getVideo(quality?)` | `object` | Видео товара. `quality` по умолчанию `"1440p"`. Возвращает `{ hasVideo, playlistUrl, hls, mp4Preview, duration, chunks }` |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
### `WBFeedback`
|
|
212
|
+
|
|
213
|
+
| Метод | Возвращает | Описание |
|
|
214
|
+
|-------|-----------|----------|
|
|
215
|
+
| `getPhotos(size?)` | `string[]` | Ссылки на фото в отзыве. `size`: `"min"` (по умолчанию) или `"full"` |
|
|
216
|
+
|
|
217
|
+
## Credits
|
|
218
|
+
|
|
219
|
+
Based on [glmn/wb-private-api](https://github.com/glmn/wb-private-api) by Stanislav Gelman.
|
|
220
|
+
Licensed under ISC.
|
package/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const WBPrivateAPI = require("./src/WBPrivateAPI");
|
|
2
|
+
const WBProduct = require("./src/WBProduct");
|
|
3
|
+
const Constants = require("./src/Constants");
|
|
4
|
+
const Utils = require("./src/Utils");
|
|
5
|
+
|
|
6
|
+
module.exports = {
|
|
7
|
+
Constants,
|
|
8
|
+
Utils,
|
|
9
|
+
WBPrivateAPI,
|
|
10
|
+
WBProduct,
|
|
11
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rrrublev/wb-private-api",
|
|
3
|
+
"version": "0.8.5",
|
|
4
|
+
"description": "Node.js wrapper for Wildberries private API",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"index.js",
|
|
8
|
+
"src/"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"test": "jest --selectProjects unit --verbose --detectOpenHandles",
|
|
12
|
+
"test:integration": "jest --selectProjects integration --verbose --detectOpenHandles"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/rrrublev/wb-private-api.git"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"wildberries",
|
|
20
|
+
"marketplace",
|
|
21
|
+
"api",
|
|
22
|
+
"nodejs"
|
|
23
|
+
],
|
|
24
|
+
"author": "rublev (https://github.com/rrrublev)",
|
|
25
|
+
"contributors": [
|
|
26
|
+
"Stanislav Gelman (https://github.com/glmn) (original author)"
|
|
27
|
+
],
|
|
28
|
+
"license": "ISC",
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/rrrublev/wb-private-api/issues"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/rrrublev/wb-private-api#readme",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"qs": "^6.15.1",
|
|
35
|
+
"string-format": "^2.0.0",
|
|
36
|
+
"undici": "^8.2.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"jest": "^30.3.0",
|
|
40
|
+
"jsdom": "^29.1.1",
|
|
41
|
+
"patchright": "^1.59.4"
|
|
42
|
+
}
|
|
43
|
+
}
|