БэкендData и ИИPython

Ozon Seller API на Python: получаем товары и остатки в Excel

Получаем товары и остатки из Ozon Seller API на Python, обрабатываем страницы ответа и собираем аккуратный Excel-отчёт через openpyxl.

Кодик

Автор

6 мин чтения

Ozon Seller API можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. Seller API и openpyxl превращают сырой каталог в привычный XLSX с фильтром, закреплённой строкой и подсветкой дефицита. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.

Один запрос редко возвращает весь каталог, а связывание product_id, offer_id и остатков требует явной нормализации. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте скрипт, который получает страницы товаров, сопоставляет остатки и сохраняет форматированный Excel. Проверка: в книге одна строка на товар, повторный запуск перезаписывает отчёт, а дефицит выделяется цветом.

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

прочитать Client-Id и Api-Key из окружения. Не расширяйте проект до первого успешного запуска.

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

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

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

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

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

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

ЭтапДействиеПроверяемый результат
Доступпрочитать Client-Id и Api-Key из окружениязаголовки готовы без печати
Каталогзапросить product/info/list страницамисобраны product_id и offer_id
Остаткиполучить данные по товарамколичество связано с нужным offer_id
Excelзаписать лист, фильтр и стильreport.xlsx открывается без предупреждений

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

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

Зафиксируйте первый успех Отладьте функцию записи Excel на трёх фиктивных товарах до подключения реального Seller API. Сохраните команду запуска и ожидаемый вывод.

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

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

import os
import httpx
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font

HEADERS = {"Client-Id": os.environ["OZN_CLIENT_ID"], "Api-Key": os.environ["OZN_API_KEY"]}
BASE = "https://api-seller.ozon.ru"

def request(path, payload):
    response = httpx.post(BASE + path, headers=HEADERS, json=payload, timeout=30)
    response.raise_for_status()
    return response.json()

def save_report(items, filename='ozon-report.xlsx'):
    book = Workbook(); sheet = book.active; sheet.title = 'Остатки'
    sheet.append(['offer_id', 'product_id', 'Название', 'Остаток'])
    for cell in sheet[1]: cell.font = Font(bold=True)
    red = PatternFill('solid', fgColor='FFD6D6')
    for item in items:
        sheet.append([item['offer_id'], item['product_id'], item['name'], item['stock']])
        if item['stock'] < 5:
            for cell in sheet[sheet.max_row]: cell.fill = red
    sheet.freeze_panes = 'A2'; sheet.auto_filter.ref = sheet.dimensions
    book.save(filename)
Что должно произойти после запуска
  • report.xlsx содержит заголовок, фильтр и закреплённую первую строку.
  • Товары с остатком меньше пяти выделены, идентификаторы остаются в отдельных колонках.
  • Повторный запуск даёт тот же предсказуемый результат.
  • Пустой ввод получает понятное сообщение вместо падения.

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

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

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

Клиент API отвечает только за запрос и пагинацию. Нормализованный список отделяет контракт Ozon от структуры Excel, поэтому отчёт можно тестировать локально. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. Секреты и персональные данные не должны попадать в репозиторий, журнал или публичный скриншот.

ЧастьЗа что отвечаетЧто проверить
Seller APIвозвращает товары страницамикурсор или last_id обновляется
Нормализациясвязывает идентификаторы и остатокодна строка на offer_id
openpyxlсоздаёт XLSX и стиликнига открывается и фильтруется

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

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

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

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

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

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

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

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

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

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

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

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

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

Ключи в ячейках или коде

Секреты не относятся к отчёту. Используйте окружение.

Только первая страница

Большая часть каталога пропадает. Идите до окончания курсора.

product_id принят за offer_id

Строки связываются неверно. Храните оба поля.

Стиль до добавления строк

Диапазон не охватывает новые данные. Применяйте после записи.

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

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

Готовый результат проекта: Ozon Seller API на Python: получаем товары и остатки в Excel
Финальный экран показывает результат, состояние запроса и понятное сообщение об ошибке без раскрытия секретов.

Короткие ответы
Зачем отделять API от Excel?

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

Чем offer_id полезен в отчёте?

Это понятный продавцу идентификатор для сопоставления с учётной системой.

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

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

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

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

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

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

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

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

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