Metadata-Version: 2.4
Name: wb-private-api-python
Version: 0.1.1
Summary: Python client for selected Wildberries storefront endpoints
License-Expression: ISC
Project-URL: Source, https://github.com/aetonevajno/wb-private-api-python
Project-URL: Issues, https://github.com/aetonevajno/wb-private-api-python/issues
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: browser
Requires-Dist: seleniumbase<5,>=4.55.2; extra == "browser"
Dynamic: license-file

# wb-private-api-python

Библиотека получает данные с сайта Wildberries: ищет товары, показывает цены и остатки, получает отзывы, вопросы и сведения о продавцах. Это неофициальный клиент для внутреннего API сайта. За основу взят [форк `rrrublev/wb-private-api` версии 0.8.10](https://github.com/rrrublev/wb-private-api/tree/9dd14d4) проекта [Станислава Гельмана](https://github.com/glmn/wb-private-api), а код написан заново на Python.

## Что понадобится

- Python 3.11 или новее
- Google Chrome
- Доступ к интернету

Входить в аккаунт Wildberries и вручную получать токен не нужно. При первом запросе к защищённому адресу библиотека сама откроет окно Chrome.

## Установка

Откройте терминал и выполните:

```bash
python3 -m venv .venv
.venv/bin/python -m pip install 'wb-private-api-python[browser]'
```

## Первый запрос

```python
from wb_private_api import WBPrivateAPI

with WBPrivateAPI() as wb:
    catalog = wb.search("HotWheels", page_count=1)
    print("Найдено товаров:", catalog.total_products)

    if catalog.products:
        product = catalog.products[0]
        product.get_details_data()
        print("Артикул:", product.id)
        print("Цена из ответа WB:", product.current_price)
```

Сохраните пример в файл `example.py` и запустите:

```bash
.venv/bin/python example.py
```

`page_count=1` загружает одну страницу результатов. Если параметр убрать, библиотека попробует загрузить до 100 страниц, поэтому запрос может занять больше времени.

После выполнения блока `with` окно браузера закроется.

## Что умеет библиотека

- Искать товары и получать подсказки для поиска: `search`, `key_hint`
- Получать списки товаров бренда или продавца: `get_brand_catalog_page`, `get_supplier_catalog_page`
- Получать сведения о товаре и доставке: `get_list_of_products`, `get_delivery_data_by_nms`, `WBProduct.create`, `WBProduct.get_details_data`, `WBProduct.get_stocks`
- Читать отзывы, фотографии, вопросы и сведения о видео товара: `WBProduct.get_feedbacks`, `WBFeedback.get_photos`, `WBProduct.get_questions`, `WBProduct.get_video`
- Получать данные об акциях: `get_promos`, `WBProduct.get_promo`
- Получать сведения о продавце: `get_supplier_info`

Остальные методы и их параметры можно посмотреть в файлах [`client.py`](https://github.com/aetonevajno/wb-private-api-python/blob/main/wb_private_api/client.py) и [`models.py`](https://github.com/aetonevajno/wb-private-api-python/blob/main/wb_private_api/models.py).

## Как работает доступ к Wildberries

Сайт выдаёт браузеру временный ключ доступа (cookie) для части запросов. Библиотека использует его автоматически и не сохраняет в файл. Если Wildberries отклонит запрос из-за устаревшего ключа, библиотека обновит страницу или откроет новое окно и повторит запрос один раз. Если это не поможет, программа покажет ошибку.

## Что важно знать

`get_delivery_data_by_nms` возвращает карточки товаров с полями доставки из текущего ответа Wildberries, включая `time1` и `time2`. Библиотека не переводит эти поля в дату доставки.

`get_promos` возвращает опубликованные сайтом оформления акций. В списке могут быть акции с датой начала в будущем: смотрите поля `start` и `end` у каждой записи.

`WBProduct.get_promo()` считает товар участвующим в акции, если Wildberries прислал `panelPromoId`. Поле `active` само по себе не означает, что акция уже началась.

`get_supplier_shipment` сохранил название метода из исходного форка, но текущий ответ содержит сведения о продавце и его рейтинге, а не список отгрузок.

Wildberries может изменить внутренний API без предупреждения. Основные запросы проверяли в браузере. Обновление ключа проверяли на смоделированной ошибке 498, но не на настоящем отказе сайта.

## Проверка

Чтобы запустить локальные тесты:

```bash
.venv/bin/python -m unittest discover -s tests -v
```

Тесты проверяют логику библиотеки на подготовленных ответах. Для них не нужен аккаунт Wildberries.
