Статьи

Потребление каналов с помощью SimplePie

Если вы являетесь заядлым потребителем фидов, как я, вам может быть немного грустно видеть недавнее объявление Google о том, что Reader подходит к концу. Reader был прост и удобен в использовании, но нет никаких причин, по которым вы не можете иметь такую ​​же функциональность в своем собственном доморощенном проекте. Библиотека PHP SimplePie позволяет быстро и легко потреблять и отображать данные. Вот как вы можете начать работать с собственным ридером.

SimplePie устанавливается через Compose r. Вам нужно добавить следующее в ваш файл composer.json . После того, как Composer загрузит библиотеку и включит файл автозагрузчика в свой PHP-скрипт, вы готовы начать писать свой собственный читатель.

 { "require": { "simplepie/simplepie": "dev-master" } } 

Основная функциональность

Для работы с SimplePie сначала нужно выбрать канал RSS или Atom, которым вы хотите управлять, и захватить его URL. Я буду использовать New York Times для своих примеров — вот что вы должны начать:

 <?php require_once 'autoloader.php'; $url = 'http://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml'; $feed = new SimplePie(); $feed->set_feed_url($url); $feed->init(); 

В приведенном выше коде вы можете увидеть URL-адрес канала «Нью-Йорк Таймс» и начало нашей программы чтения на основе SimplePie. В последней версии SimplePie (v1.3) конструктор не принимает никаких аргументов, в отличие от предыдущих версий, и мы используем метод set_feed_url() чтобы сообщить ему, откуда set_feed_url() данные фида. После того, как URL установлен, мы вызываем init() и читатель готов к работе. Вы ничего не увидите только с вышеупомянутым, хотя; нам все еще нужно выйти и взять информацию.

SimplePie предоставляет множество классов и методов для извлечения информации из любого данного раздела RSS-канала. С вышеупомянутым началом, давайте добавим следующее:

 <?php echo '<h1>' . $feed->get_title() . '</h1>'; echo '<p>' . $feed->get_description() . '</p>'; 

Методы get_title() и get_description() делают именно то, что говорят; они возвращают заголовок и описание всего канала. Вы можете получить автора фида (в некоторых случаях, но не с фидом NY Times), участников фида, ссылки (ссылки) фида, авторское право и, конечно, элементы с подобными методами.

Чтобы на самом деле отображать любые истории, опубликованные фидом, вам нужно получить как минимум один элемент, используя функции get_item() или get_items() . А пока давайте просто возьмем один элемент и получим от него некоторую информацию.

 <?php $item = $feed->get_item(0); echo '<article>'; echo '<header>'; echo '<p>Title: <a href="' . $item->get_link() . '">' . $item->get_title() . '</a></p>'; echo '<p>Author: ' . $item->get_author()->get_name() . '</p>'; echo '<p>Date: ' . $item->get_date('Ymd H:i:s') . '</p>'; echo '<p>Description: ' . $item->get_description() . '</p>'; echo '</header>'; echo $item->get_content(true); echo '</article>'; 

Это, конечно, не очень красиво выглядит, но показывает основы, необходимые для получения информации из элемента фида. Итак, давайте рассмотрим, что это значит.

Метод get_item() извлекает отдельный элемент из канала. Предоставленный целочисленный аргумент — это номер элемента фида, и, как и массив, ноль — это индекс первого элемента в фиде.

Метод get_link() возвращает URL-адрес самого элемента канала, позволяя вам открыть статью / видео / и т. Д. Для любого канала, с которым вы работаете. get_title и get_description() должны выглядеть знакомо, так как они такие же, как и раньше, когда применяются непосредственно к самому get_description() .

Строка автора выглядит немного забавно, но, как я уверен, вы уже поняли — метод get_author() возвращает объект Author , и мы вызываем метод get_name() для этого объекта, чтобы узнать, кем является статья.

Метод get_date() принимает любую стандартную строку формата даты PHP для отображения даты, как вам нравится.

Наконец, метод get_content() принимает логический аргумент, который говорит, что либо возвращает только сводную информацию (true), либо пытается вернуть сводную информацию, но возвращается к описанию, если ничего не указано (false).

Выбор предметов

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

SimplePie обеспечивает это очень легко, и я уже кратко коснулся наших опций: get_item() и get_items() . Эти две функции используются для получения элементов фида и их содержимого двумя различными способами.

Первый вариант, который мы продемонстрировали, принимает одно целое число, которое указывает, какой элемент в «массиве» элементов фида мы хотим получить. Использование этого в цикле в сочетании с методом get_item_quantity() позволяет нам отображать все или подмножество элементов в ленте.

 <?php $itemQty = $feed->get_item_quantity(); for ($i = 0; $i < $itemQty; $i++) { ... } 

Это решение, однако пригодное для использования, не очень элегантно, если вы хотите использовать нумерацию страниц при отображении элементов ленты. Для этого мы можем использовать метод get_items() . Он принимает два целых числа: смещение и количество элементов. Это позволяет нам получить все элементы, передавая нули для обоих, или, что действительно удобно, позволяет нам получать небольшие подмножества в любом месте по всем доступным элементам фида.

 <?php foreach ($feed->get_items(3, 3) as $item) { ... } 

Это использование будет отображать вторую страницу из трех элементов.

Кэширование

С учетом того, что все эти данные передаются, было бы очень сложно обрабатывать весь канал каждый раз, когда вы загружаете страницу, но не волнуйтесь… SimplePie вас поддержит. Существует несколько вариантов встроенного кэширования данных фида, поэтому вам не нужно каждый раз извлекать весь фид. SimplePie использует условный GET, чтобы определить, обновлялся ли канал с момента последнего поиска. Для хранения контента вы можете использовать файловую систему MySQL, Memcache или, если хотите, — вы можете написать свой собственный обработчик.

Самым простым для реализации является кэширование в файл. Вот как:

 <?php $feed = new SimplePie(); $feed->set_feed_url($url); $feed->enable_cache(); $feed->init(); 

Вот и все! Недавно добавленная строка включает кеширование для SimplePie и записывает данные в файл. Вам нужно убедиться, что в корне вашего документа есть доступный для записи каталог с именем cache и все готово. Если вы предпочитаете указывать другое местоположение, это тоже легко. Просто используйте метод set_cache_location() и передайте ему строку, указывающую место, в которое вы хотите записать файлы кэша. Тот же самый метод может также использоваться в случае кэширования с MySQL и Memcache.

Вывод

Это самые основные принципы использования библиотеки SimplePie. Вы узнали, как настроить и инициализировать канал, получить один или несколько элементов из канала и проанализировать информацию, содержащуюся в этих элементах, для отображения.

Конечно, функциональность SimplePie на этом не заканчивается. Это также дает вам возможность извлекать элементы и анализировать информацию из нескольких каналов одновременно, что позволяет смешивать информацию, отображаемую у вас под рукой, и все это контролируется вами. Погрузитесь в их документацию по API ; Это отличный ресурс, который поможет вам хорошо.

Я с нетерпением жду следующей лучшей замены Google Reader от SimplePie, написанной вами! Вы можете найти краткий образец, сопровождающий эту статью на GitHub, чтобы начать работу.

Изображение через Fotolia