Парсер фида rutracker`а с помощью php

Парсер фида rutracker`а с помощью php

Помимо программирования у меня есть еще несколько увлечений, одним из них, является чтение. Точнее прослушивание книг. Посидеть с книжкой в руках – это непозволительная роскошь и нереальная трата времени, которую я не могу себе позволить из-за своего ежедневного, довольно плотного, графика. Поэтому прослушивание аудиокниг является просто спасением. Послушать пару глав романа в дороге или перед сном и отвлечься от мирской суеты, это верх наслаждения. Так сложилось, что всю свою сознательную жизнь я увлекаюсь фантастической литературой, причем только отечественных авторов. Озвучкой таких книг, в большинстве случаев, занимаются люди, увлеченные и почти всегда без коммерческой составляющей. Свои труды ребята выкладывают на разные ресурсы, но основной площадкой является, запрещенный РКН, rutracker.org. Как зайти на торрент и что-то там найти, мы все прекрасно знаем. А вот как это дело автоматизировать, я думаю, знают не все. Поэтому попробую это дело исправить.

Логика парсера торрента

Как я уже писал, мне интересен только конкретный раздел «рутрекера», а именно «Аудиокниги > Российская фантастика». Поэтому в примере парсить будем именно его. Просто так стащить данные – это полдела, должна быть еще и полезная составляющая. В данном случае, будем проверять раздел с аудиокнигами на наличие свежих публикаций, и если такие имеются, то отправим себе на почту письмо с названиями и ссылками на новые раздачи.
Выполнение проверки можно осуществлять раз в сутки, например, в 5-6 утра. Запускать скрипт будет cron. При запуске парсера, должна произойти проверка обновлений за вчерашний день, при наличии новых раздач, произойдет получение данные, далее должно сформироваться письмо, которое будет отправлено на почту.
Чтобы не мудрить с парсингом html, можно воспользоваться rss-фидом, который рутрекер любезно предоставляет для каждого своего раздела. Получить ссылку на фид очень просто, достаточно кликнуть по ссылке «Подписка на фиды». Фид представляет собой обычный xml, с которым очень просто работать. Все остальное уже дело техники.

Код парсера rutracker на php

С теорией закончили, остается только написать скрипт и настроить его ежедневное выполнение с помощью cron`а. Полный код с подробными комментариями приведен ниже:

// вчерашняя дата
$date_yesterday = date("Y-m-d", strtotime("-1 day"));
// ссылка на фид
$url_xml = "http://feed.rutracker.cc/atom/f/2387.atom";
$xml = @simplexml_load_file($url_xml);
$result = array();
// если есть данные
if($xml->entry){
	// перебор всех записей
	foreach($xml->entry as $one_entry){
		// если дата вчерашняя
		if(stristr($one_entry->id, $date_yesterday)){
			// сохраняем ссылку и название записи
			$result[] = array(
				"link" => 	(string)$one_entry->link["href"],
				"title" => 	(string)$one_entry->title
			);				
		}
	}
}
// формирование текста письма
$mail_msg = "";
if(!empty($result)){
	$mail_msg = "Добавлено ".count($result)." новых аудиокниг";
	foreach($result as $one_link){
		$mail_msg .= "<br> <a href='{$one_link['link']}'>{$one_link['title']}</a>";
	}
}else{
	$mail_msg = "Новых аудиокниг не появилось";
}
// отправка уведомления на почту
// заголовок письма
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "From: Audiobooks <no-reply@vk-book.ru>\r\n";
mail("admin@vk-book.ru", "Новые аудиокниги [".count($result)."]", $mail_msg, $headers); 

Послесловие

Если у вас на сервера не работает функция mail, то письмо можно отправлять через smtp любого почтовика, воспользовавшись классом SendMailSmtpClass.

Рассказать друзьям:


Оценить:
(12 оценок, среднее: 4,67 из 5)

Парсер фида rutracker`а с помощью php: 3 комментария

  1. Очень нравится понятные объяснения автора и лаконичный код, автору спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code