Pull to refresh

Получаем интересные статьи в телеграм

Сегодня, когда в интернете много информации, новостей и статей, возникает необходимость фильтровать данные. Мне интересны новости про технологии и футбол. Часто, посещаю сайт с новостями про футбольный клуб “Рубин”, но там не так часто появляются новости и поэтому решил сэкономить своё время и написать парсинг статей/новостей с постингом в канал telegram.

Было решено написать мини-проект на чистом PHP, с использованием базы данных sqlite3. PHP был выбран так как больше опыта в нём, sqlite3 так как на мой взгляд его проще перенести на сервер. После повесил крон на файл index.php, запуская его каждый час. Сайт с которого парсю данные: Бизнес OnLine

Команда крон:

0 */1 * * * /usr/bin/php /var/www/parsing/index.php > /var/www/parsing/logs/    logcron.log

Для выполнения поставленной перед собой задачи использовал cUrl, для получения html кода страницы сайта. Получал нужные данные с помощью регулярных выражений. Необходимы были следующие данные: ссылки на новости и статьи, в анкоре которых содержится слово “Рубин”, далее планирую получить фамилии всех игроков и по ним фильтровать полученные ссылки.

if(preg_match('/(Рубин|Кудряшов)/ms',$array[1][$i])
        && !preg_match('/((Все трансферы РПЛ))/ms', $array[1][$i]))

После получения ссылок на материалы, идёт проверка на наличие их в базе, если ссылок этих материалов в базе нет, то получаем html-код статьи по ссылке, всё теми же регулярными выражениями, обрабатываем его — заменяем теги на markdown разметку, получаем урлы фотографий, остальные, необработанные теги, удаляем.


preg_match_all('/<img src="(.*?)".+?>/m', $text, $photo);
$text = preg_replace('/<strong>(.*?)<\/strong>/m','*$1*',$text);
$text = preg_replace('/<p>(.*?)<\/p>/ms',"\t\t $1 \n\n",$text);
$text = preg_replace('/\s{2,}/',' ',$text);
$text = preg_replace('/<h1>(.*?)<\/h1>/m',"\n\n *$1* \n\n",$text);
$text = preg_replace('/<a href="(.*?)" .+?>(.*?)<\/a>/',"[$2]($1) \n\n",$text);

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

Кстати, хотелось бы остановиться на одном моменте. Была проблема, что телеграмм ругался на кодировку, требовал utf-8, решил следующим образом:


$item = mb_convert_encoding($item, 'utf-8', mb_detect_encoding($item));

Далее на стороне телеграмма сделал следующее: создал бота и канал. Бота сделал админом канала и от “имени” бота выкладываю новости в канал.

Вот так, потратив порядка трёх часов времени, надеюсь освободить больше времени, которое мог бы потратить на проверку новых статей.

Если кому интересна реализация, то добро пожаловать на гит.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.