Znamy już najważniejsze funkcje PHP związane z językiem XML. Możemy więc stworzyć praktyczny skrypt na naszą stronę WWW. Jego zadaniem będzie pobieranie plików RSS z zewnętrznych serwerów, a następnie wyświetlanie ich zawartości na naszej witrynie. Przed przystąpieniem do realizacji skryptu musimy zapoznać się z budową pliku RSS -----------------
1 Tworzymy plik pokazJRSS.php i wpisujemy do niego kod skryptu •._Skłąda_się_on_ z jednej funkcji o nazwie pokazRSS(), która wymaga podania dwóch argumentów 43.
<?PhP
function pokazRSS{ $adros, $ilosc=5){
$xraldata='';
$plik = fopen( $adres, "r";);
while (Ifeof($plik)) $xmldata.=fgets($plik,1024); 4^1 fclo.se ($plik) ?
$xmlparser=xml__parser_create();
xml _parse_into_ątruot($xmlparser,$xmldata,$volucs,$indexes); €1 xtttl_parser_free($xmlparser);
$tytul=
$opis='$link=
$wynik=
w zmiennej $xmldata € Następnie tworzymy nowy parser XML i wywołujemy funkcję xml_parse_into_struct() 41-Dzięki temu do zmiennej $values zostanie zapisana tablica z zawartością pliku XML.
3 Na początku analizy tablicy $values powinniśmy pobrać dane o samym kanale, a więc informacje o tytule kanału, jego opisie i adresie. Czyścimy więc zmienne 401 i wykonujemy pętlę while Cl.
4 W pętli while przeglądamy wiersze tabeli aż do napotkania znacznika <item>. Pobieramy treść zawartą w znacznikach <tdtle>, <description> i <link> (jeśli się znajdują) i zapisujemy w zmiennych $tytul, $opis oraz $link.
<?xral version=i"i. O" encoding='’UTF-8" ?> j._^».<rus yorsion=”2.0">
<channel>
<title>Serwis informacy^ ny</1itle> <link>http://www.mojaStrona.pl</link> <deBcriptioa>Serwis informacyjny</descr'iption> <item> € «
<title>Aktuali2acja stronyJ</titlo>
<1ink>http: /'/www. ino j aStrona. pl/ X. htral</ link> <doscription><lfCDATA[Dzisiaj dokonaliśmy kolejnej <strong>aktualizacji</strong>
nasze; </item> </channel> •</ras>
izej strony.1]></description>
°<i
Si=0; Cl
while (issat($values[$i]('tag']) && $values($i]['tag') 1='.ITEM'){ if: ($values[$i) (■' tag' ]««'TITŁE') $tytul=$values[ $i ] ( 'vallie* ]; i£ ($values[$ijf'tag']-«'DESCRIPTION') $opis»$values[$i]['value'] if ($values($ij [' tag']==>'LIt'rK') $link°$values($i] (' value');
$i++j
•J..
$i++;
ęwynik.='RSS:
<a href=" ’. $ link. ' . $tytul.' < / a><br />f.;
while ($i<count{$values) && $ilosć>0){ $wiod__tytul=''; $wiad_opis“' ' ; $wiad_link='
$wiad_jpubd=
while (i88Qt($values[$i]('tagfJ) && !($yalues[$l] ['tag' ]=='IT12M'
&£. $values[$ij [ 'type' ]"»>='• open' )){
if ($values[$ij['tag'j=='TITLE') $wiad__tytul=$values[$ij['value']; if (isset($yalues{$ij{'valueJJ))< if ($values[$i] l'tag'3^'TITLE') $wiad_tytul=$values[$i}('valuełJ; if {$values[$i][ 'tag' J =' DESCRIPTIOH' ) $wiad__opis=$valuosf $i]('valU9* )? if ($values[$i)['tag'J“'LINK') $wiad_link=$values[$i)['value'1; if ($valuesi$iH'tag' 1^'PUBDATE'j $wiadjpubd=$values[ $i)['yalue' ];
>’i++! ^ if {$wiad_pubd 1 =' ' ) $wiad_pubd=' (' .date( 'd ,strtotjjne($wiadjpubd) $wynik.“'<div><b>*.$wiad_tytul.* *.$wind_j?ubd.*</b><br />'. b
$wiad_opis.' <a href=J'' . $wiad_link. *" >Więce j</axhr /></div>';
$.i++;
ęiłosc—; Cl rotu rn ($wfoik)?
>
?>
om
5 Po napotkaniu znacznika <item> pętla 43 przerywa swoje działanie. Tworzymy więc pierwszy nagłówek odpowiedzi naszej funkcji (czyli tego, co nasza funkcja będzie zwracała po wywołaniu 43) i dopisujemy go do zmiennej
$wynik43-
6 Następnie w pętli 4 rozpoczynamy dalszą analizę tablicy (Ekspert zachęca do samodzielnego [ sprawdzenia, jak działa kod •).
• Każdy dokument RSS objęty jest parą znaczników <rss> </rss> ®.
• Wewnątrz jednego dokumentu RSS może być przesyłanych wiele różnych kanałów informacyjnych (na przykład wiadomości z różnych dziedzin). Kanał objęty jest znacznikami 41 o raz 43-
• W ramach kanału przekazywane są informacje o nim: tytuł kanału (znacznik <title>), adres do strony WWW, z której pobierane są wiadomości (znacznik <link>), krótki opis tej strony lub kanału (znacznik <description>) oraz inne dane (patrz tabela poniżej).
• Kolejne wiadomości w ramach danego kanału znajdują się pomiędzy znacznikami <item> 43 I </łtem> 43-
• W ramach jednej wiadomości można umieścić między innymi: tytuł wiadomości (znacznik <title> 41). adres do pełnej wersji danej wiadomości (znacznik <llnk>), treść wiadomości (znacznik <description>) oraz inne dane (patrz tabela poniżej).
• Jeśli wewnątrz wiadomości chcemy wyświetlić znaczniki języka HTML lub też inne znaki standardowo niedozwolone w XML. obejmujemy je specjalnymi sekwencjami rozpoczynającymi się od znacznika specjalnego <![CDATA[ i kończącego się znacznikiem ]]> 41-
1
i Dodatkowe znaczniki RSS
Znacznik
<lasffiuijdDate>
<language>
<copyright>
<pubDate>
<category>
<author>
Występuje pomiędzy
<channel> i </channel> <channel> i </channel> <channel> i </channel> <item> i </item> <item> i </item> <item>i</item>
liej modyfikacji pliku Język kanału
Właściciel praw autorskich Data publikacji wiadomości Kategoria wiadomości Autor wiadomości
<7php
inolude('r88_reader.php'); echo pokazRSS('http://www.komputerświat.pl/ rss/news.kmi',5);
I!__
W pierwszym będziemy mogli umieścić adres pliku RSS, a w drugim określić, ile wiadomości z tego pliku chcemy wyświetlić (a dokładniej, ile jeszcze wiadomości pozostało do wyświetlenia).
I W pierwszej kolejności wczytujemy całą i zawartość pliku i zapamiętujemy ją
i Wady skryptu
Skrypt, który napisaliśmy razem z Ekspertem, spełnia swoje zadanie, jednak nie jest wolny od wad. Jedną z nich jest pobieranie wiadomości z innych serwisów przy każdym wyświetleniu naszej strony, co może znacząco obciążyć serwer I spowolnić otwieranie naszej witryny. Ekspert zachęca więc do dokonania niezbędnych poprawek - na przykład dopisania kodu, dzięki któremu wiadomości będą pobierane tylko raz dziennie i zapisywane do pliku na naszym serwerze. Dzięki temu przy wyświetleniu strony wiadomości nie będą ściągane z innego serwera, tylko odczytywane z tego pliku.
Pętla przerwie swoje działanie po odnalezieniu liczby wiadomości określonej w nagłówku funkcji.
7 Na koniec formatujemy jeszcze datę modyfikacji na bardziej czytelną 41- Zmniej-
szamy także licznik $ilosc43. który mówi nam, ile jeszcze wiadomości mamy odnaleźć.
8 Aby wykorzystać funkcję pokazRSS(),
tworzymy prosty plik index.php •.......
(pełny kod na płycie CD Eksperta) i wywołujemy go w przeglądarce. Po chwili na
wiadomości
RSS 4 z serwisu o adresie •. Zmieniając "ten adres, można pobrać aktualności z innych serwisów RSS. KW ■
m
RSS: Komputer ŚWIAT ■ HEWS
Młodzi ludzie clir a glosować przez internet (04.01.2007) Stowarzyszenie Polska Młodych chce doprowadzić do tego. by Polacy mogli glosować w wyborach parlamentarnych. prezydenckich, do Parlamentu Europejskiego i w referendach przez internet Stowarzyszenie... Więcej
Neoshndn przyśpiesza (04.01.2007)
Od 8 stycznia Telekomunikacja Polska nie podnosząc ceny zwiększy części swoich dotychczasowych klientów prędkość transmisji danych w usłudze Neostrada. Ci, którzy mają Neostradę o prędkości do 640... Więcej
Biedy* w oprogramowaniu Microsoftu (05.01.2007)
Wykryte właśnie błędy w zabezpieczeniu oprogramowania biurowego Microsoft Word i multimedialnego Windows Media Player mogą ułatwić hakerom przejmowanie kontroli nad komputerami Jedna z luk w... Więcej
UJ Warto zajrzeć...
Książki:
# XML na poważnie - Przemysław Kazienko, Krzysztof Gwiazda, Wydawnictwo Helion. Gliwice 2002, cena 85 zt
# PHP Leksykon funkcji - L Greant. T. Wilson, B. Michlitsch,
G. Merrall, tłum. Aleksander Paleczny, Wydawnictwo Translator s.c.. Warszawa 2002, cena 57,20 zi
Adresy WWW:
www.w3.org/TR/xhlmlU/DTD/xhtmlll.dtd
©http://pl.php.net/manual/pl/funotion.xml-parser-set-option.php
eKspert
LUTY 2007 69