Главная » Статьи » Веб » Веб-Программирование |
Все о парсинге RSS лент средствами PHPВот только сегодня закончил писать скрипт парсера RSS лент для одного постоянного заказчика и решил поделиться способами и возможностями который нам предлагает язык PHP для этого дела (парсинга RSS). Для начала давайте я скажу о том что такое вообще RSS, вдруг кто-то из вас еще не знает. Сочинять сам не буду, а просто процитирую википедию: RSS — семейство XML-форматов, предназначенных для описания лент новостей, анонсов статей, изменений в блогах и т. п. Информация из различных источников, представленная в формате RSS, может быть собрана, обработана и представлена пользователю в удобном для него виде специальными программами-агрегаторами. То есть это по сути XML (кто незнает что это идем в википедию и читаем), а XML как нам известно хорошо структурированный документ. Я клоню к тому что если в RSS есть открывающий тег, то должен быть и закрывающий (например: <title>Заголовок</title>), иначе это не RSS. Думаю на данном этапе суть ясна: нам нужно получить информацию заключенную между тегами. Любая RSS лента имеет заголовок заключенный между тегами <title></title> и сам текст статьи заключенный между тегами < description></description>, именно их нам и нужно спарсить. Теперь расскажу о способах написания RSS парсера и что предлагает нам PHP для реализации. Способ 1 – SimpleXMLSimpleXML – это расширение для PHP5 устанавливаемое в него по умолчанию, представляет самый простой и элегантный способ обработки XML (соответственно и RSS) файлов. Это и наиболее предпочтительный способ, но он стал доступным только в 5 версии PHP. Тут нет ничего проще, данный код наглядно показывает как просто парсить RSS ленты средствами SimpleXML:
Данный код выведет заголовки и тексты статей из RSS ленты. Просто ведь? Этим SimpleXML и привлекает. Дальше вам нужно будет только правильно распорядиться полученными данными, записать в базу или еще куда-нибудь. Способ 2 – XML Parser FunctionsXML Parser Functions - это стандартные функции PHP для работы с XML доступные начиная c 4-ой версии PHP. Тоже нет ничего сложного, правда в отличие от SimpleXML совсем не элегантно. Продемонстрирую пример:
Вот таким образом мы получаем интересующие нас содержимое элементов RSS. Но тут уже нужно разобраться с массивами которые создает XML разборщик. Способ 3 – Написать RSS парсер самомуНапример я делал именно так, когда не знал про существование SimpleXML и XML Parser Functions. Приведу небольшой пример парсинга RSS обычным процедурным PHP кодом, тут за парсинг отвечает функция preg_match_all(), которая выполняет глобальный поиск шаблона в строке. Данный пример не совершенен и парсит только титлы и дескрипшены у RSS: <?
Таким же способом можно и отпарсить остальные элементы RSS ленты, главное написать правильно регулярку. На этих трех способах мы и остановимся, еще есть наверняка множество сторонних скриптов и классов в PHP для парсинга XML, например magpieRSS у которого проблемы с кодировкой при парсинге и решить ее у меня не получилось, да собственно не очень то и хотелось, когда есть SimpleXML и XML Parser Functions. Вот кстати о проблемах с кодировкой мы сейчас и поговорим… Проблемы с кодировкойRSS ленты как правило находятся в кодировке UTF-8, при парсинге русского текста тремя способами описанными выше, нам на экран выводятся кракозябры. Все потому, что тест к нам приходит в кодировке UTF-8. Для того что бы вывести нормальные РУССКИЕ буквы нужно перекодировать спарсеный текст из кодировки UTF-8 в Windows-1251. Для этих целей в PHP существует функция iconv(), но она доступна не на всех серверах и чтобы избежать дальнейших проблем с вашим RSS парсером советую использовать самописную функцию перекодировки. Вникать в тонкости кодировок и разбираться как из одной кодировки получается другая думаю вам не хочется, так же не хотелось и мне. Немного погуглив я нашел замечательную функцию перекодировки из UTF-8 в Windows-1251 и обратно, предоставляет ее некий товарищ E64F. Возможно конечно он тоже ее где-то слямзил, но это не так важно, важно то что она мне очень понравилась по сравнению с другими нагуглеными функциями. Выкладываю функцию и пример ее использования:
Функция utf8_convert() принимает 2 параметра: $str – наша строка которую нужно перекодировать и $type – в какую кодировку нужно кодировать ("w” – из utf в win, "u” – из win в utf). Как это применить к нашим 3-м способам парсинга RSS думаю разберетесь, если хоть немного знаете PHP. Вот на этом пожалуй и закончим. Удачного парсинга ;)!
//Вот только зачем так извращаться с кодировкой? iconv("UTF-8","CP1251",$item->title) не проще сделать? | |
Просмотров: 418 | Рейтинг: 0.0/0 |
Всего комментариев: 0 | |