ugrás a tartalomhoz

Időjárásjelző

dc-hungary · 2008. Ápr. 6. (V), 14.22
Sziasztok

Találtam egy jó kis leírést arra, hogy hogyan lehet időjárás jelzőt csinálni..
íme:
Innen másoltam: http://designprog.net/blog/bejegyzes/20071119/idojarasscript

Amikor még a script-kid korszakomat éltem, csodálkozva néztem a nagy siteokat, hogyan képesek az aktuális időjárási adatok kijelzésére. Eltelt egy fél tucat év, majd az egyik sitebuilder kollégám megkeresett egy ilyen problémával. Elkezdett járni az agyam, hogyan lehetne megtudni az aktuális időjárási adatokat a lehető leggyorsabban és leginkább kényelmesen.

Eszembe jutott, hogy van az idokep.hu, ami a Firefoxomban is kijelzi a várható időjárást. Megláttam, hogy az oldalnak van RSS csatornája is, ami esetleg használható lenne.

Az RSS feldolgozása természetesen a lehető legegyszerűbb módon, a PEAR XML_RSS csomagjával történik. Az adatokat a http://adat.idokep.hu/rss/adatok.php szkript szolgáltatja, ezt használja a mi rendszerünk is. Annak érdekében, hogy a távoli szervert ne terheljük túl, óránként csak egyszer kérdezzük le az időjárásra vonatkozó információkat.

A szkriptet a definiálásokkal kezdjük:
require_once ( "XML/RSS.php" );
define( "RSS_URL" , "http://adat.idokep.hu/rss/adatok.php" );
define( "CACHE" , "idojaras.cache" );
define( "BUDAPEST" , 0);
$timestamp = date ("Y-m-d H");
A fentiek szerint a rendszer az idojaras.cache nevű fájlt használja cache fájlként, és a feldolgozott csatorna nulladik elemére (vagyis az elsőre) vagyunk kíváncsiak.

Két függvényt fogunk használni, egyet a cache feldolgozásához, egyet pedig az RSS feldolgozásához. Előbbi függvény megvalósítása:
function readWeatherFile( $forceduse = false) {
  global $timestamp;
  $cache_contents = file_get_contents( CACHE );
  $weather_data = explode( " - " , $cache_contents);

  if ( $weather_data[0] == $timestamp  || $forceduse ) {
    array_shift ( $weather_data );
    $ret = $weather_data;
  }
  else {
    $ret = updateWeatherFile();
  }
  return $ret;
}
Ez tehát ellenőrzi a cache fájlban használt időbélyeget, ha az már elévült, úgy frissíti azt. A csatornát az alábbi függvény kezeli:
function updateWeatherFile() {
  global $timestamp;
  $rss =& new XML_RSS( RSS_URL );
  $rss->parse();

  if ( count ( $rss ) > 0  && !empty ( $rss->items[BUDAPEST]['description'] ) ) {
    $to_cache = $ret = $timestamp . ' - ';
    $to_cache .= $rss->items[BUDAPEST]['description'];
    file_put_contents ( CACHE , $to_cache);
  }
  else {
    $ret = readWeatherFile( true );
  }
  $ret = readWeatherFile();
  return $ret;
}
Ez a függvény beolvassa és feldolgozza az RSS csatornát, majd elmenti a cache-t. Ha mindez nem sikerülne, a régi fájlt használja. És végül a használat:
if ( file_exists ( CACHE ) && is_readable ( CACHE ) ) {
  $ret = readWeatherFile();
}
else {
  $ret = updateWeatherFile();
}
print_r ( $ret );
Eredménye:
Array ( [0] => Budapest [1] => borult [2] => 6.3 °C [3] => szélcsend ) 


Ez eddig oké.. de követtem az utasításokat, letöltöttem amit kellet (PEAR XML_RSS), de nekem a következő hibát írja:

Warning: require_once(Parser.php) [function.require-once]: failed to open stream: No such file or directory on line 23
Fatal error: require_once() [function.require]: Failed opening required 'Parser.php' (include_path='.:/servers/php/lib/php') on line 23


Erre a hibára is találtam megoldást itt: "Hogyan hozzunk létre Parser.php-t, vagyis hogy mi kell bele.."

http://articles.techrepublic.com.com/5100-3513_11-6110135.html

De, a parser.php megnyitásakor ez a hiba jött be: Fatal error: Class 'XML_Parser' not found on line 36


Elvileg a PEAR XML_RSS -ben benne kéne lennie a Parser.php nak, de nincs :((

légyszives aki tud az segítsen!
 
1

Bocsi...

Velias9 · 2008. Ápr. 8. (K), 17.20
..., de nem volt kedvem végigolvasni a kódokat, hanem a kérdéshez ugrottam.

Tudod, hogy mit jelent a hibaüzenet?
A 'require' és a 'require_once' utasításoknak van egy olyan tulajdonságuk, hogy ha nem találják a betöltendő fájlt, akkor hibaüzenettel leállítják a program futását.
Ebből következik, hogy vagy rossz helyre tetted a fájlt, vagy rossz 'string'-et adtál meg fájlnévnek, vagy nincs jogosultságod az olvasáshoz.

Ha mégsem, akkor mégegy bocsi.
2

Időjárás kijelzés II

PolonkaiG · 2008. Ápr. 9. (Sze), 03.54
Szia! Nemrég született egy másik leírás a témában. A megoldás nagyon könnyen átalakítható az idokep.hu-hoz, vagy bármi máshoz.
Link a cikkhez: Aktuális időjárás kijelzése PHP-vel.