backgroundbackground
Back
Back

Предлагаю вернуть фильтрацию при выгрузке товаров

Discussion
72144
# Product Management
Discussion

Коллеги, всем добрый день! Попробую описать ситуацию )) Может, найду поддержку от коллег, которые столкнулись с подобным )) На заре автоматизации работы с WB через API разделяли товары от разных поставщиков префиксами к артикулам. И при выгрузке товаров методом https://content-api.wildberries.ru/content/v2/get/cards/list можно было этот префикс сразу задать в поиск через "textSearch":"". Т.е., соответствие было неполное, и таким образом мы, например, могли сразу выгрузить и обработать только те товары, которые относятся к конкретному поставщику. Где-то в начале лета схема перестала работать, переписка с поддержкой дала понять, что "это была не фича, а баг", и так работать не должно, поэтому метод поправили и теперь "textSearch":"" работает только с полным вхождением артикула.

Пришлось переписывать всю логику, работает, не проблема. Но приходится постоянно "туда-сюда" гонять бОльшие объемы данных и делать в разы больше запросов к API. Как пример: в магазине 40к товаров, из них всего 2к - определенного поставщика. В одном запросе - лимит 100 товаров. Раньше весь этот объем укладывался в 20 запросов. Сейчас приходится делать 400!!! Ради 2к товаров. Более того, ради 5к товаров от другого поставщика приходится опять делать 400 запросов и уже потом фильтровать на своей стороне. Я понимаю, что запросы типа %LIKE% более ресурсоемкие, но не думаю, что настолько, чтобы выгоднее было делать на порядок (а то и порядки) больше запросов к API. Разобрать/обработать весь массив на своей стороне не проблема, но как-то хотелось бы на входе сегментировать... Подумайте, пожалуйста, над тем, чтобы если не вернуть, как было прежде (это реально было удобно, мы когда только начинали автоматизировать, прямо порадовались, что так хорошо продумано, а оказалось, что это случайность), то хотя бы добавить в этот метод дополнительный вариант фильтрации по частичному, а не полному вхождению.

ps. Очень надеюсь, что "форум" будет не только для автоматизаторов, чтобы выпустить пар, но и разработчики WB будут участвовать в обсуждениях и прислушиваться к предложениям ))

+7
Comment

Что бы так не гонять (понимаю о чем вы), можно же просто сделать предзагрузку на своей стороне. Загрузили 40к товаров и закешировали. А потом подгружаете раз в час изменившиеся за час. Все, у вас актуальная база с обновлением раз в час.

+3

Replies to the comment

Во избежание недопонимания, схема такая: первый раз мы загружаем все карточки. Затем делаем запрос на пачку карточек с !обратной! сортировкой, то есть с сортировкой по убыванию. Они осртируются по updated, если не ошбиаюсь. И далее, мы просто получаем пачку за пачкой, пока не дойдем до карточки, в которой updatedAt ниже порогового значения. А я СИЛЬНО сомневаюсь, что у вас все карточки меняются все за час.

Пример: 1. мы сделали 40 запросов по 100 карточек каждый и записали их в бд. - https://content-api.wildberries.ru/content/v2/get/cards/list -

Стандартные запросы с последующей пагинацией -

  1. Сделайте первый запрос:

    { "settings": { "cursor": { "limit": 100 }, "filter": { "withPhoto": -1 } } }

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

  3. Скопируйте из cursor две строки:

    • "updatedAt": "***"
    • "nmID": ***
  4. Вставьте скопированные строки в параметр запроса cursor.

  5. Повторите запрос.

  6. Повторяйте пункты со 2 по 5, пока поле total в ответе не станет меньше чем параметр limit в запросе. Это будет означать, что вы получили все карточки.

-

2. через час мы делаем запрос но уже с доп параметрами

"settings": { "sort": {"ascending": false},}

И в запросе смотрим на updatedAt. Если там разница меньше часа - то эта карточка обновилась, если больше - то мы её получили уже в основном запросе. Если количество карточек с updatedAt меньше, чем 100 (или то, что вы указали в limit) - значит дальше нет смысла делать запросы - оправляем скрипт спать. Если количество карточек с updatedAt меньше, чем 100 (или то, что вы указали в limit), листаем, то есть делаем ещё один запрос. и тд

3. повторяем запрос из пункта 2 и тд.

Все, у вас есть обновляемая база (и актуальная). И получается, что ввам надо делать запрос всего один раз в час, если окличество карточек обновленных меньше 100

0

У меня и так все на моей стороне в БД. Но поскольку ассортимент постоянно расширяется, мне надо догружать новые товары в базу (поскольку через базу построено остальное взаимодействие: цены, остатки и т.д.). И в итоге я по каждому поставщику могу несколько раз за день смотреть, что там руками менеджеров нового появилось (или даже не нового, а с изменениями в названии/габаритах и т.д., товары же в работе, правятся и т.д.). Раньше я мог просто чисто товары этого поставщика вытащить, было удобно, теперь должен каждый раз обрабатывать весь массив ))) А у меня, допустим, одного поставщика надо два-три раза в день "мониторить", другого - тоже пару раз, третьего - один раз. Причем, мониторить именно на стороне WB )) Мне-то, в общем, не проблема, я не руками делаю, просто жалко и время (процесс чуть затягивается), и нагрузку лишнюю на сервера делать (все помним, что буквально недавно комиссию подняли именно под соусом, что нагрузка на IT-инфраструктуру растет, надо больше денег :) ). Как-то хочется немного оптимизировать, да и в целом лимиты не резиновые (есть же еще общие на количество всех запросов к API), а параллельно с этим и другие запросы летят (остатки, цены, новые заказы, статусы старых заказов и т.д., и т.п.)... В общем, имхо, логичнее все-таки где-то на стороне методов добавить возможность. При этом, понимаю, что и так можно работать (тем более, что уже работает), просто есть, с чем сравнивать (раньше же "так можно было" :) ).

+1

А почему, кстати, именно на стороне вб мониторить надо?

0

Мониторить на стороне WB - образное выражение. Мне надо видеть инфу, которая именно на ВБ в карточке, а не у меня в базе (ибо бывает всякое, сбой и т.д., я думаю, что там одно, а по факту - другое). Поскольку там она меняется (не всегда мной и не всегда через API), мне надо ее оттуда синхронизировать уже к себе периодически/постоянно. Но забирать именно с ВБ изначально, поскольку ВБ - первичен ))

+1
Comment

@Moonwalker

Да, понимаю.

Выкручиваемся, как можем.

Метод, который я описал, как раз и помогает снизить нагрузку на апи - по факту, у вас будет один-два запроса в час. Фильтрацию и выгрузку уже на стороне БД просто делать . Не критикую, просто описываю, как я выкручиваюсь.

В моем случае, у клиента есть два способа обновления карточек в бд:

- автоматическое обновление только новых карточек (раз в час/день)

- обновление карточек по кнопке - сразу прописываю (обычно прописываю с 00:00)

Ну а дальше он работает чисто с обработчиками базы данных.

+1

Replies to the comment

Да тут вопрос не в критике или нет, нормально, чужое мнение всегда полезно )) Я схему для себя делал (я сам, считай, и селлер, и разраб), у меня она работает, мне удобна и понятна ))) Просто при любом раскладе придется сперва работать со всеми товарами (даже частью), а потом их уже делить "на поставщиков", условно. В моем случае, например, с одним поставщиком мне надо работать в 12 часов, с другим - в 14 часов. И обрабатываются они разными способами (из-за своих особенностей). Если выкачивать даже "updated" (тут у каждого своя логика и привычки работы), мне в этот момент надо тогда все сразу обрабатывать, ибо у меня в куче все товары будут. А сразу оно не в тему, поскольку части товаров время на обработку еще не пришло )) Решить все можно, придумать, перепилить (сейчас, правда, нет смысла, все и так работает, а эти тонны запросов - ну, пусть WB обрабатывает, если хочется), но хочется как-то более линейно, в конце концов. Это же и им снизит нагрузку )) В общем, я к тому, что работало раньше нормально. Зачем-то поломали (но говорят, что пофиксили) )) ps. Мне вот катастрофически не хватает возможности через API заменить, например, только названия. Или только описания. Или только габариты/вес. Не трогая все остальное (т.е., сейчас надо выгрузить всю инфу по товару, потом ее поправить, потом залить обратно). А нафига гонять лишнее, если мне надо только названия поправить? ))) Или только к весу всех товаров добавить вес упаковки )))

+1

Вот это - да, вот это трыгдец, что нельзя поменять только часть инфы в карточке. Сильно обжегся на этом.

+1