PHP създаване на RSS Feed Generator

Публикувано на: 22.02.2012

Последна актуализация на:

Ganbox.com предоставя безплатно един PHP клас за бързо създаване на динамична RSS емисия с новини, които се извличат от базата данни на твой сайт.

Целта при написването на този клас е:

1. Да се използва лесно и удобно с кратък запис. Има включен пример в кода.
2. Да се валидира XML кода на RSS-а от валидатора http://feedvalidator.org
3. Да няма проблем с кирилицата, включително URL адреси на кирилица.
4. Да работи и на по-старата PHP версия 4, за да може да се ползва на по-стари сайтове.

Софтуерът се предлага безплатно под лиценза Creative Commons 3.0 - http://creativecommons.org/licenses/by/3.0/deed.bg

Създаване на RSS емисия с PHP

За този пример ще предположим, че на твоя сайт sait.com имаш новини, които стоят в база данни в таблица с име news. Таблицата има следните полета: id - номер на новина; title - заглавие на новина; body - текст на новината; date - дата на създаване. Предполага се още, че URL адресите на всяка новина имат следния вид: http://sait.com/news.php?id=2 и вече има направена връзка към базата данни във файл db.php.

Изтегли файла Ganbox.com RSS Feed Generator и го разархивирай. Ще получиш файла class.rss_feed.php. Може да го поставиш в главната уеб директория на сайта. Там създай файла feed.php, който ще генерира твоя RSS и ще има следното съдържание:

include("class.rss_feed.php"); // включва класа за RSS
include("db.php"); // връзка с базата данни

$feed = new RSSFeed(); // създава обект
$feed->init(
'RSS на sait.com', // Заглавие на RSS емисия
'http://sait.com/feed.php', // URL адрес на RSS емисия
'RSS с новините на сайт sait.com' // Описание на емисията
,'utf-8' // Енкодинг на емисията (по подразбиране е utf-8 и може да се изтрие този ред)
);

$news=get_last_news(10); // връща последните 10 новини
foreach($news as $one){
//Добавяне на една публикация
$item = new Item();
$item->setItemTitle($one['title']);
$one_url = 'http://sait.com/news.php?id='.$one['id']; // URL адрес на новината
$item->setItemLink($one_url); // URL адрес на публикация
$item->setItemDate($one['date']); // дата на публикация, формат YYYY-MM-DD HH:MM:SS
$item->setItemDesc($one['body']);
$feed->addItem($item);
}
$feed->createFeed(); // създава и отпечатва целия XML на RSS-а

// Примерна функция за извличане на последните count новини
function get_last_news($count=1) {
$ret = array();
$query = "SELECT * FROM news ORDER BY id DESC LIMIT $count";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
if($num_rows){
while($row = mysql_fetch_assoc($result)){
$ret[] = $row;
}
}
return $ret;
}

Ако новините в базата данни не са в енкодинг utf-8 и има проблем с кирилицата опитай следното:
1. Промени четвъртия параметър на функция init() от 'utf-8' на 'cp1251'.
2. Увери се, че файла feed.php има енкодинг cp1251.

За добавяне на лого към RSS емисията, след извикването на init() преди реда с get_last_news() постави:

$rss_title = 'RSS на sait.com'; // трябва да съвпада със заглавието на RSS-а
$rss_url = 'http://sait.com/feed.php'; // трябва да съвпада с URL адреса на RSS-а
$img_url = 'http://sait.com/logo.png'; // URL адрес на логото (приема само JPG, GIF и PNG)
$img_width = 100; // ширина на логото в пиксели
$img_height = 100; // височина на логото
$feed->setFeedImage($rss_title, $img_url, $rss_url, $img_width, $img_height);

Също така, когато това е необходимо, класа прави много лесно добавянето на прикачен файл към публикация с таг enclosure, като сам пресмята размера на файла и определя типа на файла.

Разбира се освен за новини кода може да се ползва и за създаване на емисия с последните продукти на електронен магазин, който да даде възможност на потребителите да се абонират.

След като създадеш своите RSS канали, е добра идея да се прекарат през Google Feedburner и след това да се постави линк в началната страница на сайта към тях. Ако имаш нужда от помощ със създаването на твоите RSS емисии, както и по-нататъшното им ползване за SEO цели, може да се свържеш с нас.

Кодът е изпробван под PHP версии 4 и 5. Също така има работещо копие на класа на силно посещаван сайт.
За всякакви коментари по кода пиши в тази тема.

Прочетена:6463
1 - лоша2 - слаба3 - средна4 - добра5 - отлична (4 гласа, оценка: 5,00 от 5. Моля изберете оценка!)
Loading...
Георги Стефанов
Георги Стефанов
Магистър по информатика, който се занимава с компютри от 1988 г., професионално с програмиране от 1998 г., а с уеб технологии от 2002 г. Има богат опит при оптимизиране на бизнес сайтове. Повече от 12 години развива успешно свои уеб проекти и работи с български и международни компании за постоянно подобряване на техните сайтове и увеличаване на онлайн продажбите. 

3 comments on “PHP създаване на RSS Feed Generator”

  1. Благодаря за страхотния код. Използвам го, за да генерирам RSS емисията в блога си. Всичко работи без проблеми. Оказа се, че датабазата, която съм създал не е с най-ефикасната архитектура, но с малки промени успях да настроя кода съобразно това.
    Продължавайте все така с добрата работа. Успех!

  2. Сега попаднах на този код. Тествах го и работи страхотно. Браво!

  3. Добре е да се постави htmlspecialchars за setItemTitle в class.rss_feed.php

    Нещо подобно:
    function setItemTitle($title) {
    $this->setItemElement('title', htmlspecialchars($title));
    }

    Браво за кода, много добре е направен.

споделиха
phone linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram