Если вы похожи на меня, у вас есть кусочки вашей онлайн-жизни, разбросанные по всему миру — фотографии, комментарии, твиты, блоги, избранные ссылки — спрятаны во всех профилях. И, конечно, многие из этих профилей предлагают RSS-каналы, созревшие для затирания. Разве не было бы неплохо объединить все это на одной странице? Я думаю так!
В этом уроке мы создадим страницу, которая собирает RSS-каналы всех этих маленьких кусочков вашей жизни и представляет их все вместе в одном месте. Для этого мы будем использовать SimplePie, класс разбора фида, написанный на PHP. Это мощный инструмент с открытым исходным кодом и простой в использовании. Затем мы немного поработаем над выводом и сделаем все это великолепно с HTML и CSS. Методы, которые мы рассмотрим, также полезны, если вы обнаружите, что вам нужно объединить RSS из многих источников, например, из новостной страницы. Давайте начнем!
Что вам нужно
- Библиотека SimplePie .
- Веб-сервер, который способен на него работать — в пакете SimplePie есть тест на совместимость, который скажет вам, хорош ли ваш сервер.
- Если вы пишите в Твиттере, возьмите эту функцию от Элисон Джанотто, чтобы помочь автоматически связать эти твиты
- Конечно, вам понадобится ваш верный текстовый редактор!
- Для краткости, часть кода исключена из этого руководства. Если вы хотите увидеть полную картинку, посмотрите законченный пример или скачайте его.
Давайте начнем
Во-первых, конечно, нам нужно определить каналы, которые мы хотим включить на страницу. Как я уже сказал, у меня есть профили во многих местах, но пока я буду держать их короткими и приятными — я возьму свой блог, Twitter , фотографии Flickr и любимые треки с Last.fm.
Вам нужно собрать URL-адреса нужных каналов и спрятать их в безопасном месте. Для этого найдите значки RSS на странице или в адресной строке браузера. Вставьте эти URL-адреса в текстовый файл для дальнейшего использования.
Далее нам нужно проверить совместимость SimplePie с нашей средой хостинга. В этой загрузке есть много вещей — сейчас мы можем просто загрузить каталог compatibility_test
Надеюсь, будет серия сообщений, информирующих вас о включении ряда зависимостей. Если так, пришло время загрузить остальную часть библиотеки. (Если в вашей загрузке есть папка с именем test
Пока вы копаетесь в своем веб-сервере, сейчас самое время настроить каталог для SimplePie для использования в качестве кеша. Вы должны сделать этот каталог доступным для записи. Я выбрал cache
Запишите, куда вы загрузили SimplePie, и каталог кеша. В моем случае оба находятся в одном каталоге, где я планирую разместить свою страницу жизнепотока.
Подготовьте ваши каналы
Давайте возьмем эти каналы! Откройте новый текстовый редактор и начните новый файл PHP, который мы назовем lifestream.php
Это будет страница, которая в конечном итоге показывает наш жизненный поток.
Во-первых, давайте включим очень важный компонент — саму библиотеку SimplePie:
<?php
require_once('./simplepie/simplepie.inc');
Теперь нам нужно определить пару важных переменных: первая — определить местоположение кеша, а вторая — указать количество времени (в секундах), в которое мы хотим кэшировать каналы. Повторное обращение к каналам является грубым, и некоторые поставщики каналов запретят вам чрезмерные запросы каналов. Кроме того, если у вас загруженный сайт, разумно поддерживать низкое потребление ресурсов. Я выбрал тридцать минут или 1800 секунд, что является хорошим компромиссом между свежестью и вежливостью. Вот эти переменные:
$cache = "./cache";
$duration = 1800;
Затем, время для создания некоторых объектов SimplePie
Самый простой способ превратить фид в объект SimplePie
вызвать его в краткой форме: передать ему URL-адрес фида, местоположение каталога кеша и продолжительность кеша. Все мои объекты выглядят примерно так:
$object = new SimplePie(
"http://example.com/feed.xml",
$cache, $duration);
Вы увидите, что я передаю эти переменные $cache
$duration
Создайте объекты для каждого из ваших каналов — мои называются $blog
$twitter
$flickr
$lastfm
На этом этапе, так как я собираюсь включать твиты, я собираюсь вставить в твиттер функцию Элисон Джанотто . Эта функция просто принимает некоторый текст и ищет элементы, которые можно было бы нажимать в Twitter — ссылки на имена пользователей с @, теги с # и обычные URL — и заключает их в красивые гиперссылки. Функция вставляет гиперссылки с twitterify
Я удалил их из моего примера.
Создать оболочку
Время разметки! Создайте оболочку HTML непосредственно под закрывающим target
В этом примере для краткости я только что показал содержимое элемента ?>
body
!DOCTYPE
head
Выявить предметы
Теперь, когда у нас есть оболочка документа, пришло время начать добавление еще нескольких PHP на эту страницу для циклического прохождения каждого из элементов и отображения соответствующих частей каждого элемента — заголовков, описаний, вложений, ссылок и т. Д. — и переноса соответствующая разметка вокруг них. Чтобы узнать, что доступно, изучите источник ваших каналов и посмотрите документацию SimplePie, в частности материал, который начинается с <h1>My awesome lifestream</h1>
<div id="blog">
<h2>My blog</h2>
<ul>
</ul>
</div>
<div id="twitter">
<h2>My tweets</h2>
<ul>
</ul>
</div>
<div id="flickr">
<h2>My pictures</h2>
<ul>
</ul>
</div>
<div id="lastfm">
<h2>My tunes</h2>
<ul>
</ul>
</div> Вы найдете список здесь.
Думая о моих собственных четырех каналах, каждый набор предметов должен немного отличаться. В мои сообщения в блоге я хочу включить заголовок, описание, дату и гиперссылку. В ленте Twitter RSS заголовок и описание идентичны, поэтому я просто буду использовать заголовок. Для предметов Flickr я просто хочу показать картинку. Треки на Last.fm просто нуждаются в названии, ссылке и дате. Итак, мне нужно создать четыре отдельных цикла.
Вот цикл, чтобы выплевывать элементы моего блога, который я поместил в неупорядоченном списке внутри get_
Это довольно просто:
div#blog
Этот цикл должен генерировать серию элементов списка, подобных этой, для каждой записи блога в моем фиде:
<?php foreach ($blog->get_items()
as $item) : ?>
<li>
<h3>
<a href="<?php
echo $item->get_link(); ?>">
<?php echo $item->get_title(); ?>
</a>
</h3>
<p>
<?php echo $item->get_description(); ?>
</p>
<p class="date">
<a href="<?php
echo $item->get_link(); ?>">
<?php echo $item->get_date(); ?>
</a>
</p>
</li>
<?php endforeach; ?>
Слишком легко!
Исследуя мой канал в Твиттере, я заметил, что в каждом твите есть префикс моего имени, двоеточия и пробела. В этом случае я хочу удалить этот текст. Я также хотел бы преобразовать эти хэштеги, ссылки на имена пользователей и URL-адреса в интерактивные гиперссылки. В этом цикле, когда я повторяю <li>
<h3>
<a href="http://example.com/blogentry/">
Title
</a>
</h3>
<p>Blog entry description text</p>
<p class="date">
<a href="http://example.com/blogentry/">
01 January 2010, 12:00 am
</a>
</p>
</li>title
$item->get_title()
str_replace
twitterify
<?php foreach ($twitter->get_items()
as $item) : ?>
<li>
<p>
<?php echo twitterify(
str_replace(
"raena: ", "", $item->get_title()
)
); ?>
</p>
<p class="date">
<a href="<?php
echo $item->get_link(); ?>">
<?php echo $item->get_date(); ?>
</a>
</p>
</li>
<?php endforeach; ?>
Описания каналов Flickr не совсем подходят для моих целей: они включают текст « имя пользователя опубликовал фотографию», изображение среднего размера, окруженное ссылкой на страницу с фотографией, и описание фотографии Flickr. Однако я просто хотел бы представить самую маленькую версию изображения и гиперссылки и использовать заголовок изображения в качестве alt
К счастью, Flickr предоставляет URL-адрес изображения в виде вложения, поэтому я буду использовать его вместо этого.
Вложения Flickr по-прежнему среднего размера, но я хочу симпатичный квадратный эскиз. Это так же просто, как заменить любую ссылку на _m.jpg
_s.jpg
<?php foreach ($flickr->get_items()
as $item) : ?>
<li class="item">
<a href="<?php echo $item->get_link(); ?>">
<?php foreach ($item->get_enclosures()
as $enclosure) : ?>
<img src="<?php echo str_replace(
"_m.jpg","_s.jpg",
$enclosure->get_link()
); ?>"
alt="<?php
echo $item->get_title(); ?>" />
<?php endforeach; ?>
</a>
</li>
<?php endforeach; ?>
Наконец, мне нужны только названия и даты из моего списка любимых треков с Last.fm:
<?php foreach ($lastfm->get_items()
as $item) : ?>
<li class="item">
<p>
<a href="<?php
echo $item->get_link(); ?>">
<?php echo $item->get_title(); ?>
</a>
</p>
<p class="date">
<?php echo $item->get_date(); ?>
</p>
</li>
<?php endforeach; ?>
Вы найдете мой законченный пример как lifestream.phps
посмотрите его полностью здесь. Если вы планируете использовать его в качестве основы для своей работы, не забудьте изменить URL фида местозаполнителя на свой собственный!
Когда вы закончите тонкую настройку своих элементов, самое время загрузить их на веб-сервер и просмотреть в браузере. Если все прошло хорошо, вы должны увидеть серию неупорядоченных списков, каждый из которых содержит разные вкусности из этих RSS-каналов.
Все, что осталось сейчас, это оформить страницу и добавить любые другие интересные вещи, которые вы считаете необходимыми. В этом примере вы найдете чрезвычайно простой набор стилей: не стесняйтесь использовать их в качестве основы для своих собственных.
Есть еще кое-что…
Конечно, SimplePie может предложить гораздо больше, чем простой пример, который мы рассмотрели сегодня. Окунитесь в вики и посмотрите, что возможно — есть куча поддержки для отображения вложения, возможность объединять несколько каналов в один гигантский поток и простые способы добавления кнопок обмена в социальных сетях к элементам. В вики вы найдете несколько замечательных примеров сайтов на основе SimplePie. Наслаждайтесь!