RkBlog

Hardware, programming and astronomy tutorials and reviews.

Prosty Blog - Tworzenie Kanału RSS

Dodajemy obsługę kanałów RSS z najnowszymi wiadomościami/newsami do naszego bloga napisanego w CodeIgniter

Kanały RSS, Feedy to określenie odnoszące się do plików zawierających dane zapisane w określonym formacie XML. Dla przykładu pobierz jeden z "kanałów" gazety wyborczej: plik xml, strona z kanałami. Oglądając taki plik w edytorze tekstowym zauważymy "nagłówek"
<?xml version="1.0" encoding="ISO-8859-2"?>
<rss version="2.0"><channel xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
<title>InternetTechnologie.Gazeta.pl</title>
<link>http://www.gazeta.pl</link>
<description>Internet, technologie</description>
<language>pl</language>
<copyright>Copyright © Agora SA All rights reserved.</copyright>
<lastBuildDate>Wed, 2 Aug 2006 21:29:37 +0200</lastBuildDate>
<image>
<title>Gazeta.pl</title>
<url>http://www.gazeta.pl/img/w/l/gazeta.gif</url>
<link>http://www.gazeta.pl</link>
<width>68</width>
<height>25</height>
</image>
Po tym serię newsów:
<item>
<guid>http://gospodarka.gazeta.pl/gospodarka/1,68367,3522034.html?skad=rss</guid>
<link>http://gospodarka.gazeta.pl/gospodarka/1,68367,3522034.html?skad=rss</link>
<title>Czy TP SA przemianuje portal wp.pl na orange.pl?</title>
<description>TP SA mianowaa nowego prezesa Wirtualnej Polski. Czy pod jego rzdami portal zmieni mark?na Orange? </description>
<category>InternetTechnologie.Gazeta.pl</category>
<pubDate>Tue, 1 Aug 2006 23:00:00 +0200</pubDate>
</item>
I zakończenie:
</channel></rss>

Jak zrobić własny kanał RSS ?

Wystarczy kazać PHP na wyświetlenie identycznego kodu. Tworzymy szkieletowy widok news_rss.php:
<rss version="2.0"><channel xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
<title>Mój Blog</title>
<link>http://www.mojblog.pl</link>
<description>Wieści z Blogu Ryśka</description>
<language>pl</language>
<copyright>Copyright © Rychu SA</copyright>
<lastBuildDate>Wed, 2 Aug 2006 21:29:37 +0200</lastBuildDate>
<image>
<title>Blog Ryśka</title>
<url>http://www.mojblog.pl/img.gif</url>
<link>http://www.mojblog.pl</link>
<width>68</width>
<height>25</height>
</image>

// tutaj dane

</channel></rss>
Podajemy tytuł kanału (title), zazwyczaj coś jak nazwa strony, link to adres URL do naszej strony, description opis, lastBuildDate - data ostatniej aktualizacji, na razie pomijamy. Cały tag image zawiera dane o ikonce kanału, można to olać (url - link do grafiki, width i height to jej rozmiary).
Teraz trzeba zapełnić "kanał" danymi. Musimy pobrać dane z bazy danych, np 10 ostatnich newsów i wyświetlić co trzeba w pętli. W kontrolerze blog tworzymy metodę:
<?php
function rss_feed()
           {
           header("Content-Type: text/xml; charset=utf-8");
           $this->load->model('News');
           $query = $this->News->get_latest_news();
           if ($query->num_rows() > 0)
                       {
                      $this->load->view('news_rss', array('result' => $query->result()));
                      }
           }
Do modelu News dodajemy metodę pobierającą 10 ostatnich newsów:
<?php
function get_latest_news()
           {
           $this->db->orderby("news_id", "desc");
           return $this->db->get('news', 10);
           }
Oraz modyfikujemy widok:
<rss version="2.0"><channel xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
<title>Mój Blog</title>
<link>http://www.mojblog.pl</link>
<description>Wieści z Blogu Ryśka</description>
<language>pl</language>
<copyright>Copyright © Rychu SA</copyright>
<lastBuildDate>Wed, 2 Aug 2006 21:29:37 +0200</lastBuildDate>
<image>
<title>Blog Ryśka</title>
<url>http://www.mojblog.pl/img.gif</url>
<link>http://www.mojblog.pl</link>
<width>68</width>
<height>25</height>
</image>

<?PHP
foreach($result as $val)
           {
           echo '<item>
<link>'.site_url().'</link>
<title>'.$val->news_title.'  </title>
<description>'.substr($val->news_text, 0, 100).'  </description>
<category>Blogi</category>
<pubDate>Tue, 1 Aug 2006 23:00:00 +0200</pubDate>
</item>';
           }
?>

</channel></rss>
Pod adresem index.php/blog/rss_feed powinien pojawić się nasz "kanał". W widoku pojawiła się funkcja substr, która wycina określony fragment łańcucha, w naszy, przypadu wyświetlone zostanie pierwsze 100 znaków. Oczywiście można zwiększyć rozmiar łańcucha (w tym przypadku treść newsa) ale wzrośnie tym samym rozmiar pliku RSS. A im większy tym dłużej się ładuje i większy transfer wygeneruje.
Feed jest praktycznie gotowy. Programy czytające je nie będą miały problemów z naszym:
darmowy hosting obrazków
RkBlog

14 July 2008;

Comment article