Полный цикл настройки граббера
В данной статье мы постарались уместить полный цикл настройки граббера под импорт новостей с определённого сайта. Итак, допустим мы определились с тем, что хотим грабить с сайта https://warezed.ru/ Что мы должны сделать в самом начале? В начале мы должны перейти по одному из адресов полных статей, допустим: https://warezed.ru/news/12604-V_Katare_otkrylsya_21_iy_sammit_LAG.html
И заглянуть в HTML код статьи.
Настройка категории источников
В категории источников системы импорта новостей FDE Grabber указываются настройки, согласно которым будет обрабатываться получаемый контент (содержимое). Пожалуй самой значимой из настроек категории является настройка шаблона для парсинга. Согласно данному шаблону будет после получения содержимого статьи (текста) производиться парсинг и извлечение полезного контента статьи. В парсере FDE Grabber имеется возможность указать шаблон несколькими способами:- с помощью регулярного выражения (требуется знание регулярных выражений)
- указать простой шаблон без регулярных выражений (обычно это наиболее оптимальный вариант указания шаблона. Поэтому рассмотрим только его)
- с помощью DOM шаблонов
- с помощью бесшаблонного парсинга
...<div class="w_content"> <div id='news-id-9276'>В IX международном фестивале балета "Мариинский" примут участие ... </div> </div> </td></tr><tr><td> </td></tr></table>...
10-я статья: https://warezed.ru/economic/9275.html код:
...<div class="w_content"> <div id='news-id-9275'>Министры считают необходимой скорейшую активизацию новой модели... </div> </div> </td></tr><tr><td> </td></tr></table>...
Исходя из приведённых данных можно заметить шаблонную структуру:
<div class="w_content"> <div id='news-id-{null}'>{description}</div> </div></td></tr><tr><td> </td></tr></table>
Где {null} - это произвольно изменяющееся ненужное нам содержимое, а {description} - это как раз нужный нам контент. Собственно, это и есть простой шаблон для категории граббера.
Как настроить парсинг с помощью DOM шаблонов читайте здесь.
Посмотреть как выглядит редактирование/создание категории источников можно на демо сайте: https://fdegrabber.demo.fdstar.net/grabber-demo/index.php?act=categories&items_per_page=30&action=redact&id=40 логин: admin пароль: 123456Проверить правильность настройки шаблона категории можно в разделе “Тест категории”. Для этого требуется выбрать из списка нужную категорию для проведения теста, и указать адрес статьи, на которой будет проводиться тест, например https://warezed.ru/show_buisness/9276.html
Посмотреть, как выглядит тестирование какой-либо категории можно на демо сайте: https://fdegrabber.demo.fdstar.net/grabber-demo/index.php?act=category_test&feed_category_id=40 логин: admin пароль: 123456Всё, категорию мы добавили, что дальше?
Добавление сайта для публикации полученных статей
Далее нам требуется добавить в граббер сайт, куда мы собираемся публиковать полученные статьи. Переходим в раздел "сайты" и добавляем сайт, заполняя необходимые поля.Посмотреть, как выглядит добавление/редактирование сайта можно на демо сайте: https://fdegrabber.demo.fdstar.net/grabber-demo/index.php?act=sites&items_per_page=30&action=redact&id=1 логин: admin пароль: 123456При заполнении полей потребуется указать:
- URL сайта, например https://test.ru/
- Полный путь к сайту на сервере, например /var/www/test.ru/
- URL папки загрузок, например https://test.ru/uploads/
- , например /var/www/test.ru/uploads/
- Параметры подключения к базе данных сайта: хост, логин, пароль, название базы данных, префикс к таблицам
- Кодировку сайта и базы данных
- Указать тип вашей CMS, например FDE CMS LITE
Для того, чтобы определить полный путь к вашему сайту на сервере можно использовать PHP скрипт следующего содержания:Публикацию можно осуществлять как локальную так и удалённую. Локальная публикация - это такой режим работы граббера, когда он установлен на том же сервере, что и сайт, в который требуется публиковать полученные статьи. Удалённая публикация - это такой режим работы граббера, когда он установлен на другом сервере, отличном от того, на котором работает сайт, в который требуется публиковать полученные статьи.<?PHP define('ROOT', rtrim(str_replace('\\', '/', dirname(__FILE__)), '/'). '/'); echo ROOT; ?> Потребуется закачать этот скрипт в корень той директории, полный путь которой требуется определить и запустить из браузера или из командной строки.Для наиболее часто используемых кодировок в русскоязычных сайтах параметры будут следующие: UTF-8: UTF-8
: utf8
: utf8_general_ci
Windows-1251: Windows-1251
: cp1251
: cp1251_general_ci
В случае удалённой публикации нам потребуется при настройке сайта отметить опцию "Удалённая публикация" и заполнить поле "URL транзитного файла".
URL транзитного файла - это адрес транзитного файла копии граббера, которую потреуется установить на тот же сервер, где находится ваш сайт.
Например, ваш сайт для находится по адресу https://test.com/. Пусть транзитную копию граббера мы установили в директорию fde, так, что адрес граббера получился https://test.com/fde/. Тогда URL транзитного файла будет выглядеть так: https://test.com/fde/transit_publication.php
Транзитную копию граббера не обязательно устанавливать полностью, запуская инсталлятор install.php. Если копия граббера будет использоваться только в транзитных целях, то достаточно отредактировать его конфигурационный файл /путь_к_корню_папки_системы_импорта_новостей_на_сервере/config/dynamic.php следующим образом:
'FILES_DIR' => '/путь_к_грабберу_на_сервере/uploads/files/', 'TMP_DIR' => '/путь_к_грабберу_на_сервере/uploads/tmp/',
указав реальные пути и проставив на соответствующие папки права на запись
Настройка источника
Когда мы добавили сайт, в который будем публиковать полученные статьи, категорию источников с указанным в ней шаблоном для парсинга полезного контента - мы можем переходить к добавлению источника. Источник - это страница на сайте, с которого мы хотим импортировать новости со списком новостей, имеющая как минимум заголовки и адреса страниц публикаций/новостей/статей, где содержится полное содержимое. Источники могут быть трёх типов:- RSS источники, в данном случае списки статей будут импортироваться из RSS фидов, которые вещает сайт, с которого планируется получать контент
- Atom источники, в данном случае списки статей будут импортироваться из Atom фидов, которые вещает сайт, с которого планируется получать контент
- HTML источники, в данном случае списки статей будут импортироваться из обычных HTML страниц, на которых имеется список новостей
Для того, чтобы не было проблем с кодировкой полученных статей, указывайте её явно. Для того, чтобы наша система правильно переводила одну кодировку в другую, необходимо, чтобы на вашем сервере была доступна библиотека iconv. Список кодировок, для указания явно можно пополнять по своему усмотрению в файле ROOT/inc/charsets_list.php Для того, чтобы просмотреть список доступных кодировок в UNIX доступна команда iconv -l Библиотека iconv может быть доступна как системная и/или как модуль для PHP. Если перекодирование работает при ручном тесте, но не работает из CRON, то кроновские скрипты граббера придётся запускать через wget Для того, чтобы граббер логинился на сайт, и мог, например, читать скрытый текст, можно указать POST параметры для логина. Пример: https://www.some-site.ru/index.php?username=ineednews&password=ineednews Здесь параметры делятся на 2 части:
- https://www.some-site.ru/index.php - адрес страницы, на которой будет производиться логин на сайт
- username=ineednews&password=ineednews - непосредственно POST параметры
RSS/Atom источник
Как можно импортировать контент с RSS или Atom источников? Каков принцип работы? Пусть у нас имеется постоянно обновляющийся список новостей (feed, фид) в котором, обычно есть следующая информация по каждой статье (обычно в фиде представлены 10-20 последних статей):- адрес статьи
- название (заголовок) статьи
- краткое описание
- дата
HTML список новостей (HTML источник)
Только что мы с вами рассмотрели импорт новостей с RSS/Atom источников. Пришло время познакомиться с граббингом с HTML источников. Но перед этим нам нужно выяснить, что же такое HTML источник. Для граббера FDE Grabber источник - это список новостей (который, в идеале, периодически обновляется и в нём появляются новые статьи или новости), в котором можно выявить следующие данные по каждой статье:- адрес конечной статьи
- название (заголовок)
- краткое описание
- возможно, некоторые другие дополнительные данные
Посмотреть как выглядит редактирование/создание источников можно на демо сайте: https://fdegrabber.demo.fdstar.net/grabber-demo/index.php?act=feeds&items_per_page=30&filter_activity=&filter_feed_type=&filter_category=&action=redact&id=179 логин: admin пароль: 123456Проверить правильность указания шаблона для парсинга HTML источника можно в разделе “Тест HTML источника” Хорошо, добавили источник, а дальше то что? Далее можно переходить непосредственно к парсингу материала и добавлению его на ваш сайт.
Запуск парсинга контента
Система импорта новостей FDE Grabber (парсер контента) работает в три этапа:- кроновский скрипт crontab_feeds.php определяет один из доступных источников получения статей (RSS/Atom/HTML источник) и обновляет его. Если имеются новые статьи (уникальность статьи определяется по адресу и/или названию), то статьи будут добавлены в качестве заданий для получения. По мере запуска данного кроновского скрипта, источники обновляются по кругу Каждому запуску скрипта соответствует одно обновление одного из доступных источников
- кроновский скрипт crontab_articles.php определяет задания для получения статей и получает из этого списка одну статью. Одному запуску данного скрипта соответствует одно получение статьи
- кроновский скрипт crontab_publicate.php определяет есть ли уже полученные и доступные для публикации статьи и если есть, то публикует полученные статьи в вашу CMS
Посмотреть как выглядит данный модуль можно на демо сайте: https://fdegrabber.demo.fdstar.net/grabber-demo/index.php?act=manual_cron логин: admin пароль: 123456