📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Автоматический парсер сайта на n8n с загрузкой в 1С через тг бот

s-alpha12:55

Transcription

Всем добрый день. Давайте рассмотрим сегодня реализацию парсера сайта поставщика непосредственно, непосредственно, сразу в 1С на основе Telegram-бота, созданного на системе N8N. Это у нас легко модифицируемая система, которую мы можем, собственно, видоизменять и использовать как, например, парсер в данном случае. А давайте посмотрим.

В данном случае у нас есть некий поставщик, который можем посмотреть и попробовать загрузить какую-то позицию в наш каталог. Какой функционал у нас сейчас есть у бота? Мы непосредственно можем указать тот каталог, который мы хотим загрузить. Для этого нужно указать каталог, который мы будем прогружать нашу продукцию. Допустим, это "обжимной инструмент". Значит, скопируем эту позицию и укажем боту, что мы будем загружать это именно в каталог "обжимной инструмент".

А почему сделано так? Естественно, можно сделать различные системы, чтобы бот у нас распознавал группу, находил её на сайте, непосредственно на сайте поставщика, но в данном случае было принято решение сделать именно таким образом. То есть сначала выбирается каталог, который мы будем парсить, и после этого выбирается та позиция вручную, которую мы будем обновлять или добавлять.

Значит, можем выполнить проверку сейчас, что у нас, допустим, данной позиции ещё нет в нашей 1С. Проверяем по номеру артикула. Собственно, синхронизация, проверка идёт по номеру артикула. Можно, собственно, поменять, конечно, сделать по наименованию ещё как-то. В данном случае позиции нет. Переходим в Telegram-бот, нажимаем, указываем позицию, переходим непосредственно в N8N. Нажимаем "Выполнить Workflow".

Значит, Workflow у нас пошёл выполняться. Что мы видим в Telegram-боте? Он отвечает нам, что данная позиция у нас, значит, создана. Вот он пишет, что он спарсил, собственно, название, а код, артикул, который нашёл, собственно, на сайте. И, ну, что у нас в данный момент данная позиция создана. Переходим в 1С и давайте проверим, что у нас получилось. Вот у нас загрузился инструмент для обжима с соответствующим артикулом. У нас прогрузились в данный момент все товары. Все картинки сейчас можно посмотреть, например, в разделе "Присоединённый файл". Он прогрузил у нас все картинки. Давайте проверим, что у нас тут действительно именно столько картинок, да? Вот у нас они есть.

А, о'кей. Что у нас прогрузилось ещё? Значит, у нас есть, соответственно, описание текстовое, ну, соответственно, код, а применяется значение, меняется реквизит "выгружать на сайт". Это чтобы он у нас сразу попал на сайт. И прогружаются цены. Цены у нас тоже автоматически берутся с сайта. Ну, и там немножко видоизменяется. Это тоже, соответственно, делается так, как необходимо именно в каком-то конкретном случае.

Давайте посмотрим, что у нас получилось в итоге на сайте, если мы сделаем, например, выгрузку на наш сайт. Значит, как мы можем убедиться, в данный момент этой позиции нет. Поиск ничего не даёт. Переходим к синхронизации данными. Запустим её побыстрее, чтобы не ждать. Так. И так она у нас произойдёт, в принципе, в течение 10 минут, но нам необходимо побыстрее, поэтому вот обмен завершён. Давайте снова поищем данную продукцию на нашем сайте. Вот она у нас загрузилась. Первая фотография, соответственно, будет последняя загруженная. Смотрим, что у нас получилось. Значит, вот у нас есть код. У нас загрузилось шесть фотографий. В принципе, классно. И загрузились, загрузилось описание. Ну, плюс какие-то характеристики. В данном случае у нас минимально только код. Загрузилась также цена, артикул, ну и наличие.

Значит, давайте разберём, как это работает. Вот у нас есть бот. Сделаем запуск его ещё раз. Давайте, например, для этого возьмём на этот раз эту же позицию. И теперь введём её ещё раз и посмотрим, как это будет происходить. Выполняем запуск. Значит, у нас происходит определение, что в данный момент происходит. Первый блок - это у нас идёт проверка, что мы вводим кат-код или указываем каталог. Если, соответственно, каталог, то сохраняем его и сообщаем, что мы его сохранили. Это мы сделали в самом начале. Дальше идёт запрос на сайт, где мы получаем чистые данные и загружаем их с сайта поставщика. Значит, это просто HTTP-запрос. Дальше у нас пошло распределение, потому что мы получили достаточно много данных, и нам необходимо их спарсить. Значит, для этого у нас есть Extract HTML модель блок, который выгружает у нас информацию из чистого HTML. Нам необходимо найти по определённым, значит, CSS-селекторам, например, H1, Price. Мы тут вытаскиваем код, соответственно, нам нужен, он же у нас будет артикул, ключ, Image. У нас достаёт все фотографии. И вот, соответственно, справа мы видим, как куда у нас складывается вся эта информация. Значит, вот у нас Price, Price два, поскольку на сайте поставщика у нас два прайса, и, соответственно, загрузка происходит фотографии. Также у нас загружается Description - это описание. А каталог тоже забирается, но он нам пока что не нужен. И забираются дополнительные свойства, которые мы тоже пока что не грузим. У нас просто таких свойств в базе нет.

Значит, давайте посмотрим, что происходит дальше. Значит, идёт обработка этих данных, фильтрация, убираются всякие лишние значения. Значит, у нас, в частности, выделяется перечень фотографий и собираются все эти данные вот здесь вот у нас в объекте merge. А здесь уже мы видим, что у нас приходит вот такой полноценный, достаточно JSON, который, собственно, мы можем использовать непосредственно для загрузки в нашу 1С. И мы переходим после, значит, агрегации и отбора наших данных. Мы переносим все эти данные в единый JSON data. Мы переходим к отправке этого всего в 1С для того, чтобы загрузить это всё у нас непосредственно в 1С. То есть у нас весь вот этот вот блок собирается в единый JSON, который мы, собственно, отправляем и получаем результат вот тот, который мы видим непосредственно в Telegram-боте. Ну и дальше, соответственно, сообщение. Тут, собственно, ничего необычного.

Можем посмотреть, как это реализовано со стороны непосредственно 1С. То есть в данном случае у нас сделано специальное расширение, которая, а, действует отдельно от основной конфигурации. Значит, оно, соответственно, опубликовано HTTP-сервис, который позволяет, а, получить продукцию, проверить по артикулу, что она есть. Это в самом начале происходит, чтобы понимать, будет ли у нас загрузка, ну, имеет ли смысл нам, есть ли у нас в нашей базе данная продукция. Значит, соответственно, после чего у нас происходит загрузка самой номенклатуры через также HTTP-сервис, загрузка номенклатуры, где у нас идёт загрузка, непосредственно загрузка данных через общий модуль. Значит, в общем модуле мы читаем, собственно, полученную строчку. И переходим к её разбору. Значит, здесь возможность загружать сразу несколько позиций, но мы сейчас загружаем только одну для того, чтобы быстренько разобраться, что у нас происходит. Значит, вот у нас есть идёт результат, возможность создания номенклатуры и, соответственно, она создаётся. Либо, если мы находим данную номенклатуру в нашей базе, то происходит обновление. То есть сейчас мы также посмотрим, как происходит обновление. Значит, дальше у нас идёт всех основных характеристик, получение родительского каталога, установка. Это тот самый каталог, который мы в самом начале вводили. Получается у нас свойство "выгружать на сайт" для того, чтобы продукция сразу у нас могла попасть на наш сайт. И также установка а дополнительных реквизитов и загрузка фотографий. Значит, вот у нас идёт загрузка. Также мы можем грузить все остальные массивы. Это про name, про в нашем случае. То есть вот они у нас, допустим, выгружаются вот здесь вот в виде названий, э, позиции, точнее название свойств и значения свойств, но мы их пока не грузим, потому что у нас, как я уже сказал, просто нету. Вот. И после этого мы переходим к изменению цен номенклатуры, расчёта цены какой-то небольшой. Меняем базовую цену и выгружаем это всё на сайт. В случае, соответственно, каких-то ошибок у нас идёт отправка результата с ошибкой о том, что происходит не так или что не смогло загрузиться. В итоге вот так вот это и работает.

Таким образом, давайте посмотрим, а как, например, можно достаточно быстро грузить следующие позиции. То есть, поскольку каталог у нас уже выбран через каталог "обжимной инструмент", мы можем просто вводить те кода, которые нас интересуют, и их загружать либо обновлять. Например, если мы сейчас введём ещё раз, например, код 6779, то у нас она будет продукция ещё раз обновлена. Собственно, в ней ничего уже не поменяется, потому что она та, которая есть. Давайте поэтому посмотрим, например, продукцию. А да, необходимо, конечно, запустить у нас в автоматическом режиме нашего бота, чтобы он у нас постоянно обрабатывал поступающую информацию. И мы переходим, например, к следующей продукции 67900494. Давайте посмотрим, есть ли она здесь. Её опять же у нас здесь нет. Идём в Telegram-бот, вводим название. А вот он её нашёл на сайте. И, соответственно, происходит обработка. Вот она создана. Ещё раз идём обратно, проверяем, что она у нас прогрузилась, всё с ней нормально.

Соответственно, по-хорошему, естественно, описание лучше переносить в раздел описания. Например, мы можем перенести её в раздел "текст HTML" и вернуться в резутальный визуальный редактор и, например, выгрузить. Давайте в этот раз более красиво сделаем. Выгрузим её там с какими-нибудь пометками и что-нибудь здесь подправим. Там добавим какой-то обработки, уберём лишние символы. О'кей. Вот так вот нам нравится. Будем выгружать. Значит, опять же, у нас здесь загрузились все фотографии, проверять не будем. Назначился дополнительный реквизит и загрузилась цена. Посмотрим, например, на цену. Сохраним позицию 443. Переходим к разделу узлы и обмена сайтов. Просинхронизируем на наш сайт и возвращаемся теперь к нашему уже сайту. Снова вводим нам наш код, который мы только что загрузили. А так вот его ещё нету. Значит, прогрузка ещё не завершилась. Всё ещё идёт. Обмен завершён. Возвращаемся на сайт и смотрим, что у нас получается. Да, вот у нас инструмент для обжимки загрузился. И на этот раз вот у нас те правки, которые мы внесли, то есть HTML у нас красивые теперь выгружается. Соответственно, выгружаются также все фотографии, цена та, которая у нас была у 1С, всё прекрасно работает.

Также данный бот ещё загружает эту продукцию в, э, в Google Doc Sheets, так называемый, или аналог Экселя. И, соответственно, вот мы можем посмотреть, что у нас данная позиция добавилась. То есть, например, если мы, допустим, выгрузим ещё одну позицию 7094, можем посмотреть в реальном времени, как она у нас попадёт в наш Excelку. Если такой, конечно, позиции здесь нет. Если она здесь есть, то он просто обновит эти данные. Вот у нас также мы его только что выгрузили, 70094. И вот она здесь у нас появилась, соответственно, появилась также у нас на 1С. Ну, всё как обычно, то есть всё работает, в принципе, на полном автомате. Вот всё у нас также уже работает.

Если будут какие-то вопросы, обращайтесь, пишите комментарии, переходите на сайт, задавайте ваши вопросы.