[PHP][XML] Własny kanał RSS
W dzisiejszym artykule poruszę kwestię tworzenia własnego kanału RSS na stronę WWW. Artykuł ten powstaje na prośbę jednego z czytelników mojego bloga.
Jak wiadomo, kanały RSS służą do szybkiej prezentacji wiadomości ze strony w formie skrótów, które można potem odczytać w różnego rodzaju czytnikach RSS.
Na początek zdefiniujemy przykładową bazę danych z której będziemy pobierać dane dotyczące wpisów w kanale RSS. Nasza baza wygląda następująco:

Kolejnym krokiem jest zbudowanie połączenia między bazą danych a naszym kodem napisanym w PHP.
Taki skrypt przyjmuje taki zapis:
< ?php //plik db.php $user = "nazwa_uzytkownika"; $pass = "haslo_do_bazy"; $db = "serwer_bazy_danych"; $dbname = "rss"; //nazwa bazy danych $polaczenie = mysql_connect($db, $user, $pass) or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error()); $baza = mysql_select_db($dbname, $polaczenie); ?>
Teraz, stworzymy plik o nazwie index.php w którym będzie zawarty kod generujący kanał RSS (nazwa pliku nie ma tutaj znaczenia). Wygląda on następująco:
< ?php header('Content-Type: application/xml; charset=utf-8'); include('db.php'); ?> <xml version="1.0" encoding="utf-8"> <rss version="2.0"> <channel> <title>Blog webmasterski | Piotr Nalepa</title> <link>http://blog.piotrnalepa.pl</link> <description>MĂłj blog webmasterski</description> </channel> < ?php $zapytanie = 'SELECT * FROM wpisy ORDER BY data_dodania DESC LIMIT 5'; mysql_query('SET character_set_connection=utf8'); mysql_query('SET character_set_client=utf8'); mysql_query('SET character_set_results=utf8'); $wynik = mysql_query($zapytanie) or die(mysql_error()); while($row = mysql_fetch_array($wynik)) { echo ' <item> <title>'.$row["tytul"].'</title> <link>'.$row["link"].'</link> <description>'.$row["opis"].'</description> '; } ?> </rss> </xml>
Znacznik
Jak widać w powyższym kodzie po zapisaniu nazwy kanału następuje stworzenie zapytania generującego dane do kanału RSS, dzięki któremu wywołamy 5 ostatnich wpisów ze strony na kanał RSS.
Zaraz potem następuje pętla „while” która zapisuje dane z bazy do języka XML, w którym każdy nowy wpis jest definiowany za pomocą znacznika
Ponadto przed wykonaniem zapytania SQL ustawiłem wymuszenie kodowania transmisji danych na UTF-8.
Jak widać, kod generujący dane do kanału RSS nie jest rozbudowany i to dzięki niemu możemy stworzyć pierwszy prosty kanał RSS naszej strony.
10 komentarze/y
Napisz komentarz
Komentarze są moderowane. Po akceptacji przez administratora zostaną wyświetlone na stronie.

30/03/2010 o 23:06
[...] This post was mentioned on Twitter by Radek Suski and Piotr Nalepa, Piotr Nalepa. Piotr Nalepa said: NOWY WPIS: [PHP][XML] Własny kanał RSS http://blog.piotrnalepa.pl/2010/03/30/phpxml-wlasny-kanal-rss/ [...]
31/03/2010 o 23:38
[...] This post was mentioned on Twitter by Radek Suski, We ReTweet, Retweet Train, Retweet Hub, sigsiu_net and others. sigsiu_net said: RT @sunpietro NOWY WPIS: [PHP][XML] Własny kanał RSS http://bit.ly/a6HTwR [...]
11/04/2010 o 22:21
Jak ktoś nie chce się bawić sam z tworzeniem, to polecam program rss designer
http://rssdesigner.prv.pl
19/07/2010 o 14:54
Proponuje zapoznac sie z MVC i napisac jakas klase albo uzyc gotowej.
19/07/2010 o 14:59
Dzięki za uwagę, ale na potrzeby tego artykułu pominąłem kwestię MVC
02/11/2010 o 22:01
Tak jak już wspomniał CapaciousCore, lepiej by się to prezentowało jako klasa. Poza tym po co generować za każdym razem RSS na nowo? Lepiej wprowadzić system cache’u i aktualizować np. co godzinę. Ba, można by się nawet pokusić o crona. BTW dlaczego wszyscy korzystają z RSS, skoro istnieje coś takiego jak ATOM?
18/02/2011 o 14:21
też używam RSS, myślę, że jest on nadal bardziej popularny niż ATOM. I na pewno bardziej rozpoznawalny.
01/03/2011 o 20:04
MVC, klasy… Możnaby.. to napisz taki artykuł, chętnie skorzystam;) A teraz odnośnie tego artykułu. Z jednej strony fajna sprawa, ale gdy dodam to po kliknięciu w RSS otwiera mi zawartość XML a nie traktuje tego jako RSS (zapytanie o subskrypcję.
Jak zrobić, by można było kliknięciem zasubskrybować kanał? ps. dodawanie do programu (np. w Firefox czy Operze) linka …/rss.php z palca działa bez problemu.
04/03/2011 o 12:00
Może sprecyzuję troszkę, bo nie widzę żadnej odpowiedzi:)
Za pomocą tego artykułu zrobiłem plik rss.php. Gdy dodam ten plik jako link (w head czy na stronie) to po kliknięciu w niego otwiera mi się w przeglądarce zawartość XMLa z informacją „Podany plik XML nie zawiera żadnych informacji o stylach z nim związanych. Poniżej wyświetlone jest drzewo dokumentu.”
Chciałbym, aby po kliknięciu otwierała się pytaniem, czy chcę zasubskrybować kanał RSS (tak jak to jest w innych miejscach).
Gdy sprawdzam walidację (http://feedvalidator.org), to pokazuje:
line 1, column 0: Undefined root element: xml
xml version=”1.0″ encoding=”utf-8″
Może to ma związek z tym? Tylko co jest nie tak?
04/03/2011 o 14:55
Znalazłem błędy. Wygenerowany XML ma niepoprawną składnię. Należy dodać znaczniki „guid” po „link” i wiele innych zabiegów… Polecam http://feedvalidator.org/ by usunąć te błędy:)