<?php
/**************************************************
 *                 Pogoda z WP.pl                 *
 **************************************************
 * Ostatnia modyfikacja: 19.12.2012 (wersja 5.0)  *
 * Autor: Jacek Kowalski (http://jacekk.info)     *
 *                                                *
 * Strona WWW: http://jacekk.info/scripts/weather *
 *                                                *
 * Utwór rozprowadzany na licencji                *
 * http://creativecommons.org/licenses/by-nc/2.5/ *
 **************************************************/

/* Kodowanie znaków UTF-8 */

/*****************************************************
 * UWAGA! Po każdej zmianie tego pliku, należy       *
 * usunąć plik pogoda_cache.txt z głównego folderu!  *
 *****************************************************/

class wpweather {
	// Zmień 43289 na kod swojego miasta - na końcu adresu:
	// http://pogoda.wp.pl/#pogoda,20121219,cid,KODMIASTA
	private $url = 'http://pogoda.wp.pl/weathertopapp.json?a=0&cid=43289';
	
	private $cache;
	private $recent;
	private $validity;
	
	private $dane;
	
	
	public function __construct() {
		// Ścieżka do cache'a
		$this->cache = dirname(__FILE__).'/pogoda_cache.txt';
		// Czy dane są aktualne?
		$this->recent = TRUE;
		// Maksymalna "starość" cache'a (format jak do funkcji strtotime)
		$this->validity = '-8 hours';
	}
	
	private function pobierzPlik() {
		// Sprawdzenie możliwości zapisania pogody
		if( ( !file_exists($this->cache) AND !is_writable(dirname($this->cache)) )
			OR ( file_exists($this->cache) AND !(is_writable($this->cache)) ) ) {
			$this->cache = NULL;
		}
		// Dane są aktualne?
		elseif( @filemtime($this->cache) < strtotime($this->validity) ) {
			$this->recent = FALSE;
		}
		
		if(!$this->cache OR !$this->recent) {
			$wynik = file_get_contents($this->url, 0, stream_context_create(array(
				'http' => array(
					'header' => 'Referer: http://pogoda.wp.pl/',
					'user_agent' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)',
				)
			)));
			
			if($wynik === FALSE) {
				throw new Exception('Nie udało się pobrać pogody');
			}
			
			// Można zapisać do cache'a
			if($this->cache) {
				// Zapamiętujemy dane
				file_put_contents($this->cache, $wynik);
			}
		}
		else
		{
			$wynik = file_get_contents($this->cache);
		}
		
		return $wynik;
	}
	
	private function pobierzDane() {
		if(!$this->dane) {
			$wynik = json_decode($this->pobierzPlik(), TRUE);
			if(!is_array($wynik) || !isset($wynik['prognoza']) || !isset($wynik['prognoza'][0])) {
				var_dump($wynik);
				throw new Exception('Błędny format danych pogodowych');
			}
			
			$this->dane = $wynik;
		}
		
		return $this->dane;
	}
	
	public function informacje() {
		$dane = $this->pobierzDane();
		return $dane;
	}
	
	public function prognoza($dzien = 0) {
		$dane = $this->pobierzDane();
		return $dane['prognoza'][$dzien];
	}
}

try {

$pogoda = new wpweather();
$dane = $pogoda->informacje();
$prognoza = $pogoda->prognoza();

echo '<html>
<head>
<title>Pogoda</title>
<style type="text/css">
body {
	font-family: Verdana, sans-serif;
	font-size: 10px;
}
h1 {
	font-size: 14px;
	font-weight: bold;
}
.sub {
	font-size: 13px;
}
</style>
</head>
<body>
<h1>Pogoda dla miejscowości '.$dane['nazwa'].' na '.$prognoza['nakiedyopis'].'</h1>

<p><b>Temperatura:</b> '.$prognoza['temp'].'°C</p>

<p><b>Kierunek wiatru:</b> '.$prognoza['zakres'][0]['wiatrkierunek'].'<br/>
<b>Szybkość wiatru:</b> '.$prognoza['zakres'][0]['watrpredkosc'].' km/h</p>

<p><b>Wschód słońca:</b> '.$prognoza['wschodslonca'].'<br/>
<b>Zachód słońca:</b> '.$prognoza['zachodslonca'].'</p>
<hr />
&copy; by <a href="http://jacekk.info">Jacek Kowalski</a>
</body>
</html>';

}
catch(Exception $e) {
	echo 'Błąd: '.$e->getMessage();
}
?>