Несколько дней назад, когда я готовил наш урок по созданию галереи Slick Flickr с SimplePie , мне пришло в голову, что мы не опубликовали много статей, посвященных SimplePie . Принимая во внимание, насколько фантастична библиотека, думаю, пришло время присмотреться.
Мы рассмотрим более продвинутую функцию, которая позволяет расширять встроенный класс элементов для анализа сложных RSS-каналов.
Наша миссия
Если вы хотите импортировать каналы нескольких блогов для отображения на вашем веб-сайте, у вас не должно возникнуть никаких проблем. На самом деле, на сайте SimplePie.org есть отличная заставка, которая научит вас, как делать то же самое. Если вы незнакомы, я настоятельно рекомендую вам посмотреть его. Однако время от времени вы будете сталкиваться с некоторыми уникальными именами тегов. Например, работая над перезагрузкой моего личного сайта, я решил, что хочу показывать мои nettuts + видео из RSS-канала Blip.tv. Просмотрев сам канал, я наткнулся на теги, например: <blip: smallThumbnail>.
Теперь SimplePie проделывает огромную работу по упрощению наиболее распространенных процедур. Но очевидно, что от них нельзя ожидать удобных сокращенных методов для каждого пространства имен, теперь они могут !? Конечно, нет. Я решил, что это сделало бы для превосходного скринкаста. Итак, я создал простой пример, который включит все скриншоты nettuts + и разрешит всплывающее видео, когда пользователь выберет один.


Это достаточно простая раскладка; но должно быть просто идеально подходит для демонстрационных целей. Без дальнейших церемоний, давайте начнем.
Шаг 1: Index.php
Первым шагом является загрузка SimplePie и размещение файла «simplepie.inc» в папке «include». Затем создайте index.php ‘. Внутри него вставьте следующий основной код.
|
1
|
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> <html xmlns=»http://www.w3.org/1999/xhtml»> <head> <meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ /> <link rel=»stylesheet» href=»css/default.css» /> <title>Untitled Document</title> </head> <body> <div id=»container»> </div><!—end container—> <!— begin scripts —> <script type=»text/javascript» src=»http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js»></script> <script type=»text/javascript»> </script> </body> </html>
|
Единственное, на что стоит обратить внимание, это то, что мы создали упаковочный div-контейнер и используем CDN от Google для импорта jQuery. Не беспокойтесь, если вы не знакомы с этой библиотекой; это просто способ добавить немного глазури в конце. Это вряд ли важно.
Шаг 2: Новый SimplePie ();
Я предполагаю, что у вас есть базовое понимание SimplePie. Если нет, сначала посмотрите их вступительное видео , а затем вернитесь. К счастью, здесь нет ничего сложного.
Прямо перед вашим доктайпом добавьте немного PHP.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
<?php
require ‘includes/simplepie.inc’;
$feed = new SimplePie();
$feed->set_feed_url(‘feed://nettuts.blip.tv/rss’);
$feed->set_item_class();
$feed->enable_cache(true);
$feed->set_cache_duration(3600);
$feed->set_cache_location(‘cache’);
$feed->init();
$feed->handle_content_type();
?>
|
Первым шагом при работе с SimplePie является создание нового экземпляра класса SimplePie. Далее нам, естественно, нужно указать URL нашего фида (set_feed_url).

Как я упоминал ранее, мы будем работать с Blip.tv сегодня. Если у вас есть собственный аккаунт, нажмите на одно из ваших видео, чтобы перейти на страницу шоу. Далее прокрутите вниз до дна. Вы увидите ссылку RSS внутри нижнего колонтитула. Скопируйте этот URL и вставьте его в качестве параметра.

Далее нам нужно установить item_class. Мы изменим этот раздел чуть позже. Следующие три метода настраивают кэширование, продолжительность (в секундах) и расположение нашей папки «cache». Нам лучше создать это прямо сейчас. Убедитесь, что структура вашей папки выглядит примерно так.

$ Запитка> Init ();
Наконец, нам нужно все инициализировать. Если вы этого не понимаете, не слишком переживайте по этому поводу. Просто смирись с тем, что это то, что «заводит подачу»
«Init () — это то, что заставляет все происходить. Период. Здесь все параметры конфигурации обрабатываются, фиды извлекаются, кэшируются и анализируются, а также все остальные полезные вещи. Это вызывается автоматически, если вы передаете URL-адрес конструктор SimplePie. « — SimplePie Документация
Шаг 3: Получение заголовка и описания

Давайте напишем немного кода, который будет извлекать заголовок и описание из нашего канала. Внутри контейнера div добавьте следующие две строки.
|
1
2
|
<h1><?php echo $feed->get_title();
<p><?php echo $feed->get_description();
|
Заметьте эти простые для понимания методы ?! SimplePie делает эти процедуры несложными. Мы создали объект $ feed в верхней части нашей страницы. Помните, это по сути копия класса элемента. Чтобы получить доступ к методам, нам нужно использовать подход ООП. Для полного списка, обязательно посетите ссылку API SimplePie.
Для заголовка мы используем «$ feed-> get_title ()», а для описания мы будем удобно использовать «$ feed-> get_description».
Шаг 4: Цикл
Следующий шаг — перебрать все элементы в RSS-ленте.
|
1
2
3
4
5
6
7
8
|
<?php foreach($feed->get_items() as $item) : ?>
<div class=»entry»>
<a href=»» title=»»>
<img src=»» alt=»<?php $item->get_title(); ?>» />
</a>
</div>
<?php endforeach;
|
Здесь много PHP, но все относительно просто. Мы используем сокращенную форму цикла PHP. SimplePie предоставляет метод get_items (), который будет извлекать каждый элемент из RSS-канала. Затем мы перебираем каждый элемент и назначаем временную переменную с именем $ item. Теперь мы можем использовать эту новую переменную для получения конкретной информации на уровне элемента.
проблема
К сожалению, мы столкнулись с проблемой. Если вы вернетесь к демонстрации, вы увидите, что мы хотим добавить миниатюру для каждого элемента. Если мы перейдем по URL-адресу канала RSS и затем выберем «Просмотр источника», мы увидим следующее: <blip: thumbnail_src> NETTUTS-WordPressForDesigners8774-306.jpg </ blip: thumbnail_src>
Так что же нам делать, когда SimplePie не распознает уникальное пространство имен, такое как «blip»? Решением является создание нового класса, который расширяет класс элементов SimplePie.
Новый класс
Вернитесь в папку «включенные» и добавьте новый файл с именем: simplepie_blip.inc
Не беспокойтесь, если вы не знакомы с этим расширением файла. Мы просто будем использовать PHP. Нам нужен способ сослаться на это «пустое» пространство имен. Вернитесь в канал RSS и еще раз просмотрите источник. Прокрутите вверх и найдите что-то вроде этого:

Скопируйте это значение в буфер обмена. Затем вставьте следующий код в новый файл .inc.
|
1
2
3
4
5
6
7
8
|
<?php
define(«SIMPLE_NAMESPACE_BLIP», «http://blip.tv/dtd/blip/1.0»);
class SimplePie_Item_Blip extends SimplePie_Item
{
…
}
|
Это просто класс
Все, что мы здесь строим, — это очень простой класс, который расширяет класс элементов SimplePie. В верхней части нашего кода мы определяем константу и делаем ее равной URL, который вы только что скопировали. Затем мы создаем новый класс — имя может быть любым. Важно убедиться, что вы пишете «extends SimplePie_Item». Это даст нам доступ к необходимым свойствам и методам из родительского класса.
Что мы хотим?
Давайте сначала выясним, какие значения нам нужно получить. Посмотрите еще раз на исходный код RSS-канала.

Для этого простого (r) урока мы возьмем только три тега.
- <blip: thumbnail_src> : содержит название нашего миниатюры.
- <blip: embedLookup> : содержит URL, который позволит нам встроить видео на нашу страницу.
- <blip: puredescription> : содержит описание видео.
Давайте начнем с создания нашего метода thumbnail_src. Создайте новый метод в фигурных скобках.
|
1
2
3
4
5
|
function get_thumbnail_src()
{
$data = $this->get_item_tags(SIMPLE_NAMESPACE_BLIP, ‘thumbnail_src’);
return $data[0][‘data’];
}
|
Вы можете называть метод как хотите; просто убедитесь, что это легко понять. Мы начнем с создания новой переменной с именем $ data. SimplePie предлагает метод с именем «get_item_tags». Помните, мы можем использовать это, потому что мы расширяем класс элемента. В скобках мы вставляем нашу константу «SIMPLE_NAMESPACE_BLIP», а затем добавляем имя искомого тега. В этом случае нам нужен тег «<blip: thumbnail_src>».
Что вернуть?
Немного сложно описать массив, который мы будем возвращать. Я рекомендую вам просмотреть скринкаст, чтобы лучше понять. Для простоты, просто примите, что для доступа к точному значению мы должны найти [0] [‘data’] в нашем массиве $ data.
Это на самом деле все, что требуется. Теперь мы можем начать использовать «get_thumbnail_src ()» так же, как и «get_title ()». Давайте вернемся к index.php и добавим этот новый метод.
Найдите тег изображения в .entry div.
|
1
2
3
4
5
|
<div class=»entry»>
<a href=»» title=»»>
<img src=»» alt=»<?php $item->get_title(); ?>» />
</a>
</div>
|
get_thumbnail_src ()
Когда мы вызываем наш метод «get_thumbnail_src ()», он возвращает имя файла, то есть «NETTUTS-WordPressForDesigners8774-306.jpg». Это просто название изображения; нам все еще нужен полный путь. К счастью, это легко. Все изображения Blip будут храниться здесь: «http://a.images.blip.tv/ enjfilename}».
В атрибуте источника нашего изображения добавьте:
|
1
|
<img src=»http://a.images.blip.tv/<?php echo $item->get_thumbnail_src(); ?>» alt=»<?php $item->get_title(); ?>» />
|
Видите, как легко было использовать наш собственный метод? Теперь вернемся к нашему расширенному файлу класса и создадим два других метода. Я не буду проходить через это, потому что они идут по тому же пути.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
// end get_thumbnail_src function.
function get_pure_description()
{
$data = $this->get_item_tags(SIMPLE_NAMESPACE_BLIP, ‘puredescription’);
return $data[0][‘data’];
}
function get_embed_id()
{
$data = $this->get_item_tags(SIMPLE_NAMESPACE_BLIP, ’embedLookup’);
return $data[0][‘data’];
}
|
Важно помнить, что теги «puredescription» и «embedLookup» чувствительны к регистру. Проще всего скопировать текст прямо из источника RSS-канала.
Посмотрите, сможете ли вы самостоятельно разместить эти методы на своих местах. В качестве обновления возвращаемые значения наших методов должны выглядеть следующим образом:
- get_thumbnail_src () : NETTUTS-WordPressForDesigners8774-306.jpg
- get_pure_description () : «Это видео, которое научит бла-бла …»
- get_embed_id : grg378cLj7EM
После вставки этих методов вы должны получить что-то похожее на следующее:
|
1
2
3
4
5
|
<div class=»entry»>
<a href=»http://blip.tv/play/<?php echo $item->get_embed_id();?>» title=»<?php echo $item->get_pure_description();?>»>
<img src=»http://a.images.blip.tv/<?php echo $item->get_thumbnail_src(); ?>» alt=»<?php $item->get_title(); ?>» />
</a>
</div>
|
Надеюсь, все это имеет смысл. Если нет, просмотрите скринкаст. На этом этапе ваша страница должна выглядеть примерно так:

Шаг 5: CSS
Не слишком красиво, а? Давайте добавим унцию CSS. Эти стили никак не связаны с учебником. Учитывая это, я не буду подробно описывать каждое свойство. Вы можете просмотреть файл CSS здесь. Это очень минималистично.

Шаг 6: JQuery
Просто чтобы повеселиться, я решил, что когда пользователь нажимает на одно из изображений, должен появиться всплывающий видеоплеер. Давайте использовать jQuery для обеспечения этой функциональности.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
$(‘.entry a’).click(function() {
var url = this.href;
var embedString = ‘<embed src=»‘ + url + ‘» type=»application/x-shockwave-flash» width=»640″ height=»480″ allowscriptaccess=»always» allowfullscreen=»true»></embed>’;
$(‘<div id=»video»>’)
.append(embedString)
.append(‘<p>X</p>’)
.css({
left: $(window).width() / 2 — 320,
top: ’50px’ })
.appendTo(‘body’)
.children(‘p’).click(function() { $(this).parent().remove(); });
return false;
});
|
Анализ
|
1
|
$(‘.entry a’).click(function() {
|
Когда щелкнет тег привязки в нашем .entry div, запустите функцию.
|
1
2
|
var url = this.href;
var embedString = ‘<embed src=»‘ + url + ‘» type=»application/x-shockwave-flash» width=»640″ height=»480″ allowscriptaccess=»always» allowfullscreen=»true»></embed>’;
|
Создайте переменную с именем «url» и сделайте ее равной href тега привязки, по которому щелкнули. Помните, что эта ссылка содержит ссылку для вставки. Затем создайте тег для встраивания. По правде говоря, мы могли бы сделать что-то более эффективное здесь. Это код, который предоставляет blip.tv, так что пока его будет достаточно. Возможно, вы захотите в будущем взглянуть на что-то более дружественное к «валидатору».
|
1
2
3
4
5
6
7
8
|
$(‘<div id=»video»>’)
.append(embedString)
.append(‘<p>X</p>’)
.css({
left: $(window).width() / 2 — 320,
top: ’50px’ })
.appendTo(‘body’)
.children(‘p’).click(function() { $(this).parent().remove(); });
|
- Создайте новый элемент div.
- Вставьте тег embed, который мы только что создали (представленный переменной «embedString».).
- Добавьте тег абзаца, содержащий букву X. Это позволит пользователю выйти из видео.
- Установите расположение нашего видео. Этот код просто гарантирует, что он центрирован внутри контейнера div.
- Добавьте наш новый элемент div к тегу body. Он не будет отображаться внизу страницы, потому что мы использовали CSS, чтобы позиционировать его абсолютно. Просмотрите файл CSS для получения дополнительной информации.
- Найдите тот тег P — который содержит букву «X». При щелчке по этому элементу найдите элемент #video и удалите его со страницы. Это код, который избавляется от видео.
полный
Запустите страницу в своем браузере, нажмите на изображение, и вы увидите, что видео всплывает отлично. Если у пользователя отключен Javascript, он или она будут просто перенаправлены на новую страницу, содержащую встроенное видео.
Я надеюсь, что это помогло вам лучше понять возможности SimplePie. Хороших выходных … но не перед копанием этого урока. 🙂

- Подпишитесь на RSS-канал NETTUTS, чтобы узнать о ежедневных новостях и статьях о веб-разработке.

