БэкендData и ИИPython

Wildberries API на Python: выгружаем остатки товаров в CSV

Делаем безопасный запрос к Wildberries API на Python, разбираем JSON остатков, сохраняем CSV и не раскрываем токен продавца в коде и логах.

Кодик

Автор

6 мин чтения

Wildberries API можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. Остатки из API можно превратить в обычный CSV, который открывается в Excel и подходит для первого полезного проекта автоматизации. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.

Токен продавца нельзя вставлять в пример, а реальная структура ответа, пагинация и лимиты отличаются между методами API. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте скрипт с отдельной функцией преобразования ответа в строки CSV и безопасным сетевым слоем. Проверка: фикстура JSON превращается в таблицу, пустой список создаёт только заголовок, а HTTP-ошибка не затирает прошлый файл.

1Соберите минимум

выбрать endpoint остатков в актуальном разделе документации. Не расширяйте проект до первого успешного запуска.

2Увидьте данные

ответ успешно декодируется. Проверяйте значение, а не отсутствие ошибки.

3Измените правило

После успеха добавьте порог дефицита и второй файл только для малых остатков. Так копирование станет практикой.

Как устроен учебный проект Wildberries API

Wildberries API разделяет подготовку, основное действие, проверку ответа и сохранение результата. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.

ЭтапДействиеПроверяемый результат
Методвыбрать endpoint остатков в актуальном разделе документациипонятны параметры и категория токена
Запроспередать Authorization и тайм-аутответ успешно декодируется
Преобразованиевыбрать артикул, склад и количествокаждый остаток становится строкой
CSVзаписать временный файл и заменить отчётстарый отчёт не теряется при ошибке

Контрольные точки: метод, запрос, преобразование и csv. Следующий шаг начинается после совпадения с ожидаемым результатом.

Путь данных в проекте Wildberries API
От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.

Зафиксируйте первый успех Сначала сохраните обезличенный пример ответа в fixture.json и отладьте преобразование без доступа к кабинету. Сохраните команду запуска и ожидаемый вывод.

Собираем рабочий пример шаг за шагом

Материал сверялся с официальной документацией сервиса 21 октября 2026 года. Установите httpx, задайте WB_API_TOKEN и сверьте endpoint с текущим разделом официальной документации. Проверьте текущую папку через pwd или Get-Location. Вставьте пример целиком, выполните один раз, затем разбирайте по частям.

import csv
import os
from pathlib import Path
import httpx

TOKEN = os.environ["WB_API_TOKEN"]
URL = os.environ["WB_STOCKS_URL"]

def rows_from_payload(payload: list[dict]):
    for item in payload:
        yield {
            "nm_id": item.get("nmId"),
            "warehouse": item.get("warehouseName", ""),
            "quantity": item.get("quantity", 0),
            "in_way": item.get("inWayToClient", 0),
        }

def download() -> list[dict]:
    response = httpx.get(URL, headers={"Authorization": TOKEN}, timeout=30)
    response.raise_for_status()
    return response.json()

def save_csv(items: list[dict], filename='wb-stocks.csv'):
    target = Path(filename)
    temp = target.with_suffix('.tmp')
    fields = ['nm_id', 'warehouse', 'quantity', 'in_way']
    with temp.open('w', newline='', encoding='utf-8-sig') as file:
        writer = csv.DictWriter(file, fieldnames=fields)
        writer.writeheader(); writer.writerows(rows_from_payload(items))
    temp.replace(target)

if __name__ == '__main__':
    save_csv(download())
Что должно произойти после запуска
  • CSV содержит стабильные колонки и открывается в Excel с русскими названиями складов.
  • При сетевой ошибке финальный файл не заменяется пустым отчётом.
  • Повторный запуск даёт тот же предсказуемый результат.
  • Пустой ввод получает понятное сообщение вместо падения.

Код держит подготовку отдельно от внешнего действия, поэтому ошибку можно найти на конкретном шаге. Найдите в примере вход, проверку и место формирования результата.

Хрупкий и проверяемый вариант Wildberries API
Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.

Что происходит внутри и почему это работает

HTTP-слой получает сырые данные, генератор rows_from_payload нормализует поля, а CSV-слой ничего не знает о токене и сети. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. Секреты и персональные данные не должны попадать в репозиторий, журнал или публичный скриншот.

ЧастьЗа что отвечаетЧто проверить
API-клиентдобавляет токен и проверяет статусесть тайм-аут
Нормализацияпревращает JSON в плоские строкиотсутствующее поле имеет значение по умолчанию
CSV writerсоздаёт отчёт в utf-8-sigфайл заменяется атомарно

Не угадывайте endpoint по старому блогу: WB API разделён на категории и меняется. Храните URL или версию рядом с конфигурацией, а поля ответа сверяйте с текущей схемой метода. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.

Проверьте границу Запустите преобразование на пустом массиве, одном товаре без warehouseName и двух складах. Меняйте одно условие за прогон, чтобы видеть причину.

Проверяем проект и добавляем свою функцию

Добавьте колонку доступного остатка, фильтр quantity ниже порога и отдельный CSV дефицита. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.

Проверка своими руками
  1. Сохраните ожидаемый результат: фикстура JSON превращается в таблицу, пустой список создаёт только заголовок, а HTTP-ошибка не затирает прошлый файл.
  2. Измените правило: добавьте порог дефицита и второй файл только для малых остатков. Сначала предскажите итог.
  3. Передайте граничное значение и убедитесь, что приложение не падает.
  4. Верните корректные данные и объясните роли трёх основных частей.
Готово, если выполняются все пункты
  • понятны параметры и категория токена
  • ответ успешно декодируется
  • каждый остаток становится строкой
  • старый отчёт не теряется при ошибке

Полезное улучшение сохраняет исходный сценарий и добавляет одну новую проверяемую возможность. Полезная правка проходит от нового ввода до видимого результата.

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

Что запомнить и куда двигаться дальше

Для расписания добавьте безопасный секрет CI, повтор только временных ошибок и отметку времени отчёта. Для закрепления откройте в анализе CSV через pandas, в автоматизации Excel и в отчёте Ozon Seller.

Как изучить тему в Кодике

Сначала разберите входные данные и один успешный вызов, затем изучайте дополнительные параметры. Сначала восстановите главную функцию и проверьте её на трёх значениях.

ШагЧто разобратьМини-проверка
1. ОсноваФайлы, словари, генераторы и csv в PythonОбъясните вход и выход функции.
2. ИнструментHTTP-заголовки, токены и статусы WB APIПовторите команду по памяти.
3. ПроектНормализацию JSON и атомарную записьПроверьте два сценария.
4. РефакторингПагинацию, лимиты, расписание и мониторингРазделите ввод, логику и вывод.

Перепишите ключевую функцию по памяти и проверьте её на корректном, пустом и ошибочном вводе. Базовый синтаксис закрепите через курс Python.

Токен в коде

Он попадает в Git и скриншоты. Используйте окружение.

Endpoint из старой статьи

Контракт мог измениться. Сверяйтесь с dev.wildberries.ru.

Файл очищается до запроса

Ошибка сети оставляет пустой отчёт. Сначала создавайте temp.

Весь JSON в одной ячейке

Отчёт нельзя фильтровать. Нормализуйте нужные поля.

Сверяйтесь с первичной документацией. Команды и ограничения примера проверены по официальному источнику 1. Если версия инструмента изменилась, официальный источник важнее старого скриншота.

Что получится в итоге

Готовый результат проекта: Wildberries API на Python: выгружаем остатки товаров в CSV
Финальный экран показывает результат, состояние запроса и понятное сообщение об ошибке без раскрытия секретов.

Короткие ответы
Зачем писать во временный файл?

Чтобы не потерять предыдущий отчёт при ошибке запроса или записи.

Почему преобразование тестируют без API?

Чистую функцию можно проверить на фикстурах без секрета и лимитов.

Что проверять первым, если Wildberries API не запускается?

Версию среды, текущую папку, команду запуска и первую строку ошибки.

Как понять, что проект Wildberries API работает?

Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.

Можно ли начать с готового кода?

Да. Добейтесь результата, измените одно правило и восстановите ключевую функцию без копирования.

Сделайте один осознанный шаг дальше

Выберите одно улучшение и проведите его от ввода до результата.

Если не хватает основы, перейдите курс Python, затем восстановите ключевую функцию без подсказки.