<?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->url0stream_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();
}
?>