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