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

Сегодня, когда в интернете много информации, новостей и статей, возникает необходимость фильтровать данные. Мне интересны новости про технологии и футбол. Часто, посещаю сайт с новостями про футбольный клуб “Рубин”, но там не так часто появляются новости и поэтому решил сэкономить своё время и написать парсинг статей/новостей с постингом в канал 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));

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

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

Если кому интересна реализация, то добро пожаловать на гит.
Теги:
php, telegram bot, sqlite3,curl

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Похожие публикации