Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> czytnik rss + cache
Moli
post
Post #1





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
ps. Użyłem znaczników code a nie php bo php coś szwankuje.

Ten post edytował Moli 19.12.2007, 09:50:44
Go to the top of the page
+Quote Post
bear007
post
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 10.06.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował bear007 6.09.2008, 18:15:51
Go to the top of the page
+Quote Post
bim2
post
Post #3





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Zainstaluj php 5 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
bear007
post
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 10.06.2005

Ostrzeżenie: (0%)
-----


Masz jeszcze jakieś głupie porady?

Ten post edytował bear007 6.09.2008, 18:17:45
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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
Go to the top of the page
+Quote Post
bear007
post
Post #6





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 10.06.2005

Ostrzeżenie: (0%)
-----


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.

Ten post edytował bear007 6.09.2008, 18:25:54
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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()
Go to the top of the page
+Quote Post
bim2
post
Post #8





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Ż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
Go to the top of the page
+Quote Post
tomaszs2
post
Post #9





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 3.05.2008

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
rzymek01
post
Post #10





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
ta klasa korzysta z roszerzenia działającego tylko na php5 (SimpleXML)

z manuala:
Cytat
The SimpleXML extension requires PHP 5.
Go to the top of the page
+Quote Post
bim2
post
Post #11





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


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. :]
Go to the top of the page
+Quote Post
tomaszs2
post
Post #12





Grupa: Zarejestrowani
Postów: 36
Pomógł: 1
Dołączył: 3.05.2008

Ostrzeżenie: (0%)
-----


Jakby ktoś jednak wiedział jak przerobić to na 4 (chodzi mi o pominięcie tej klasy) to byłbym wdzięczny za podpowiedź.
Go to the top of the page
+Quote Post
maxbmx
post
Post #13





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 8.03.2008
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


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 :/
Go to the top of the page
+Quote Post
sirkus
post
Post #14





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 7.10.2008

Ostrzeżenie: (0%)
-----


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ć (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
bear007
post
Post #15





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 10.06.2005

Ostrzeżenie: (0%)
-----


jest idealny. Bym nie szukał nic innego. A co do tego co piszesz, to możesz złożyć to z nazwą domeny
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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. ?>
Go to the top of the page
+Quote Post
bim2
post
Post #17





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Daj
$this->cacheFile = md5( $this->rssFile );

i będzie działać, ale nie rozróżnisz później który plik do jakiego adresu nalezy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Sword
post
Post #18





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 17.12.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Sword 6.02.2009, 16:03:53
Go to the top of the page
+Quote Post
Moli
post
Post #19





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Masz racje, to stara klasa i wypadało by ją zaktualizować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jak będę miał chwilke to usiąde i poprawie bo mam pare pomysłow (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mowgli91
post
Post #20





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 27.12.2008
Skąd: Szamotuły, Poznań

Ostrzeżenie: (0%)
-----


Czy istnieje wersja czytnika dla kanału Atom?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 08:23