На базе универсального парсера WP UniParser я создал парсер AutoRefresh. Он позволяет легко создавать автоматически обновляемый сайт на WordPress и DLE (по просьбам «трудящихся» возможна доработка под другие CMSможем обсудить). Парсер AutoRefresh запускается с помощью крона и хранит историю предыдущей сессии парсинга. Благодаря этому скрипт может регулярно парсить обновления с заданного набора сайтов-источников и публиковать новые записи на ваш сайт.

Чтобы AutoRefresh начал работать, вам всего лишь стоит задать несколько базовых опций, настроить 5-10 источников парсинга обновлений и добавить задание CRON планировщика на вашем сервере (в этом я вам помогу).

Парсер AutoRefresh состоит из 3 независимых модулей: парсера, публикатора и админки (ниже приведен ее скриншот). Благодаря такому разделению, данный скрипт можно быстро допилить для работы в составе любой CMS. Доработка под одну CMS стоит 25-50$ в зависимости от сложности структуры БД.

Парсер AutoRefresh

Базовый алгоритм работы парсера

Для лучшего понимания работы парсера ниже приведен базовый алгоритм его работы.

1. Происходит проверка расписания парсинга. Если между началом прошлой и текущей сессий парсинга не прошло достаточно времени (точнее, больше времени, чем указано в настройке Интервал между запусками парсера), то парсер завершает работу, чтобы дождаться очередного запуска. Если же «время пришло», то парсер переходит ко второму шагу.

2. Из файла /refresh/libs/news_sources.xml считываются настройки источников для парсинга. Формат настроек описан ниже. Вкратце в нем указано что, откуда и в каких количествах парсить.

3. Для каждого источника осуществляется его обработка. При этом парсер загружает страницу, заданную в <,URL>,…<,/URL>, и собираем с нее все ссылки, соответствующие регулярному выражению в <,REG_ALLOWED_URL>,…<,/REG_ALLOWED_URL>,. Затем из собранных ссылок отфильтровываются те, которые были получены с данного <,URL>,…<,/URL>, при предыдущем запуске парсера (они подгружаются из файла /refresh/libs/recent_processed.xml). Для максимум <,NUM>,…<,/NUM>, ссылок из получившегося набора производится обработка по следующему алгоритму:

a. Получается блок контента согласно регулярному выражению в <,REG_CUT_CONTENT>,…<,/REG_CUT_CONTENT>,,

b. Получается заголовок согласно регулярному выражению в <,REG_CUT_HEADER>,…<,/REG_CUT_HEADER>,

c. Блок контента чистится, согласно регулярному выражению в <,REG_CLEAN_CONTENT>,…<,/REG_CLEAN_CONTENT>,

d. Производится поиск списка тегов (в формате тег1,тег2,тег3) согласно регулярному выражению в <,REG_DET_TAGS>,…<,/REG_DET_TAGS>,. Если оно не задано, поиск производиться не будет и поле тегов останется пустым.

e. Если пользователем не задана категория для постов с данного источника (она задается в <,PREDEF_CAT>,...<,/PREDEF_CAT>,), то парсер пытается определить категорию согласно регулярному выражению в <,REG_DET_CAT>,…<,/REG_DET_CAT >,.

f. Если удалось получить найти блок контента, заголовок и категорию, то новость публикуется в блог.

4. Очищается список страниц, сохраненных в /refresh/libs/recent_processed.xml во время предыдущей сессии парсера. После этого файл заполняется страницами, полученными во время текущей сессии. Обратите внимание, что в список входят не только ссылки, с которых получен контент, а ВСЕ ссылки, полученные со страницы и соответствующие регулярному выражению в <,REG_ALLOWED_URL>,…<,/ REG_ALLOWED_URL >, (это делается во избежании парсинга более старых материалов при следующих проходах).

Инструкция пользователя

1. Разархивируйте архив refresh.rar.

2. Загрузите в корневую директорию вашего сайта папку refresh.

3. Создайте папку для сохранения изображений. Установите на нее права 777.

4. Запустите админку парсера (http://yoursite.com/refresh/).

5. Установите все необходимые настройки:

a. Интервал между запусками парсера (в минутах). Интервал между запусками вашего парсера AutoRefresh. Обратите внимание, что крон может запускаться и каждую минуту, но парсер все равно будет работать с частотой, заданной этой настройкой.

b. Папка для сохранения изображений (относительно корневой директории сервера).

c. Максимальная допустимая ширина изображения (в пикселах). Если изображения, которые парсятся оказываются больше, то парсер автоматически масштабирует их вывод устанавливая максимальную допустимую ширину и соответствующую ей высоту изображения.

d. Максимальное количество символов до вставки тега more. Максимальное количество символов до вставки тега more (тег WordPress для разделения анонса и поста). Это абсолютное количество символов (то есть если у вас изначально идет html код вставки изображения, то его символы тоже Учитываются). При установке этой настройки в 0 парсер не будет автоматически добавлять тег more.

e. Максимальный размер папки с изображениями (в кб). Максимальный размер, который может занимать папка с изображениями . Благодаря этому параметру вы можете ограничить пространство, занимаемое папкой с изображениями на хосте.

f. Настройка целей парсинга. Эта настройка будет описана ниже. Сейчас только уточню, что все настройки целей парсинга хранятся в файле /refresh/libs/refresh_sources.xml.

g. Настроить CRON в панели управления хостера. Запускаемым файлом является /refresh/refresh_cronmanager.php. Вы можете настроить его на запуск каждую минуту, поскольку периодичность запуска скрипта парсинга все равно контролируется настройкой Интервал между запусками парсера (в минутах). Вот как выглядит правило для CRON у меня на хосте.

/usr/local/bin/php -q $HOME/public_html/myhost.com/refresh/refresh_cronmanager.php >, /dev/null 2>,&1



Настройка источников парсинга

Настройка одного отдельно взятого источника парсинга имеет следующий формат:

<,PARSE_RULE>, //открывающий тег описания источника

<,URL>,...<,/URL>, //адрес страницы, на которой будет регулярно производиться поиск ссылок на новые материалы

<,NUM>,...<,/NUM>, //максимальное количество новых материалов, которые будут собраны со страницы <,URL>,…<,/URL>, при очередном запуске парсера (если вы хотите чтобы этот источник временно не парсился, установите в данное поле значение 0)

<,REG_ALLOWED_URL>,#...#i<,/REG_ALLOWED_URL>, //регулярное выражение, задающее допустимый формат URLа новости (поскольку далеко не все ссылки на странице в <,URL>,…<,/URL>,могут быть ссылками именно на новости)

<,REG_CUT_CONTENT>,#...#ims<,/REG_CUT_CONTENT>,//Регулярное выражение, определяющее блок контента на странице новости (за блок контента принимается первый соответствующий этому регулярному выражению блок. Если парсер не найдет на странице ни одного блока, соответствующего этому выражению, то парсинг данной страницы будет прерван, после чего парсер перейдет к другой странице, соответствующей <,REG_ALLOWED_URL>,…<,/REG_ALLOWED_URL>,).

<,REG_CUT_HEADER>,#...#ims<,/REG_CUT_HEADER>, //Регулярное выражение, определяющее заголовок новости (за заголовок принимается первый соответствующий этому регулярному выражению блок. Если парсер не найдет на странице ни одного блока, соответствующего этому выражению, то парсинг данной страницы будет прерван, после чего парсер перейдет к другой странице, соответствующей <,REG_ALLOWED_URL>,…<,/REG_ALLOWED_URL>,).

<,REG_CLEAN_CONTENT>,<,/REG_CLEAN_CONTENT>,//Используя данное регулярное выражение можно вычистить лишний код из спарсенного блока контента.

<,REG_DET_CAT>,<,/REG_DET_CAT>,//Регулярное выражение для автоматического определения категории, в которой будет опубликована новость. Если категория еще не существует на блоге, то она будет создана. Данное регулярное выражение используется только в случае, если категория не задана жестко в <,PREDEF_CAT>,…<,/PREDEF_CAT>,.

<,PREDEF_CAT>,Категория<,/PREDEF_CAT>,//Жестко заданная категория, в которую должны быть опубликованы новости, спарсенные с данного источника.

<,REG_DET_TAGS>,#...#ims<,/REG_DET_TAGS>,//регулярное выражение для определения строки тегов

<,/PARSE_RULE>, //закрывающий тег описания источника.

Настройки всех источников хранятся в файле /refresh/libs/refresh_sources.xml. Их редактирования возможно напрямую из админки парсера. Количество источников неограниченно.

Думаю, вышеприведенная информация достаточна для знакомства с базовыми возможностями и особенностями работы AutoRefresh. Теперь по поводу цены. На данный момент цена самого скрипта составляет 35$ (в стоимость входит помощь в установке скрипта на вашем сервере). Настройка одного источника парсинга (если сами не разберетесь) будет стоить 2$. Также хочу напомнить, что я могу сравнительно недорого осуществить доработки парсера под ваши конкретные нужды или преобразовать его для работы в рамках любой необходимой вам CMS. Напомню свои координаты:

ICQ: 435268826

Email: isolar2005@gmail.com