Создание RSS-ленты новостей


[h1]Создание RSS-ленты новостей[/h1] Формат RSS фактически является XML-форматом, а значит мы можем использовать возможности расширения DOM для создания RSS-ленты. Приведенный ниже код расширяет класс DOMDocument, чтобы построить дерево DOM, создавая элементы и добавляя их в соответствующую структуру.
 Code: php
<?php
class rss2 extends DOMDocument {
  private $channel;
  
  public function __construct($title, $link, $description) {
    parent::__construct();
    $this->formatOutput =  true;
    
    $root = $this->appendChild($this->createElement('rss'));
    $root->setAttribute('version', '2.0');
    
    $channel = $root->appendChild($this->createElement('channel'));
    
    $channel->appendChild($this->createElement('title', $title));
    $channel->appendChild($this->createElement('link', $link));
    $channel->appendChild($this->createElement('description', $description));
    
    $this->channel = $channel;
  }
  
  public function addItem($title, $link, $description) {
    $item = $this->createElement('item');
    $item->appendChild($this->createElement('title', $title));
    $item->appendChild($this->createElement('link', $link));
    $item->appendChild($this->createElement('description', $description));
    $this->channel->appendChild($item);
  }
}
?>
Конструктор класса создает и инициализирует элементы и . Он принимает три аргумента: название канала, ссылку и описание. Конструктор вызывает метод parent::__construct(), что фактически приводит к вызову метода DOMDocument::__construct(). После этого можно приступать к построению документа. Сперва устанавливаем атрибут formatOutput в значение true. В вывод будут добавлены отступы и символы перевода строки, так что его будет легче читать. Затем создаем корневой элемент документа, т.е rss, и устанавливаем атрибут version в значение 2.0, потому как мы строим ленту новостей формата RSS 2.0. Все данные будут находиться внутри элемента channel под узлом rss, поэтому следующий шаг - создание этого элемента и инициализации его элементов-потомков title, link и description. Все эти данные берутся из аргументов, переданных конструктору. Они создаются методом CreateElement(), который позволяет указать как имя элемента, так и текстовой узел за один вызов. Наконец, сохраняем элемент channel, чтобы упростить обращение к нему в дальнейшем. Для добавления новых статей предназначен метод addItem(). Поскольку элементы item содержат те же данные, что и channel, код метода addItem() почти идентичен коду конструктора. Пример использования класса:
 Code:
<?php
$dblocation = 'localhost';   // Имя сервера
$dbuser     = 'root';        // Имя пользователя
$dbpswrd    = '123';            // Пароль
$dbname     = 'mydb';        // Имя базы данных

// Соединение с сервером базы данных
$dblink = mysql_connect( $dblocation, $dbuser, $dbpswrd );
mysql_query( 'SET NAMES UTF8' );
// Выбираем базу данных
mysql_select_db( $dbname, $dblink );

$rss = new rss2('Новости по чем-то там', 'http://sec-news.ru', 
                'Новости по чем-то там, тому сему и этому');

$query = 'SELECT id, title, announce
          FROM news
          ORDER BY puttime DESC
          LIMIT 10';
$res = mysql_query( $query );
                
while( $news = mysql_fetch_array( $res ) ) {
  $rss->addItem($news['title'], 'http://sec-news.ru/news/'.$news['id'].'/', $news['announce']);
}

echo $rss->saveXML();
?>
Есть один минус в кодировках. Если у вас кодировка сайта в CP-1251, то вам нужно каждый раз перекодировать кодировку. Это из-за того, что РСС кодировка - UTF. Источник: http://blog.webmasterschool.ru/archives/172 НО! Лично я использую другой вариантик... Смотрите "Создание RSS ленты на своем сайте"
MYSQL UPDATE + LEFT JOIN / INNER JOIN / OUTER JOIN
Заменяем getimagesize на CURL. И get_headers на CURL
Защита от Iframe и других уязвимостей. Защита от взлома.
Хостинг не оплачен.