Статьи

Создайте жизнепоток с SimplePie

A berry pie Если вы похожи на меня, у вас есть кусочки вашей онлайн-жизни, разбросанные по всему миру — фотографии, комментарии, твиты, блоги, избранные ссылки — спрятаны во всех профилях. И, конечно, многие из этих профилей предлагают 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_replacetwitterify

 <?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. Наслаждайтесь!