PHP a ziskani pouze cerstve cizi stranky

From: Petr Pokorny <mail (zavinac)>
Date: 21. 01. 2004, 18:44 CET
Zdravim,
mam jeden takovej neresitelnej problem (teda ja reseni neznam :().
Jde spis o HTTP protokolu nez PHP.

Udelal jsem si v PHP takovyho robota (inspirovano timto [1]), kterej si
stahne nekolik RSS, vyparsuje je (pomoci finalRSS [2]) a pokud jsou v nich
nejake nove zpravy posle je e-mailem. Cely se to spousti cronem kazdou
hodinu.

[1] http://www.mraveniste.org/weblog/2003-12.html#1071416363
[2] http://www.maly.cz/finalrss/


Nejvetsi problem mam prave s casem parsovani. FinalRSS k tomu pouziva
RegExpy a to trva fakt dlouho. Pokud je pres den server zatizenej, trva mu
to i desitky sekund (v pripade RDF i 20 minut!!!).

Takze jsem to cele predelal, RSS si stahuju pres fsockopen() s prislusnym
timeoutem a ukladam si do souboru md5 hash jejich tela (bez HTTP
hlavicek). Pri pristim spusteni pak tyto md5 hashe porovnam a pokud to
nesedi predpokladam ze je v nem nova zprava -> poslu to parsovat.

Problem je v tom, ze to neni u vsech RSS pouzitelny. Nektery servery
generuji RSS behem odeslani a vkladaji do nej aktualni cas
(lastBuildDate) [3][4].
Tudiz moje metoda porovnavani md5 hashu selhava :(

[3] http://blok.rozanek.cz/b2rss.php
[4] http://mobil.idnes.cz/win/day_rss.html


Takze se to chci pokusit resit pomoci HTTP hlavicek a v tom mam trochu
zmatek.

Zkousel jsem posilat pozadavek s hlavickou If-Modified-Since ale bez
uspechu. Vzdy dostanu 200 OK misto 304 Not Modified. Je to logicky, jedna
generovanou stranku, ktera se navic pri kazdem pozadavku meni :(
A vubec, je If-Modified-Since soucasti HTTP/1.0 a nebo je az v HTTP/1.1?

Pak me jeste napadlo pouzit hlavicku Etag. Jenze tu kazdy server neposila
a pak taky nevim, co konkretne znamena. Pokud se nepletu, tak Etag je
nejaky hash. Jenze ceho? Obsahu odeslaneho serverem? To by pak ale v
pripade generovanych stranek musel server vzdy pockat az se cela stranka
vygeneruje, spocitat Etag vlozit ho do hlavicky a az pak odeslat data. To
je asi blbost.
Jak tak koukam na [3] tak ten pokazdy posila stejny Etag i kdyz je obsah
zmeneny. Zase posila spravnou hlavicku Last-Modified - odpovida posledni
zmene obsahu bez ohledu na zmenu casu v nem. To ale bude spis svetla
vyjimka :(


Takze otazka zni:
Lze nejak spolehlive a jednoduse (bez regularnich vyrazu) zjistit jestli
dostanu novou nebo starou stranku (RSS)?

Pokud se podivam na nejaky ty clanky o sluzbe woko.cz zjistim, ze je to v
podstate nemozne.

Ale co kdyz jsem neco prehlidnul?


Predem dik za nakopnuti...

-pp21-
Received on Wed, 21 Jan 2004 18:44:39 +0100

This archive was generated by hypermail 2.1.8 : 21. 01. 2004, 18:45 CET