70 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
class Weather {
 | 
						|
 | 
						|
    public $weather = array();    // Contains full json decoded weather data from database
 | 
						|
    public $coord = array();      // Contains "lat" and "lon"
 | 
						|
    public $conditions = array(); // Contains "id", "main", "description", "icon"
 | 
						|
    public $stats = array();      // Contains "temp", "feels_like", "temp_min", "temp_max", "pressure", "humidity"
 | 
						|
    public $temps = array();      // Contains "current", "min", "max"
 | 
						|
    public $sampletime = null;    // Equals DateTime of when weather was sampled
 | 
						|
    public $sunrise = null;       // Equals DateTime of Sunrise
 | 
						|
    public $sunset = null;        // Equals DateTime of Sunset
 | 
						|
 | 
						|
    const WEATHERURL = "https://api.openweathermap.org/data/3.0/onecall"
 | 
						|
                     . "?lat=" . WEATHERLATTITUDE
 | 
						|
                     . "&lon=" . WEATHERLONGITUDE
 | 
						|
                     . "&appid=" . WEATHERAPIKEY
 | 
						|
                     . "&units=" . WEATHERUNITS;
 | 
						|
 | 
						|
    public static function deleteOldWeather($days = 10) {
 | 
						|
        if ( !is_int($days) ) return false;
 | 
						|
        if ( $days < 0 ) return false;
 | 
						|
        $query = "DELETE FROM " . AppDB::TABLE_WEATHER . " WHERE DATEDIFF(NOW(), sampledate) > :days";
 | 
						|
        $sth = AppDB::getSTH($query);
 | 
						|
        if ( $sth === false ) return false;
 | 
						|
        $sth->bindValue(":days", $days, PDO::PARAM_INT);
 | 
						|
        $sth->execute();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function fetchWeather() {
 | 
						|
        $weather = file_get_contents(Weather::WEATHERURL);
 | 
						|
        $query = "INSERT INTO " . AppDB::TABLE_WEATHER . " (sampledate, weather) VALUES(NOW(), :weather)";
 | 
						|
        $sth = AppDB::getSTH($query);
 | 
						|
        if ( $sth === false ) return false;
 | 
						|
        $sth->bindValue(":weather", $weather, PDO::PARAM_STR);
 | 
						|
        $sth->execute();
 | 
						|
    }
 | 
						|
 | 
						|
    public static function getWeather() {
 | 
						|
        $query = "SELECT weather FROM " . AppDB::TABLE_WEATHER . " ORDER BY sampledate DESC LIMIT 1";
 | 
						|
        $sth = AppDB::getSTH($query);
 | 
						|
        if ( $sth === false ) return false;
 | 
						|
        $sth->execute();
 | 
						|
        if ( $row = $sth->fetch(PDO::FETCH_ASSOC) ) {
 | 
						|
            return json_decode($row['weather'], true);
 | 
						|
        } else {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function __construct() {
 | 
						|
        $weather = self::getWeather();
 | 
						|
        $this->weather = $weather;
 | 
						|
        $this->coord = array("lat" => $weather["lat"], "lon" => $weather["lon"]);
 | 
						|
        $this->conditions = $weather["current"]["weather"][0];
 | 
						|
        $this->stats = $weather["current"];
 | 
						|
        unset($this->stats["weather"]);
 | 
						|
        $this->temps = array("current" => $this->stats["temp"],
 | 
						|
                             "min" => $weather["daily"][0]["temp"]["min"],
 | 
						|
                             "max" => $weather["daily"][0]["temp"]["max"]
 | 
						|
                            );
 | 
						|
        $this->sampletime = new DateTime("@".$weather["current"]["dt"], new DateTimeZone('UTC'));
 | 
						|
        $this->sampletime->setTimeZone(new DateTimeZone(date_default_timezone_get()));
 | 
						|
        $this->sunrise = new DateTime("@".$weather["current"]["sunrise"], new DateTimeZone('UTC'));
 | 
						|
        $this->sunrise->setTimeZone(new DateTimeZone(date_default_timezone_get()));
 | 
						|
        $this->sunset = new DateTime("@".$weather["current"]["sunset"], new DateTimeZone('UTC'));
 | 
						|
        $this->sunset->setTimeZone(new DateTimeZone(date_default_timezone_get()));
 | 
						|
    }
 | 
						|
}
 |