Как стать автором
Обновить

Простой парсер запрещенных сайтов

Мой первый блин комом первое знакомство с PHP и первый пост на хабре.

С недавних пор все интернет провайдеры должны закрывать запрещенные сайты. Ежедневно Роскомнадзор предоставляет нам список запрещенных сайтов в формате xml. Выгруженный файл имеет не нужную для меня информацию (дата постановления о закрытии сайта, орган кем принято решение о закрытии) и не удобное для чтения и дальнейшей работы форматирование, поэтому была поставлена задача распарсить файл в удобный для чтения вид, а также получать из файла список запрещенных сайтов без лишней информации.



Пример файла XML
/><![CDATA[http://xxxxxxxxxxxxx]]><![CDATA[xxxxxxxxxxxxxx]]>xx.xx.xx.xx

Для решения этой задачи мне показался ближе язык PHP поскольку занимаюсь в основном вебом. Сразу оговорюсь, до этого момента ничего не писал на PHP и других языках, моя основная работа это верстка.

Создав простую страницу html я разместил в ней input чтобы пользователь мог выбирать какой файл парсить.



Теперь скрипт должен проверить выбрал ли пользователь файл для обработки:

if ( isset($_FILES["dump"]) )


Дальше код самого скрипта

	$fp = fopen("urls.txt", "w");
	$xml = simplexml_load_file($_FILES["dump"]["tmp_name"]);
	foreach ($xml->content as $content) {
		echo "<li><a href=".$content->url." target='blank' >".$content->url."</a><br />Решение от ".$content->decision[date]." получено от органа ".$content->decision[org]."</li><br />";
	fwrite($fp, $content->url."\r\n");	
	}
	fclose($fp);


Для таких же как я новичков в PHP расскажу что делает этот скрипт.

$fp = fopen("urls.txt", "w");

Открывает файл urls.txt для записи, если такого файла нет, создает его.

$xml = simplexml_load_file($_FILES["dump"]["tmp_name"]);

Открывает выбранный пользователем XML Файл и позволяет работать с ним как с объектом.

foreach ($xml->content as $content)
echo "".$content->url."
Решение от ".$content->decision[date]." получено от органа ".$content->decision[org]."


Выбирает в файле XML блоки content и выбирает из него то что мне нужно, а именно ссылку, дату решения о закрытии и орган принявший решение.
Затем скрипт выводит ссылки в виде нумерованного списка.

fwrite($fp, $content->url."\r\n");

Записывает каждую полученную ранее ссылку в файл urls.txt
Этот функционал мне потребовался для другого моего скрипта, текстовый файл содержит только ссылки без дат и органов принявших решение о закрытии.

Закрываем файл urls.txt.

fclose($fp);

Пример парсера можете посмотреть здесь, а те у кого есть файл выгрузки от Роскомнадзора могут даже попробовать его в деле.

P.S XML Файл не выкладываю здесь в связи с законами о быстрой блокировке сайтов, не хочу чтобы хабр закрывали из-за этих запрещенных ссылок.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.