RSS синдикация · 4 min read · Sep 14, 2025

Легкая синдикация RSS с MagpieRSS

Легкая синдикация RSS с MagpieRSS

Что такое MagpieRSS?

MagpieRSS, ласково известный как Magpie, является парсером RSS и Atom для PHP. Он позволяет вам отображать самые новые статьи с веб-сайтов с RSS или Atom лентами на вашем собственном сайте. Это отличный способ добавить новую, свежую и актуальную информацию на ваш сайт. Он парсит RSS 0.9, RSS 1.0 и имеет некоторую поддержку RSS 2.0, а также Atom 0.3.

Что мне нужно для использования Magpie?

Чтобы использовать Magpie, ваш сервер должен поддерживать PHP версии 4.2.0 с поддержкой XML или PHP5 с поддержкой libxml2. После этого настройка и использование Magpie - это просто.

Хорошо, я слышал достаточно, где я могу это получить?

Вы можете скачать Magpie с SourceForge, кликнув здесь.

Что дальше?

Просто извлеките файл и загрузите следующие файлы на ваш сервер: rss_fetch.inc, rss_parser.inc, rss_cache.inc и rss_utils.inc, а также весь каталог с именем extlib. Вы можете разместить эти файлы в любом каталоге в корне вашего веб-сервера. Я обычно загружаю их в каталог с именем rss.

Далее вам нужно решить, куда вы хотите, чтобы синдицированный контент попал. Например, если вы хотите синдицировать контент на индексе www.example.com, вам нужно будет отредактировать файл index.html(php). Если ваш файл не заканчивается на php, вам нужно будет изменить его, чтобы он заканчивался, так как мы будем добавлять php код в него.

Далее мы фактически отредактируем файл index.php. Нам нужно добавить следующий код в верхнюю часть страницы, на которой вы хотите отобразить ленты:

Пожалуйста, обратите внимание, что ваш путь может отличаться в зависимости от того, как вы назвали каталог и где в дереве находится ваш index.php. Чтобы фактически добавить ленты на вашу страницу, вам также нужно добавить следующие строки для получения и парсинга RSS:

и замените адрес на адрес ленты, которую вы хотите отобразить.

Это вернет массив, $rss, который включает синдицированный контент, а также некоторую информацию о издателе. Другие возвращаемые данные (обычно) - это имя издателя, хранящееся в $rss->channel[‘title’], описание издателя, хранящееся в $rss->channel[‘description’], и общая ссылка на издателя, хранящаяся в $rss->channel[‘link’].

Элементы можно получить через $rss->items, и простой цикл можно использовать для перебора элементов по одному. Код для цикла:

foreach ($rss->items as $item)  
        { // Код для обработки элементов здесь  
        }

Каждый элемент содержит заголовок, ссылку и описание. $item[‘title’] содержит заголовок статьи, $item[‘link’] - это ссылка на оригинал, а $item[‘description’] - это описание истории, которое часто является первыми несколькими строками контента. Основной список синдицированного контента можно получить с помощью следующего кода:

channel['link'].">".$rss->channel['title']."";  
foreach ($rss->items as $item) {  
        $href = $item['link'];  
        $title = $item['title'];  
        $desc = $item['description'];  
        echo "  

$title
"; if($desc) echo $desc; }?>

Это довольно просто, но вы должны быть в состоянии настроить это под свои нужды.

Общие проблемы и решения

Синдицированный контент слишком длинный для моего сайта.

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

$items = array_slice($rss->items, 0, 5);

Эта строка возвращает только подмножество ленты, в данном случае только первые 5 записей. Чтобы сократить описание, вы можете использовать следующие строки:

if (strlen($desc) >= 100)  
{  
        $desc = substr($desc,0,99)."...";  
}

Что это делает, так это проверяет, если длина строки для описания больше 100 символов, и если это так, отображает первые 99 и … после этого, чтобы дать читателю знать, что оно продолжается.

Я хотел бы включить кэширование лент, чтобы уменьшить использование полосы и ускорить загрузку. Это возможно?

Конечно! Magpie имеет кэширование включенным по умолчанию, но вам, вероятно, нужно будет изменить каталог, в который он кэширует, а также сделать его доступным для записи пользователем, от имени которого работает сервер. Он пытается записать в рабочий каталог, из которого вызывается скрипт. Например, если вы добавите ленту на свою домашнюю страницу, скрипт попытается создать каталог кэша в корне вашего сервера. Следующие строки включают кэш и устанавливают каталог, в который он кэширует:

define('MAGPIE_CACHE_DIR', '/tmp/magpie_cache');  
define('MAGPIE_CACHE_ON', 1);

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

define('MAGPIE_CACHE_AGE', 1800);

Это устанавливает Magpie на кэширование элементов на 30 минут. Важно отметить, что интервал указывается в секундах.

Хорошо, я добавил эти строки, но кэширование все еще не работает!

Вам нужно убедиться, что каталог, который вы установили для кэша, существует и доступен для записи пользователем, от имени которого работает сервер. В Debian это www-data. Извините, но я не знаю, под каким пользователем apache работает по умолчанию на других дистрибутивах. Вы можете сделать это с помощью следующих команд (от имени root):

mkdir /tmp/magpie_cache  
chown www-data:www-data /tmp/magpie_cache

Пожалуйста, обратите внимание, что кэш не обязательно должен находиться в /tmp, и на самом деле это хорошая идея изменить его, если вы используете общий хостинг. После этого обновите страницу, и вы должны увидеть некоторые файлы с очень странными именами в каталоге кэша. Если вы сделали все правильно, то все в порядке. Если нет, пожалуйста, обратитесь к FAQ на главной странице MagpieRSS.

Собираем все вместе

Следующее - это как параметры должны быть объединены, и это рабочий пример с небольшими изменениями с моего собственного сайта.

items, 0, 5);  
foreach ($items as $item) {  
        $href = $item['link'];  
        $title = $item['title'];  
        $desc = $item['description'];  
        echo "  

$title
"; if($desc) if (strlen($desc) >= 125) { $desc = substr($desc,0,124)."..."; } echo $desc; } ; ?>

Это извлекает ленту с www.digg.com в разделе Linux и отображает первые 5 записей с описанием длиной 125 символов. Он также кэширует в каталог /var/cache с временем кэша по умолчанию в 1 час.

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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.