- PVSM.RU - https://www.pvsm.ru -

Обновляем цены на товары в магазине Озон из Гугл Таблицы по API

Обновляем цены на товары в магазине Озон из Гугл Таблицы по API - 1
Ссылочка на видео НЕ из Ютуба

К сожалению, редактор Хабра смог отобразить видео только с Ютуба, поэтому здесь оставлю ссылку на Вконтакт для тех, кто не хочет сталкиваться с ограничениями скорости: https://vk.com/video251305991_456239023 [1]

Всем привет! Меня зовут Дмитрий и я разработчик в команде GoogleSheets.ru. Продолжаем нашу совместную с платформой "Озон для разработчиков" рубрику «Ozon и Google-таблицы: продаем товары “в клеточках”» для продавцов на маркетплейсе Ozon, в которой мы рассказываем как автоматизировать работу с магазином и товарами из Гугл Таблиц.

В этой статье мы покажем вам новую Гугл Таблицу для обновления цен на товары в магазине Озон, в которую мы не только загружаем список товаров как в предыдущей статье [3], но еще загружаем их цены, а также имеем возможность эти цены отредактировать и отправить изменения сразу в Озон. В этот раз мы больше внимания уделим структуре таблицы и взаимоотношениям данных в ней, чем скриптам. Все скрипты и новые функции подробнее можно будет посмотреть в редакторе скриптов. Ссылка на Таблицу с решением будет в конце статьи.
Ниже ссылка на инструкцию как попасть в редактор:

Структура Таблицы

Лист "Товары"

В отличии от прошлого примера, где мы записывали в таблицу товары из магазина Озон, одним листом со списком товаров уже не обойтись. Тем не менее, первым листом в таблице будут как раз данные о товарах, он будет называться “товары”. В предыдущей статье [5] описано какие именно данные о товарах мы можем загрузить в таблицу. Нам обязательно понадобятся название товара и его offer_id. Они будут служит нам для удобства понимания с каким именно товаром мы работаем и сопоставления с данными о ценах, которые мы позже загрузим.

Перечень полей, которые будем отображать в Таблице

Перечень полей, которые будем отображать в Таблице
обязательно понадобятся название товара и его offer_id  (артикул)

обязательно понадобятся название товара и его offer_id (артикул)

лист “текущие цены”

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

Лист с загруженными из Озон в Гугл Таблицу ценами на товары

Лист с загруженными из Озон в Гугл Таблицу ценами на товары

На лист “текущие цены” запишем только данные о ценах, потому что остальные нам пока не нужны. По просьбам подписчиков нашего телеграм-канала [6] добавил также данные о комиссиях и объемном весе и вынес настройку в отдельный объект (положу под спойлер).
Функция, которая реализует это показана ниже на скрине.

Функция для получения цен из Озон и их записи в Таблицу

Функция для получения цен из Озон и их записи в Таблицу
Код функции
/** Функция для получения цен из Озон и их записи в Таблицу */
function loadAndWritePrices() {
    const client = OzonApi.client(keys);
    const response = client.productApiGetProductInfoPricesV4({
        filter: {
            /*  Можно отфильтровать по offer_id, чтобы получить другие данные о товаре */
            // offer_id: [''],
            /* или по product_id */
            // product_id: [''],
            /** Здесь фильтр "по видимости", подробнее - https://docs.ozon.ru/api/seller/#operation/ProductAPI_GetProductList */
            visibility: 'ALL',
        },
        /** Если придешь спрашивать почему загружает только 40 позиций, значит ты невнимательно читал комментарии (= */
        limit: 40,
    });
    const prices = response.result.items.map(item => {
        const rowObject = Object.assign(
            { offer_id: item.offer_id, product_id: item.product_id },
            item.price,
            item.commissions,
            { volume_weight: item.volume_weight }
        );
        return flatter(rowObject, pricesFlatConfig);
    });
    /** Преобразуем массив объектов в массив массивов (строк), именно в таком виде они пишутся в Таблицу */
    const pricesGrid = collectionToGrid(prices, { includeHeader: true });
    /**Записываем данные в таблицу на лист указанный в настройках с помощью Sheets Api */
    writeGridToTable(pricesGrid, currentPricesSheetName);
    showMsg(true);
}

Настройки вывода и парсинга данных о ценах (используется в функции flatter(object, config)):

const priceFieldsToShow = [
    'offer_id',
    'product_id',
    'price',
    'old_price',
    'premium_price',
    'recommended_price',
    'retail_price',
    'vat',
    'min_ozon_price',
    'marketing_price',
    'marketing_seller_price',
    'min_price',
    // 'currency_code',
    // 'auto_action_enabled',
    // 'sales_percent',
    // 'fbo_fulfillment_amount',
    // 'fbo_direct_flow_trans_min_amount',
    // 'fbo_direct_flow_trans_max_amount',
    // 'fbo_deliv_to_customer_amount',
    // 'fbo_return_flow_amount',
    // 'fbo_return_flow_trans_min_amount',
    // 'fbo_return_flow_trans_max_amount',
    // 'fbs_first_mile_min_amount',
    // 'fbs_first_mile_max_amount',
    'fbs_direct_flow_trans_min_amount',
    'fbs_direct_flow_trans_max_amount',
    // 'fbs_deliv_to_customer_amount',
    // 'fbs_return_flow_amount',
    // 'fbs_return_flow_trans_min_amount',
    // 'fbs_return_flow_trans_max_amount',
    'sales_percent_fbo',
    'sales_percent_fbs',
    'volume_weight'
]

/** Настройки для обработки данных о ценах */
const pricesFlatConfig = {
    /** Как форматировать даты в ответе "date" - 29.03.2023; "dateTime" - 29.03.2023 15:08 */
    formatDate: 'dateTime',
    /** Список полей, которые нужно вывести в ответе, если не указан - выводятся
     *  все поля, за исключением указанных в списке excludeFields
     */
    onlyFields: priceFieldsToShow,
    /** Список полей, которые исключить из ответа. */
    excludeFields: [],
    /**Список полей, которые нужно оставить без изменений и преобразований */
    noFormatFields: ['offer_id', 'name'],
}

лист “обновление цен”

На этом листе как раз и происходит вся магия. На нем мы объединяем данные из двух предыдущих листов, чтобы видеть не только offer_id, но и название товара для удобства работы с ними при обновлении цен, сами цены, а также данные для изменения. Будьте внимательны при обновлении данных о товарах, при добавлении или удалении товара в Озон они могут “съехать” в этом листе и перестать соответствовать тем значениям, которые вы ранее ввели для них.

Лист для обновления цен на товары в Озон из гугл таблицы

Лист для обновления цен на товары в Озон из гугл таблицы

Все что залито синим цветом – исходные данные, полученные в результате загрузки в таблицу данных о товарах и ценах на них, а все что зеленым – это данные, которые будут отправлены в Озон для обновления цен. Мы специально добавили флаг update, чтобы была возможность выбрать конкретные товары для обновления. В примечаниях к полям указано назначение из документации к Ozon seller API. Если нужно обновить какие-то другие значения, которых на этом листе нет – можно добавить соответствующий столбец справа, после old_price. Главное, чтобы его название соответствовало документации.


Как запустить обновление цен на товары

Давайте попробуем сделать это вместе, на примере коричневого бумажника (выделен цветом на листе). Ставим флажок в столбце update, указываем новую цену (поставим на рубль меньше, чтобы владелец магазина не сильно ругался и позволил нам и дальше проводить свои эксперименты). Обращаем внимание, что если не хотите изменить настройки участия товара в акциях, то следует поставить “UNKNOWN”, при обновлении это поле не должно быть пустым. И в меню кликаем на пункт Ozon.  Наблюдаем следующую картину:

Запускаем из таблицы обновление цены в Озон

Запускаем из таблицы обновление цены в Озон

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

Результат обновления цены на товар

Результат обновления цены на товар

Как мы можем наблюдать – все что записали в таблицу обновилось в кабинете продавца.

Заключение

Мы рассмотрели пример применения методов загрузки и обновления цен на товары в магазине Озон из Гугл таблицы. Таблица и код в ней – полностью рабочие и, если вам лень разбираться с тем как это работает, то достаточно просто сделать копию таблицы [8] и вставить свои ключи АПИ. Практическое применение может быть любым. Например, можно написать формулу, которая будет повышать или снижать цену в зависимости от остатков или курса валют и автоматически запускать обновление два раза в день.

Кстати, в следующих статьях мы разберём работу с остатками товаров, поэтому не отключайтесь, пожалуйста.)

Всем кто дочитал до конца большое спасибо за терпение и интерес! В качестве приза вот вам ссылочки на наше комьюнити, где крутые эксперты делятся знаниями и опытом по автоматизации бизнеса и укрощению Таблиц Гугл. А ссылка на Таблицу со скриптом немного выше.

С вами была команда GoogleSheets.ru [11], мы делаем бизнес эффективным и несём в мир огонёк образования и развития.
Все вопросы, замечания и пожелания пишите в комментариях или в наш чат по Гугл таблицам [10], будем рады обратной связи.

Автор: mityayka1

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/instruktsiya/400667

Ссылки в тексте:

[1] https://vk.com/video251305991_456239023: https://vk.com/video251305991_456239023

[2] dev.ozon.ru: https://dev.ozon.ru/case/115-Zagruzhaem-tovary-iz-magazina-Ozon-v-Google-tablitsu?__rr=1

[3] в предыдущей статье: https://googlesheets.ru/zagruzhaem-tovary-iz-ozon-v-gugl-tablicu/

[4] googlesheets.ru: https://googlesheets.ru/script-editor-guide/

[5] предыдущей статье: https://habr.com/ru/articles/823566/#fieldsToShow

[6] нашего телеграм-канала: https://t.me/+14oFwfi8lwFjZWYy

[7] здесь: https://googlesheets.ru/script-editor-guide/#allows

[8] сделать копию таблицы: https://docs.google.com/spreadsheets/d/1m2k9pckDJU1AWYWukRSgCFI0a4f2Xy0HF6gNbQzzPCA/copy

[9] t.me: https://t.me/+NwO6_QbMwB4xZmNi

[10] t.me: https://t.me/+11_SvUAZqE40ZGUy

[11] GoogleSheets.ru: https://googlesheets.ru/?utm_source=habr_prices

[12] Источник: https://habr.com/ru/articles/853726/?utm_campaign=853726&utm_source=habrahabr&utm_medium=rss