Pozn.: Pokud hledáte článek o vytvoření RSS kanálu pro stránky, tak to je popsáno v Jak vytvořit RSS kanál v PHP.
Hned na začátku se můžete podívat na výsledek, který popisuje tento článek – Samurajovo okénko. A také si můžete stáhnout zdrojové soubory této ukázky v zazipovaném souboru.
Pozn.: Když jsem zveřejňoval tento článek na webu, tak jsem narazil na problém, který jsem pochopil až po prohledávání fóra. Na mém hostingu není povolenou použít funkci fopen na webové adresy ze stejného serveru. Takže nemohu v okénku zobrazovat moje dynamické RSS. Mohu použít (pro fopen) pouze přístup přes souborový systém (kde soubor neprojde PHP processingem), takže jsem exportoval RSS do statického souboru a to se zde zobrazuje. Pokud si stáhnete zdrojové kódy a spustíte třeba na lokálním webserveru, tak by vše mělo fungovat.
K tomuto řešení mne inspiroval český MS TechNet Blog, který vytvořil Microsoft TechNet Window. Pomocí JavaScriptu, který vložíte do svých stránek, se tam zobrazují odkazy na nejnovější tři články. Připadalo mě to jako zajímavý nápad a TechNet Window jsem si do svého webu přidal (najde se tam řada zajímavých informací). Ale vadilo mi několik věcí. Za pomoci JavaScriptu mohou do mých stránek vložit cokoliv. Načítání okénka je pomalé a tudíž prodlužuje načítání mých stránek (Radim Petratur mne ujistil, že se to brzy zrychlí). Neposledně i to, že si nemohu okénko upravit úplně podle sebe (je možné upravit CSS).
Již před nějakou dobou jsem nalezl pěknou knihovnu Last RSS od Vojtěcha Semeckého, která slouží k vytvoření RSS parseru/čtečky. Knihovna funguje dobře a nabízí i možnost kešovat načtené informace, takže se na cílovou stránku nepřistupuje pokaždé, když se zobrazuje stránka s RSS.
Pomocí této knihovny jsem tedy jednoduše vytvořil identické okénko k TechNet Window. Data jsou kešována u mě, takže je zobrazování rychlejší. Zobrazují se nadpisy a odkazy z RSS kanálu, takže mám o něco větší kontrolu nad tím, co se do stránky dostane. A můžu si okno upravit naprosto podle mých představ, aby zapadlo do mého webu.
Pozn.: V mé ukázce jsou okénka dvě. Druhé zobrazuje i popis článku (nebo jeho část).
Kód okénka
Celé okénko je udělané jako funkce, kterou stačí zavolat a okénko se vloží na dané místo stránky. Případně můžeme jako parametr předat adresu RSS kanálu a vytvořit těchto okének více. Okénko je tvořeno obdélníkovým divem, v kterém je umístěn netříděný seznam obsahující odkazy na články.
Při zavolání funkce se nastaví parametry pro Last RSS a vytvoří se jeho objekt. Nejprve se podívá, zda je nastaveno kešování, a pokud ano, tak jestli v ní existují aktuální data. V tom případě se stáhnou data z keše, jinak se připojí na zdroj RSS a získá data odtud (případně uloží do keše). Pak se jen prochází jednotlivé záznamy a zobrazují potřebné atributy.
Pozn.: Při použití keše je třeba vytvořit daný adresář a nastavit na něj práva k zápisu (777).
function showRSSWindow($rssurl = "https://www.samuraj-cz.com/rss/") { $rss = new lastRSS; // ulozeni stazenych dat do kese, je treba nastavit prava na adresar $rss->cache_dir = './temp/'; $rss->cache_time = 3600; // $rss->cp = 'UTF-8'; // kodovani, UTF-8 je defaultni $rss->date_format = 'U'; // cas a datum jako timestamp $rss->items_limit = 3; // maximalni pocet vracenych zaznamu echo " <div class='RSSwindow w220'>\n"; echo " <a href='https://www.samuraj-cz.com' title='Přejdi na Samuraj-cz.com'><img src='graphics/samuraj-logo.gif' alt='Samuraj-cz.com' width='150' height='20' /></a>\n"; if($rs = $rss->get($rssurl)) { echo "<ul>\n"; foreach($rs['items'] as $item) echo " <li><a href='$item[link]' title='{$item['title']}'>{$item['title']}</a></li>\n"; echo "</ul>\n"; } else echo "<p>Error: Nepodařilo se připojit ke zdroji RSS.</p>"; echo " </div>\n"; }
Pozn.: Pokud se vám líbí můj web, tak budu samozřejmě velice rád pokud umístíte na svůj web okénko s odkazy z mého RSS.
Díky za článek. Super :-)
Ahoj,je to nějak tedy omezené hostingem?Jsou nějaké požadavky?Třeba php5?Děkuji Honza
odpověď na [2]Honza: Momentálně mne žádné speciální požadavky nenapadají. Vše je uvedeno v článku.
odpověď na [3]Samuraj: Děkuji za odpověď,a nenapadá Tě,proč mi to na jednom webu jede a na druhém ne?Děkuji Honza
odpověď na [4]Honza: No snažil jsem se přemýšlet a snad tam nic není. Využívá se funkce fopen k otevření vzdáleného souboru (RSS), což by snad neměl být problém (viz. moje úvodní poznámka v článku). Mohl by být problém s používáním cache (ukládání údajů do lokálního souboru), tak bych to zkusil bez toho. Vše ostatní jsou běžní věci.
Mam něco s čim si nevim rady :( ... a to že u prvního článku RSS bych chtěl mít zobrazený popis a u dalších ne... ale nevim jakouv funkcí určim to že u prvního postu to bude tak a udalších zas jinak :( :-(
Ahojte. Neviete mi poradit? Preco to na jednom servery kludne bezi a na druhom nie. Dal som aj 777 a nic. Ako by nechcelo menit rsscache. No na druhu stranu, tam kde to funguje, tak ked rozbalim rsscache tak je tam to co som si stiahol tu a nove co sa zobrazuje tam nie je. :-O Nechapem.
odpověď na [7]Majo: Zkusil bych vypnout cachování. Případně, jestli na daném hostingu nejsou omezené některé funkce.
$rss->cache_dir = '';
++odpověď na [8]Samuraj:
Dakujem. Nepomohlo, asi napisem na hosting, ze co nemam povolene. :-(
No napisal som Hostingovej spolocnosti a je to v poriadku. Pytal som sa aj v com bol problem, ale zatial neodpovedali. Dik. ;-)
Caute, neviete preco mi to Hadze po nadpise kazdej novine datum: [01.01.1970] ?
Fatal error: Cannot instantiate non-existent class: lastrss in rss.php on line 3
Co s tím?
odpověď na [12]Nikd0: Asi by pomohlo includovat knihovnu lastRSS.php ;-).
Zdravím, potřeboval bych poradit s RSS čtečkou v PHP. Problém je v tom, že server odkud chci přijimat RSS z fóra vyžaduje na fórum přihlášení. V čtečce co mám jako aplikaci do windows se po zadání jmena a hesla feedy zobrazují, ale v php čtečce nevím jak tu autentizaci provést.