search
top

Введение в SimplePie

logo_simplepieПознакомлю вас  с очень интересной библиотекой написанной на , которая называется SimplePie. Предназначена для управления и Atom каналами (фидами), распространяется по лицензии BSD, то есть бесплатно, и является незаменимым средством, если вам требуется разобрать структуру данных или Atom фида для дальнейшего использования контента

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

Кроме всех прелестей имеет  отличную интеграцию с множеством движков блогов, вики, форумов, например: Joomla, Drupal, DokuWiki, MODx, Mediawiki, WordPress и т.д. И ещё что мне очень нравится, так это то, что она замечательно работает с фреймворком CodeIgniter. Все поддерживаемые плагины и интеграции смотрим здесь.

От теории перейдем к практике, и для примера сделаем простой Grabber или Reader, называйте как хотите смысл остается тем же, получение контента с фидов и дальнейшее его применение.

Для начала качаем SimplePie. Затем в рабочей директорию нашего http сервера создаём папку и распаковуем туда всё содержимое скачанного архива (если у вас всё ещё нет тестового http сервера то советую XAMPP). Запускаем сервер, заходим и смотрим демо-пример http://localhost//demo/. Но для наглядности использования библиотеки создадим свой пример. Для этого в корне вашей папки создаем ещё одну папку и называем example, в ней будет лежать наш пример, в ней создаём файл index.

Для того что бы полученный контент кэшировался, необходимо создать папку cache и сделать её доступной для записи. Заходим  http://localhost//example/ и ничего невидим :-))), это пока.  Для понимания того что мы будем делать вам понадобится справочник встроенных методов SimplePie.

Открываем index. и пишем стандартный шаблон html

<!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" />
<title>Demo_SipmpePie</title>
</head>
<body>

</body>
</html>

Между тегами <body> будет находится наш основной код. Пишем (естественно между <? ?>):

require_once (’../.inc’); - подключаем файл .inc, который находится в корневой директории

$feed = new (’k.img.com.ua//ru/news.xml’); - создаем новый объект. Тут пишем адрес фида, с которого будут поступать контент.  Есть возможность подключать несколько фидов, но об этом расскажу ниже.

$feed->handle_content_type(); -  Устанавливает набора символов в соответствии с кодировкой ленты.

foreach ($feed->get_items() as $item) - все поступающие элементы ($feed->get_items()) будут обрабатываются в цикле и присваивается переменной  $item

{ echo $item->get_title();

echo ‘<hr />’; }             - получаем заголовки новостей с выбранной лент а тег <hr> просто для

разделения новостей

В итоге у вас должно получится, нечто подобное:

<!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" />

<title>Demo_SipmpePie</title>

</head>

<body>

<?

require_once('../.inc');

$feed = new ('progg.ru/Feed/Atom/Published');

$feed->handle_content_type();

foreach ($feed->get_items() as $item)

{  echo $item->get_title();

echo '<hr />'; }

?>

</body>

</html>

Заходим, проверяем http://localhost//example/,  выглядит примерно вот так:

simplepie_1

Теперь подключим несколько лент и немного украсим.

Что бы подключить несколько фидов необходимо их заключить в массив

$feed = new (array(
'k.img.com.ua//ru/news.xml',
'.tsn.ua/ru/index.',
'img.lenta.ru/r/EX/import.',
)
);

Теперь у нас будут выводиться 3 новостные ленты. Дальше сделаем,  что бы название новости являлось гиперссылкой на оригинал, в этом нам поможет get_permalink() .

Вместо

echo $item->get_title();

Пишем

$feed=$item->get_feed();

echo ‘<h4><a href=”‘.$item->get_permalink().’”>’.$item->get_title().’</a></h4>’;

После  при нажатии на заголовок мы перейдем на оригинал статьи. Проверьте!!

Теперь у нас есть название статьи, но нет описания и даты создания. Исправим это

с помощью get_content() и get_date().

Пишем

echo ‘<p>’ .$item->get_content(). ‘</p>’;

что бы понимать, откуда новость я хочу, чтобы после каждой новости  отображалась  favicon

соответствующего сайта со ссылкой на сам сайт и дата публикации.

<strong> </strong>echo '<p>Ресурс :<a href="'.$feed->get_permalink().'"><img src="'.$feed->get_favicon().'"

alt="'.$feed->get_title().'" title="'.$feed->get_title().'" border="0" width="16" height="16"/>

</a>|' .$item->get_date(). '</p>';

Разберем:

строка <a href=”‘.$feed->get_permalink().’”><img src=”‘.$feed->get_favicon().’”

alt=”‘.$feed->get_title().’” title=”‘.$feed->get_title().’” border=”0″ width=”16″ height=”16″/>

выводит  favicon 16×16 с помощью $feed->get_favicon() и ставит на нее гиперссылку $feed->get_permalink(), а $feed->get_title() отображает название ленты.

К сожалению, не у всех  сайтов есть favicon на канале.

Конечный вариант должен выглядеть примерно так (естественно между  <body>):


<?
require_once('../.inc');
$feed = new (array(
'k.img.com.ua//ru/news.xml',
'.tsn.ua/ru/index.',
'img.lenta.ru/r/EX/import.',
));
$feed->handle_content_type();
foreach ($feed->get_items() as $item)
{
$feed=$item->get_feed();
echo '<h4><a href="'.$item->get_permalink().'">'.$item->get_title().'</a></h4>';
echo '<p>' .$item->get_content(). '</p>';
echo '<p>Ресурс:<a href="'.$feed->get_permalink().'"><img src="'.$feed->get_favicon().'" alt="'.$feed->get_title().'" title="'.$feed->get_title().'" border="0" width="16" height="16" /></a>|' .$item->get_date(). '</p>';
echo '<hr />';
}
?>

Ну, вот и все, заходим, проверяем, радуемся.

simplepie_2

DEMO

СКАЧАТЬ

Связанные записи

  • http://econom-print.ru Дмитрий

    Спасибо, хорошая статья. Помогла

  • http://www.proseoblogger.com SeoEvgeny

    Супер штука этот SimplePie. При импорте RSS Feed частая проблема - иморт картинок. Ни один плагин для WP этого не делает, если в фиде картинки подключаются не явно. Например, в ленте “Корреспондент” картинки имеют прямой урл. Но в большинстве, они просто висят как “медиа файл”. ПРи умелых настройках SimplePie все отлично импортируется. Автору спасибо!

  • Сергей

    Приветствую.Спасибо за скрипт.Попробовал работает.Может подскажете как из папки cache удалять автоматически кэш через какое нибудь время.

  • http://privats.ru/ Безумный Админ

    По умолчанию кэш очищается каждые 60 минут, но можно задать свое время очистки кэша, делается как то так:

    $feed->set_cache_duration(600);

    Время ставится в секундах!!

    Пример:
    .
    .
    $feed = new SimplePie(array(……….));

    $feed->set_cache_duration(900); // кэш будет хранится 15 минут
    .
    .

  • Cергей

    Я хочу сделать новостной сайт,в програмировании не разбираюсь.Сайт хочу сделать на DLE.Подскажите можно будет к дле прикрутить как то SimplePie.Или может подскажете на каком лучше движке делать подобного плана сайт.

  • http://privats.ru/ Безумный Админ

    DLE хорош, но эта система платная, а так как красть нехорошо то
    я бы вам посоветовал посмотреть в сторону wordpress и joomla на этих CMS даже без особых навыков в программировании можно без особого труда соорудить новостной сайт. Ну а для более серьезных проектов подойдет ModX или Drupal. Если хотите сделать что то наподобие habrahabr.ru то вам идеально подойдет LiveStreet или BigStreet. SimplePie можно прикрутить к любой из данных систем, вот здесь http://privats.ru/d01827/aHR0cDovL3NpbXBsZXBpZS5vcmcvd2lraS9wbHVnaW5zL3N0YXJ0/ находятся готовые решения по интеграции со множеством движков.

  • Вова

    Что то у меня неполучаеться запустить пример который вы привели,просто чистый белый экран,хотьбы какоето сообщение написало.Вроде делаю всё как написано,пробывал на денвере и на бесплатном хостинге.Демо запускаеться и там и там.Правдв тест когда запускаю в одном песте пишет
    iTunesRSS: 0% passed!
    ? ? ?
    We ran 3 tests in 0.004 seconds of which 0 passed, and 3 failed.
    В чём у меня может быть проблема?

  • http://eslipola.net Dim

    Интересная реализация, спасибо!

  • Дэн

    Вещь интересная, только я понял что новость открывается в окне первоисточника. А как сделать чтобы она открывалась в дизайне своего сайта?

  • Евгений

    Здравствуйте, а не могли бы вы помочь мне с интеграцией в ВордПресс, чето нече не выходит, или я чет не понимаю, зашел сюда http://privats.ru/d01827/aHR0cDovL3NpbXBsZXBpZS5vcmcvd2lraS9wbHVnaW5zL3N0YXJ0I3dvcmRwcmVzcw==/ поставил “Simple Core” и “simplepie_plugin_for_wordpress”, все поставилось на ура, но вот как теперь заставить все это отображать какие-то новости из фидов, не пойму как подключить фиды. Если ставлю “dashboard_last_news”, то как бы тоже там негде прописать фиды. :( Помогите пожалуйста, кто подключал simplepie_plugin_for_wordpress.

blog comments powered by Disqus
top