Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czytnik rss + cache
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Moli
Witam

Prosta klasa do obsługi czytnika RSS z cachowaniem. Klasa do działania wymaga PHP > 5.

Kod
<?php

class Rss {

public $rssFile;
public $cacheFile;
public $xml;
private $cacheDir;

public function __construct ( $rssFile , $cache = 'on' , $cacheDir = 'cache' )
{
    $this->rssFile   = $rssFile;
    $this->cacheFile = basename ( $this->rssFile );
    $this->cacheDir  = $cacheDir;
    
    if ( empty ( $this->rssFile ) OR empty( $cacheDir ) ) exit;
    
        if ( $cache == 'on' ) {
            if ( file_exists ( $this->cacheDir . '/' . $this->cacheFile . '.php' ) ) {
                $this->xml = simplexml_load_file ( 'cache/' . $this->cacheFile . '.php' );
            }    else {
                $this->xml = simplexml_load_file ( $this->rssFile );
                $cacheFileCode = file_get_contents ( $this->rssFile );
            
                $fp = fopen ( $this->cacheDir . '/' . $this->cacheFile . '.php' , 'w' );
                fwrite ( $fp , $cacheFileCode );
                fclose ( $fp );
            }
        } else {
            $this->xml = simplexml_load_file ( $this->rssFile );    
        }
    }

public function clearAllCache ()
{
    foreach ( glob($this->cacheDir . "/*.php") as $fileCacheName ) {
        unlink ( $fileCacheName );
    }
}

public function clearOneCache ( )
{
    unlink ( $this->cacheDir . '/' . $this->cacheFile . '.php' );
}

public function rssInfo ()
{
    $arr['version']     = $this->xml->attributes();
    $arr['title']       = $this->xml->channel->title;
    $arr['description'] = $this->xml->channel->description;
    
    return $arr;
}

public function getRss()
{
    return $this->xml->channel->item;
}

}

?>


Uzywanie
Kod
$rss = new Rss ( 'adres do pliku xml' , 'on/off cache', 'katalog dla cache' );

ps. Aby cache było włączone musimy dać on

Wyświetlanie informacji o kanale.

Kod
$info = $rss->rssInfo();

echo 'Wersja RSS = ' . $info['version'] . '<br />';
echo 'Tytuł kanału = ' . $info['title'] . '<br />';
echo 'Opis kanalu = ' . $info['description'] . '<br />';


Wyświetlenie notek
Kod
foreach ( $rss->getRss() as $item )
{
echo '<h1>' . $item->title . ' (' . $item->pubDate . ')</h1><br /><small>' . $item->description . '</small><br />' . $item->link;
}


Aby wyczyścić ten cache którego aktualnie używamy dajemy
Kod
$rss->ClearOneCache();

a żeby wyczyścić wszystkie cache dajemy
Kod
$rss->ClearAllCache();


Może komuś się przyda smile.gif
ps. Użyłem znaczników code a nie php bo php coś szwankuje.
bear007
Coś mi nie działa, dostaję taki błąd:


Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/&&&/domains/&&&/public_html/rss_agregat.php on line 7

na linii:

public $rssFile;

na początku deklaracji klasy Rss
bim2
Zainstaluj php 5 winksmiley.jpg
bear007
Masz jeszcze jakieś głupie porady?
nospor
@bear007 oco ci chodzi? Przeciez dobrze napisal. Jak sie nie znasz to nie pyskuj chociaz

Klasa ta jest napisana pod php5. A ze ty uzywasz jej na php4 to dostajesz wlasnie takie bledy
bear007
Nie mam problemu ze wzrokiem i jak widze jak byk w pierwszej linii posta autora watku ze wymagane jest PHP 5 to sprawdzam to na samym poczatku. Mam zainstalowane PHP 5 i jezeli ktos tutaj umie pomoc to o to prosze. A nie o powtarzanie informacji z samej gory watku, no chyba ze ten post znajduje sie w Hyde Park, to moze sie wszyscy posmiejemy z jakiegos kawalu dobrego?

Nospor - ekspercie, jak tak sugerujesz ze sie nie znam, to czekam na Twoją odpowiedź. Jak zrobić zeby ta klasa dzialala w PHP 5? Masz okazje zablysnac mimo wieku.
nospor
Sluchaj, to ze myslisz ze odpalasz to na php5 to nie znaczy ze odpalasz to na php5. I nie zartuje sobie z ciebie tylko ci grzecznie wyjasniam.
Juz nie raz mielismy tu takich macho co to sie "znają" na rzeczy ale jednak problem maja...

Odpal sobie kod:
  1. <?php
  2. ?>

A dowiesz sie jakiego php uzywasz.
Kod bledy wyraźnie mowi ze to php4.

Cytat
Nospor - ekspercie, jak tak sugerujesz ze sie nie znam, to czekam na Twoją odpowiedź. Jak zrobić zeby ta klasa dzialala w PHP 5? Masz okazje zablysnac mimo wieku.
PAtrzy wyzej "ekspercie"

edit: jesli jakims cudem faktycznie masz php5 to moze masz wlączony tryb kompatybilnosci, ale to nie powinno miec wplywu.
Sprawa sie rozwiąze jak pokazesz nam co pokazuje ci phpinfo()
bim2
Że tak powiem głupi to jesteś ty.
Tłumacząć T_OLD_FUNCTION ja bym się nakierował, że jednak coś jest stare. Taki błąd zawsze wystepuje po użyciu public pod PHP 4.

I ta klasa działa w PHP 5. Spróbuj dodać zamiast .php to .php5
tomaszs2
Przestańcie się wszyscy popisywać jak dzieci w przedszkolu.

Chciałbym u siebie skorzystać z tego kodu w PHP 4, czy ktoś z Was mógłby podpowiedzieć jak go przerobić?
rzymek01
tomasz, generalnie to wystarczyłoby pozamieniac public, private na var,
z funkcji składowych wywalić public itp.,
a __construct zamienić na nazwe klasy

ale jest jedno ale biggrin.gif
ta klasa korzysta z roszerzenia działającego tylko na php5 (SimpleXML)

z manuala:
Cytat
The SimpleXML extension requires PHP 5.
bim2
Nie generalnie dałoby się, a

praktycznie się nie da i nie ma sensu przerabiać, bo to tak jakbyś chciał do nowego Ferrari wrzucić silnik parowy. :]
tomaszs2
Jakby ktoś jednak wiedział jak przerobić to na 4 (chodzi mi o pominięcie tej klasy) to byłbym wdzięczny za podpowiedź.
maxbmx
Czy zna ktoś nazwę jakiegoś fajnego darmowego skryptu do rss'ów?
Chodzi o to zeby tworzyc sobie na stronie www czytnik wybranych cssów, otagować je, skategoryzować itp
szukałem w googlu ale nic nie znalazłem :/
sirkus
Witam,

właśnie dokładnie czegoś takiego szukałem, tylko pojawia się pewien problem, iż cache zapisuje się w ten sposób że

dla rss np. banki.wp.pl/rss.xml zapisze w folderze cache plik rss.php
i dla rss fundusze.wp.pl/rss.xml też będzie chciało zapisać plik z cache o nazwie rss.php

jak sobie z tym poradzić questionmark.gif i czy kod ten jest dość wydajny aby go stosować czy poszukać czegoś innego, lepszego, jeśli tak to co polecacie, są jakieś dobre gotowce rss z cache które niezbyt obciążają serwer questionmark.gif
bear007
jest idealny. Bym nie szukał nic innego. A co do tego co piszesz, to możesz złożyć to z nazwą domeny
erix
Cytat
jak sobie z tym poradzić i

Wyciągaj sobie domenę z adresu i modyfikuj zmienną:
  1. <?php
  2. $this->cacheFile = basename ( $this->rssFile );
  3. ?>
bim2
Daj
$this->cacheFile = md5( $this->rssFile );

i będzie działać, ale nie rozróżnisz później który plik do jakiego adresu nalezy winksmiley.jpg
Sword
sory, że tak trochę odkopałem, ale chyba tutaj czegoś nie rozumiem, co daje to cache, skoro jeżeli raz wczyta jakiś rss to potem czyta tylko z tego co się zapisało w folderze cache niczgo nie dopisując ani nie zamieniając? tutaj:
  1. <?php
  2. if ( $cache == 'on' ) {
  3.            if ( file_exists ( $this->cacheDir . '/' . $this->cacheFile . '.php' ) ) {
  4.                $this->xml = simplexml_load_file ( 'cache/' . $this->cacheFile . '.php' );
  5. ?>

czyli nawet jak by sie cos zmieniło na stronie to i tak pobierze z folderu cache?
Moli
Masz racje, to stara klasa i wypadało by ją zaktualizować smile.gif Jak będę miał chwilke to usiąde i poprawie bo mam pare pomysłow smile.gif
mowgli91
Czy istnieje wersja czytnika dla kanału Atom?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.