View file rss.php

File size: 3.82Kb
<?php

class rss
{
    const count = 10;
    //заголовок канала
    const title = 'RSS на Coder-Lib.Ru';
    //адрес сайта
    const url   = 'http://coder-lib.ru';
    //описание канала
    const desc  = 'Новости сайта Coder-Lib.Ru';

    //строим конструктор
    function __construct($host,$user,$password,$db_name)
    {
        $this->header();
        if (!$this->connect_db($host,$user,$password,$db_name)) $this->error_connect_db();
        else $this->body();
    }

    //соединяемся с базой
    function connect_db($host,$user,$password,$db_name)
    {
        $r=@mysql_connect($host,$user,$password);
        if (!$r) return false;
        mysql_query ('SET NAMES "UTF8"',$r);
            mysql_query ('SET collation_connection="utf8_general_ci"',$r);
            mysql_query ('SET collation_server="utf8_general_ci"',$r);
            mysql_query ('SET character_set_client="utf8"',$r);
            mysql_query ('SET character_set_connection="utf8"',$r);
            mysql_query ('SET character_set_results="utf8"',$r);
            mysql_query ('SET character_set_server="utf8"',$r);
        if (!mysql_select_db($db_name,$r)) return false;
        return true;
    }

    //шапка канала
    function header()
    {
        header('Content-type: application/xml; charset=utf-8');
        echo '<?xml version="1.0"?>
                        <rss version="2.0">
                      <channel>
                      <title>'.$this->win2utf(self::title).'</title>
                      <link>'.self::url.'</link>
                      <description>'.$this->win2utf(self::desc).'</description>
                      <language>ru</language>';
    }

    //тело канала
    function body()
    {
        $q=mysql_query ('SELECT * FROM `news` ORDER BY `id` DESC LIMIT '.self::count);
        if ($q)
        {
            if (mysql_num_rows($q) == 0) $this->news_not_found();
            else
            while ($rows=mysql_fetch_array($q))
            {
                echo '<item>
                                     <title>'.$rows['tema'].'</title>
                                 <link>'.self::url.'</link>
                                     <description>'.$rows['news'].'</description>
                                     <pubDate>'.$rows['date'].' GMT</pubDate>
                     <guid>'.self::url.'/news/'.$rows['id'].'/</guid>
                                     </item>
                     ';
            }
            mysql_free_result($q);
        }
    }

    //при соединении с базой возникли ошибки
    function error_connect_db()
    {
        echo '<item>
                      <title>'.$this->win2utf('Временные неполадки').'</title>
                  <link>'.self::url.'</link>
                      <description>'.$this->win2utf('Извините, на сайте возникли технические неполадки!').'</description>
                      <pubDate>'.date ('D, d M Y H:i:s').' GMT</pubDate>
              <guid>http://coder-lib.ru/</guid>
                      </item>';
    }

    //новостей не наёдено
    function news_not_found()
    {
        echo '<item>
                      <title>'.$this->win2utf('Новостей не найдено').'</title>
                  <link>'.self::url.'</link>
                      <description>'.$this->win2utf('Новостей не найдено!!!').'</description>
                      <pubDate>'.date ('D, d M Y H:i:s').' GMT</pubDate>
              <guid>http://coder-lib.ru/</guid>
                      </item>';
    }

    //перекодирование из windows-1251 в utf-8
    function win2utf($msg)
    {
        return iconv('windows-1251','utf-8',$msg);
    }
    //объявляем деструтор
    function __destruct()
    {
        echo '</channel></rss>';
        mysql_close();
    }
}


require_once('lib/inc/db.php');

$rss= new rss('localhost',$user,$pass,$db);

?>