]> git.mxchange.org Git - friendica-addons.git/blob - curweather/vendor/cmfcmf/openweathermap-php-api/Cmfcmf/OpenWeatherMap/WeatherForecast.php
minor additions to the README
[friendica-addons.git] / curweather / vendor / cmfcmf / openweathermap-php-api / Cmfcmf / OpenWeatherMap / WeatherForecast.php
1 <?php
2 /**
3  * OpenWeatherMap-PHP-API — A php api to parse weather data from http://www.OpenWeatherMap.org .
4  *
5  * @license MIT
6  *
7  * Please see the LICENSE file distributed with this source code for further
8  * information regarding copyright and licensing.
9  *
10  * Please visit the following links to read about the usage policies and the license of
11  * OpenWeatherMap before using this class:
12  *
13  * @see http://www.OpenWeatherMap.org
14  * @see http://www.OpenWeatherMap.org/terms
15  * @see http://openweathermap.org/appid
16  */
17
18 namespace Cmfcmf\OpenWeatherMap;
19
20 use Cmfcmf\OpenWeatherMap;
21 use Cmfcmf\OpenWeatherMap\Util\City;
22 use Cmfcmf\OpenWeatherMap\Util\Sun;
23
24 /**
25  * Weather class returned by Cmfcmf\OpenWeatherMap->getWeather().
26  *
27  * @see Cmfcmf\OpenWeatherMap::getWeather() The function using it.
28  */
29 class WeatherForecast implements \Iterator
30 {
31     /**
32      * A city object.
33      *
34      * @var Util\City
35      */
36     public $city;
37
38     /**
39      * A sun object
40      *
41      * @var Util\Sun
42      */
43     public $sun;
44
45     /**
46      * The time of the last update of this weather data.
47      *
48      * @var \DateTime
49      */
50     public $lastUpdate;
51
52     /**
53      * An array of {@link WeatherForecast} objects.
54      *
55      * @var array
56      *
57      * @see WeatherForecast The WeatherForecast class.
58      */
59     private $forecasts;
60
61     /**
62      * @internal
63      */
64     private $position = 0;
65
66     /**
67      * Create a new Forecast object.
68      *
69      * @param        $xml
70      * @param string $units
71      * @param int    $days How many days of forecast to receive.
72      *
73      * @internal
74      */
75     public function __construct($xml, $units, $days)
76     {
77         $this->city = new City(-1, $xml->location->name, $xml->location->location['longitude'], $xml->location->location['latitude'], $xml->location->country);
78         $this->sun = new Sun(new \DateTime($xml->sun['rise']), new \DateTime($xml->sun['set']));
79         $this->lastUpdate = new \DateTime($xml->meta->lastupdate);
80
81         $counter = 0;
82         foreach ($xml->forecast->time as $time) {
83             $forecast = new Forecast($time, $units);
84             $forecast->city = $this->city;
85             $this->forecasts[] = $forecast;
86
87             $counter++;
88             // Make sure to only return the requested number of days.
89             if ($days <= 5 && $counter == $days * 8) {
90                 break;
91             } else if ($days > 5 && $counter == $days) {
92                 break;
93             }
94         }
95     }
96
97     /**
98      * @internal
99      */
100     public function rewind()
101     {
102         $this->position = 0;
103     }
104
105     /**
106      * @internal
107      */
108     public function current()
109     {
110         return $this->forecasts[$this->position];
111     }
112
113     /**
114      * @internal
115      */
116     public function key()
117     {
118         return $this->position;
119     }
120
121     /**
122      * @internal
123      */
124     public function next()
125     {
126         ++$this->position;
127     }
128
129     /**
130      * @internal
131      */
132     public function valid()
133     {
134         return isset($this->forecasts[$this->position]);
135     }
136 }