Парсинг RSS-ленты «Яндекс.Фотки» при помощи PHP (SimpleXML, XPath) Добавлено: 2014-01-23 | Автор: Chumachenko Alexander | Просмотров: 2444
Бывают ситуации, когда к своему сайту необходимо подключить определенный информационный контент стороннего ресурса, но готовых скриптов для размещения на внешних сайтах тот ресурс не предоставляет. Вот тогда и приходит в помощь возможность парсинга RSS ленты. В этой статье будет рассмотрен пример получения случайного фото дня из RSS-ленты сервиса «Яндекс.Фотки». Для достижения этой цели будет использован класс PHP 5 – SimpleXML с применением XPath. Краткая терминология: Существует два основных способа XML-парсинга: на базе деревьев и на базе потоков. Метод дерева (будет использован в этой статье) предусматривает загрузку в память всего XML-документа целиком. Древовидная структура файла позволяет произвольно обращаться к элементам документа и редактировать XML. Примерами парсеров по методу дерева служат DOM и SimpleXML. Они хранят древовидную структуру в памяти в разных, но взаимодействующих форматах. SimpleXML – класс в PHP 5, для работы с XML-документами. SimpleXML представляет XML-документ как структуру данных. Этот класс простой в использовании, поскольку он решает лишь самые общие задачи работы с XML, оставив другие для других расширений. [Wikipedia] Структура RSS ленты следующая: <?xml version="1.0" encoding="utf-8"?> <rss xmlns:media="http://search.yahoo.com/mrss" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> <channel> <title>Все фото дня на Яндекс.Фотках</title> <atom:link rel="next" href="http://fotki.yandex.ru/calendar/rss2?p=1"/> <link>http://fotki.yandex.ru/calendar/</link> <pubDate>Thu, 16 Jan 2014 17:12 +0400</pubDate> <lastBuildDate>Thu, 16 Jan 2014 17:12 +0400</lastBuildDate> <atom:icon>http://fotki.yandex.ru/i/bird.png</atom:icon> <item> <author>troolga11</author> <link>http://fotki.yandex.ru/users/troolga11/view/660643/</link> <media:thumbnail url="http://img-fotki.yandex.ru/get/9111/107069325.6e/0_a14a3_ea5473e5_M" medium="image" type="image/jpeg"/> <media:content url="http://img-fotki.yandex.ru/get/9111/107069325.6e/0_a14a3_ea5473e5_XL" medium="image" type="image/jpeg"/> <pubDate>Thu, 16 Jan 2014 17:12 +0400</pubDate> <title>Крещендо .</title> <description><p><a href="http://fotki.yandex.ru/users/troolga11/view/660643/"><img src="http://img-fotki.yandex.ru/get/9111/107069325.6e/0_a14a3_ea5473e5_M" alt="Крещендо ." width="300" height="256"/></a><br/></p></description> </item> <item> … </item> … … </channel> </rss> PHP код парсинга: <?php // Случайное число в диапазоне [0..99] $random = rand(0, 99); // Ссылка на XML-файл $url = "http://fotki.yandex.ru/calendar/rss2"; // Загружаем файл $rss = simplexml_load_file($url); if($rss) { // Выбираем для работы <item> под номером $random $item = $rss->channel->item[$random]; // Получаем название фотографии и сразу устанавливаем кодировку "windows-1251" $title = iconv("utf-8", "windows-1251", $item->title); // Производим редактирование названия $title = preg_replace('[ \.]', '\.', $title); if(preg_match("[\.JPG$|\.jpg$|\.JPEG$|\.jpeg$|\.PNG$|\.png$|\.GIF$|\.gif$]", $title)) $title="(Фото без имени)"; $title = preg_replace("[copy]", "", $title); // Ссылка на Яндекс.Фотки с фотографией дня $link = $item->link; // поиск и получение ссылки на малый размер фотографии дня $search_media_M = $item->xpath("media:thumbnail"); $url_img_M = $search_media_M[0][url]; // поиск и получение ссылки на большой размер фотографии дня $search_media_XL = $item->xpath("media:content"); $url_img_XL = $search_media_XL[0][url]; } else { echo "Не удалось загрузить Яндекс Фото Дня"; } // вывод результата парсинга в окно браузера printf("<div align='center'><a href='$link' target='_blank'><img src='$url_img_M' style='max-width:240px'></a><br> <strong><em><div style=\"font-size:14px; color:#900;\">$title</div></em></strong></div><br>"); ?> |
Комментарии (0):
Комментариев, к данной статье, нет
Оставить комментарий: