Парсер для сайта на движке Bitrix(с модулем iBlock)

Author Роман Чернышов    Category CMS, PHP     Tags , Комментариев 0 Дата 6 Май

Парсер для сайта на движке BitrixCMS Bitrix, она же «1С-Битрикс: Управление сайтом» особо в представлении не нуждается, без преувеличения на сегодняшний день, это одна из самых популярных коммерческих CMS в российском сегменте интернета для управления контентом сайта. Сегодня я хочу рассказать о скрипте-парсере, разработкой которого я занимался в последнее время, предназначенного для сбора данных со сторонних источников и публикации их на сайт под управлением CMS Bitrix, в частности в модуль Информационные блоки(iBlock). Пару слов о модуле iBlock — это мощный и гибкий механизм для хранения и выборки информации различными способами, применяется для расширения стандартного функционала CMS Bitrix.

О парсере

Ранее я уже рассказывал о парсере для XenForo, данный же парсер для Bitrix построен на том же движке, и в своей основе имеет схожий алгоритм и принцип работы. Парсер состоит из двух частей: серверная часть — написанная на PHP, и клиентская часть — написанная на JavaScript, которая работает на стороне браузера через UserScript(дополнение Violentmonkey для Chrome) или же по средствам «безголового» браузера по типу PhantomJS. Такая реализация позволяет с легкостью имитировать действия реального пользователя, обходить защиту от ботов, в том числе некоторые версии Google reCapcha и защиту от DDOS которую предоставляют такие сервисы как Cloudflare(например) — разумеется исключительно для легального доступа к контенту, без нарушения каких либо законодательных норм.

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

Логика работы парсера

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

  • Первичная настройка парсера на сайт донора, с указанием где и какие данные ему собирать, обучить «пониманию» структуры HTML страниц донора (задача не сложная, например прописать путь в xPath или с использованием селекторов jQuery до заголовка страницы H1);
  • Обход первичной страницы сайта — каталога, сбор ссылок на товары или объявления;
  • Обход страниц с товарами или объявлениями, сбор всех необходимых данных;
  • В случае постраничной разбивки в каталоге товаров или объявлений, обход всех страниц;
  • Обход профилей компаний опубликовавших объявления, если таковые есть;

Сохраняем данные в базу данных Bitrix

Все данные полученные парсером сохраняются в базу данных, а именно в модуль iBlock — Информационные блоки (в таблицы данного модуля), но при необходимости парсер можно настроить и на работу с другими модулями CMS. Далее я расскажу какие таблицы модуля iBlock задействуются.

Cохраняем объявления(запись в iBlock)

Таблица: b_iblock_element
Запрос:

INSERT INTO `b_iblock_element` 
	(`ID`, `TIMESTAMP_X`, `MODIFIED_BY`, `DATE_CREATE`, `CREATED_BY`, `IBLOCK_ID`, `IBLOCK_SECTION_ID`, `ACTIVE`, 
	`ACTIVE_FROM`, `ACTIVE_TO`, `SORT`, `NAME`, `PREVIEW_PICTURE`, `PREVIEW_TEXT`, `PREVIEW_TEXT_TYPE`, `DETAIL_PICTURE`, 
	`DETAIL_TEXT`, `DETAIL_TEXT_TYPE`, `SEARCHABLE_CONTENT`, `WF_STATUS_ID`, `WF_PARENT_ELEMENT_ID`, `WF_NEW`, `WF_LOCKED_BY`, 
	`WF_DATE_LOCK`, `WF_COMMENTS`, `IN_SECTIONS`, `XML_ID`, `CODE`, `TAGS`, `TMP_ID`, `WF_LAST_HISTORY_ID`, `SHOW_COUNTER`, 
	`SHOW_COUNTER_START`) 
VALUES
	('',	'{$date}',	2,	'$date',	2,	2,	{$SectionID},	'Y',	NULL,	NULL,	500,	'{$title}',	
	NULL,	NULL,	'text',	NULL,	'{$description}',	'html',	'{$content}',	1,	NULL,	NULL,	
	NULL,	NULL,	NULL,	'Y',	'0',	NULL,	NULL,	'0',	NULL,	2,	'{$date}');

В данном запросе стоит обратить внимания на значения полей, в которых представлены следующие переменные:
$date — дата в формате Unix Timestamp;
$SectionID — ID раздела/секции модуля iBlock к которому будет относится данная запись;
$title — Заголовок записи;
$description — Краткое описание;
$content — Полный текст записи.

Cохраняем свойства(статичные) к записи

Таблица: b_iblock_element_iprop
Запрос:

INSERT INTO `b_iblock_element_iprop` (`IBLOCK_ID`, `SECTION_ID`, `ELEMENT_ID`, `IPROP_ID`, `VALUE`) VALUES
	({$IBLOCK_ID}, {$SectionID}, {$lastID}, {$IPROP_ID}, '{$content}');";

В данном запросе стоит обратить внимания на значения полей, в которых представлены следующие переменные:
$IBLOCK_ID — ID типа контента созданного информационного блока в рамках модуля iBlock, как правило значение одинаково для всех записей;
$SectionID — ID раздела/секции модуля iBlock к которому будет относится данная запись;
$lastID — ID записи к которой относится данное дополнительное свойство;
$IPROP_ID — ID свойства;
$content — Значение свойства.

Cохраняем дополнительные(настраиваемые) свойства к записи

Таблица: b_iblock_element_iprop
Запрос:

INSERT INTO `b_iblock_element_property` (`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_TYPE`, `VALUE_ENUM`, `VALUE_NUM`, `DESCRIPTION`) 
VALUES ({$IBLOCK_PROPERTY_ID}, {$lastID}, '{$name}', 'text', NULL, {$value}, {$description});

В данном запросе стоит обратить внимания на значения полей, в которых представлены следующие переменные:
$IBLOCK_PROPERTY_ID — ID типа дополнительного свойства;
$lastID — ID записи к которой относится данное дополнительное свойство;
$name — Название свойства;
$value — Значение свойства;
$description — Описание свойства.

Технические характеристики

Парсер состоит из двух частей, серверная часть на PHP 7 которая отдает команды и клиентская часть на JavaScript, которая получает команды, обходит страницы сайта и собирает нужные данные. Для работы клиентской части используется UserScript(дополнение Violentmonkey для Chrome) или же PhantomJS. Со страницами парсер работает по средствам CSS селекторов jQuery или xPatch. Клиентская и серверная часть общаются между собой используя Ajax запросы по протоколу HTTPS, данные передаются в формате Json.

Заключение

Как я ранее уже не раз говорил, все мои парсеры построены на одной платформе и основным их преимуществом является то, что их можно настраивать под парсинг из любых источников и на загрузку данных в любые проекты, будь то Bitrix, WordPress, joomla, XenForo или самописный движок. Если у вас есть потребность в парсинге данных — обращайтесь, буду раз поработать с вами!

Оставить комментарий

Об авторе и блоге Чернышов Р.В. Сертификат. Топ 10% лучших фрилансеров, Чернышов Р.В.

Друзья, всем привет!

Меня зовут Роман Чернышов, я веб-разработчик и данный блог посвящен моим проектам и бизнесу.

Тут я делюсь личным опытом
и отвечаю на вопросы. Я всегда готов к сотрудничеству с вами, готов реализовать проект любой сложности(опыт 10+ лет).

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



Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка