www.www.zaachi.com »  Blog/JavaScript  »  PHP&Ajax: RSS Reader

PHP&Ajax: RSS Reader



Jednoduchý RSS Feed, který umožňuje načítat zdroje pomocí Ajaxu. Zpracování zdrojů probíhá na straně serveru s podporou DOMDocument.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

V předchozím článku o Ajaxu jsem ukazoval jednoduché odesílání proměnných pomocí metody GET a zobrazení výstupu volaného PHP souboru.

V tomto příkladu bude použit pro javascript podobný kód, takže jej nebudu vysvětlovat, protože si jej můžete, včetně vysvětlení prohlédnout v minulém článku.

Hotový Rss reader si můžete vyzkoušet zde:

Zaachi.com
Novinky.cz
Zive.cz
Vyberte zdroj

RSS Reader

Vytvoříme si jednoduchý RSS Feed, který bude umožňovat načítat a zobrazovat zprávy z externích zdrojů.

Zpracování zdroje provedeme pomocí DOMDocument, se kterým je to velmi jednoduché.
Budeme tedy potřebovat jeden PHP soubor, ve kterém se bude zdroj zpracovávat.

Do tohoto souboru si předáme URL adresu pro RSS pomocí GETu a vytvoříme novou instanci DOMDocument:

//nacteme zdroj z url adresy predane prez ajax
$feed = $_GET['value'];

//vytvorime novou instanci DOMDocument
$xml = new DOMDocument();
//nacteme zdroj
$xml->load($feed);

Nyní máme celý zdroj načtený a můžeme jej zpracovat a vypsat.
Jako hlavičku vypíšeme předanou z CHANNEL v podobě TITLE a odkazu LINK.

//ziskame elementy z <chanel>
$channel=$xml->getElementsByTagName('channel')->item(0);

//Vypiseme hlavicku 
print '<a href="' . $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue . '">' . $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue . '</a>';

Nakonec budeme načítat jednotlivé ITEM, ze kterých postupně zobrazíme informace:

//elementy z <item>

$item=$xml->getElementsByTagName('item');  
//v cyklu vypisujeme jednotlive nactene clanky
for($i=0; $i < 5; $i++ ){
    //zjisteni title
    $title =         $item->item($i)->getElementsByTagName('title')      ->item(0)->childNodes->item(0)->nodeValue;
    //zjisteni odkazu
    $link =          $item->item($i)->getElementsByTagName('link')       ->item(0)->childNodes->item(0)->nodeValue;
    //zjisteni descriptions
    $descriptions =  $item->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

    //javascriptem bude mozne si rozkliknout descriptions
    print '<a href="#" onclick="show_rss('id_d_' . $i . ''); return false;">+</a>&nbsp;';
    //odkaz na clanek s jeno nazvem
    print '<a href="' . $link. '" title="' . $title . '">' . $title . '</a><br />';
    //vypis descriptions
    print '<p id="id_d_' . $i . '" style="display:none; padding: 10px">' . $descriptions . '<br /><br /></p>';
 }
?>

Celý zdrojový kód si můžete prohlédnout zde:

load.php

<?php
//nacteme zdroj z url adresy predane prez ajax
$feed = $_GET['value'];

//vytvorime novou instanci DOMDocument
$xml = new DOMDocument();
//nacteme zdroj
$xml->load($feed);

//ziskame elementy z <chanel>
$channel=$xml->getElementsByTagName('channel')->item(0);

//Vypiseme hlavicku 
print '<a href="' . $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue . '">' . $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue . '</a>';
print '<p>Posledních 5 článků: </p>';

//elementy z <item>

$item=$xml->getElementsByTagName('item');  
//v cyklu vypisujeme jednotlive nactene clanky
for($i=0; $i < 5; $i++ ){
    //zjisteni title
    $title =         $item->item($i)->getElementsByTagName('title')      ->item(0)->childNodes->item(0)->nodeValue;
    //zjisteni odkazu
    $link =          $item->item($i)->getElementsByTagName('link')       ->item(0)->childNodes->item(0)->nodeValue;
    //zjisteni descriptions
    $descriptions =  $item->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

    //javascriptem bude mozne si rozkliknout descriptions
    print '<a href="#" onclick="show_rss('id_d_' . $i . ''); return false;">+</a>&nbsp;';
    //odkaz na clanek s jeno nazvem
    print '<a href="' . $link. '" title="' . $title . '">' . $title . '</a><br />';
    //vypis descriptions
    print '<p id="id_d_' . $i . '" style="display:none; padding: 10px">' . $descriptions . '<br /><br /></p>';
 }
?>

rss_feed.php

<?php
$feeds = array(
                'Zaachi.com' => 'http://www.zaachi.com/cs/rss',
                'Novinky.cz' => 'http://novinky.cz/rss2/',
                'Zive.cz' => 'http://www.zive.cz/RSS/sc-47/default.aspx?rss=1'
                );

print '<div style="width: 400px">';
print '<div style="width: 100px;margin:10px; float: right; border: 1px solid gray; padding: 3px">';
foreach( $feeds as $id=>$value ){
    print '<a href="#" onclick="request('' . $value . ''); return false;">' . $id . '</a><br />';
}
print '</div>';


print '<div style=" padding: 10px" id="rssfeed">';
print 'Vyberte zdroj';
print '</div>';

print '</div>';
?>

<script type="text/javascript">
function request( value ){
    //vytvoreni nove promenne
    var request = null;
    //gecko
    if( window.XMLHttpRequest ){
        request = new XMLHttpRequest()
    }
    else if ( window.ActiveXObject ){
        //IE
        request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //pokud se neporadilo vytvorit 
    if (!request) {
         alert('nejede a nepojede');
         return false;
    }
      
    request.onreadystatechange = function () {go(request); } ;
    request.open("GET", "load.php?value=" + value, true);
    request.send( null );
}

function go( request ){
    var txt;
    if (request.readyState == 4){
        if(request.status == 200 || request.status == 0){
            txt=request.responseText;
            document.getElementById('rssfeed').innerHTML = txt;
        }
    }
}

//moznost rozkliknuti descriptions
function show_rss(idecko){
    el=document.getElementById(idecko).style;
    el.display=(el.display == 'inline')?'none':'inline';
}

</script>

 

 


linkuj topclanky
Komentáře (4)

Autor: Zaachi
Publikováno: 19.6.2008 18:12:42


Mohlo by vás zajímat:
Ajax loader
jQuery: Examples 3 – Ajax
Ajax: odesláni formulare pomoci GET
TOPLIST.cz
rss coments img img img