/**
  * @param Location $location
  * @return Weather
  * @throws WeatherProviderException
  */
 public function fetch(Location $location) : Weather
 {
     $client = new Client(['base_uri' => 'http://api.openweathermap.org/data/2.5/', 'timeout' => 2.0]);
     $response = $client->request('GET', 'weather?q=' . $location->getCity() . '&appid=' . $this->getAPI() . '&units=metric');
     $data = $response->getBody();
     if ($data == NULL) {
         throw new WeatherProviderException('No data received from OpenWeatherMap Provider');
     }
     return $this->parser->parse($data);
 }
 /**
  * @param Location $location
  * @return Weather
  * @throws WeatherProviderException
  */
 public function fetch(Location $location) : Weather
 {
     $BASE_URL = "http://query.yahooapis.com/v1/public/yql";
     $yql_query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1)
       where text = "' . $location->getCity() . '") and u="c"';
     $yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json";
     $session = curl_init($yql_query_url);
     curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
     $data = curl_exec($session);
     if ($data == NULL) {
         throw new WeatherProviderException('No data received from Yahoo Provider');
     }
     return $this->parser->parse($data);
 }
 /**
  * @param Location $location
  * @return Weather
  */
 public function fetch(Location $location) : Weather
 {
     $fileDirectory = 'cached/';
     if (!is_dir($fileDirectory)) {
         mkdir($fileDirectory, 0775, true);
     }
     $filename = $fileDirectory . $location->getCity() . '.txt';
     if (file_exists($filename)) {
         $file = file($filename);
         $dateNow = new \DateTime('now');
         $dateNow = $dateNow->getTimestamp();
         $dateThen = $file[0];
         if (intval($dateNow) - intval($dateThen) >= $this->ttl) {
             //printf("New values were taken:");
             return $this->writeToFile($this->ProviderFetchWeather($location), $filename);
         } else {
             //printf("Information from cached file: sena: %d  dabar %d laiko skirtumas: %d", $dateThen, $dateNow, $this->ttl);
             //var_dump($filename);
             return new Weather(trim($file[1]), trim($file[2]), $file[3]);
         }
     }
     return $this->writeToFile($this->ProviderFetchWeather($location), $filename);
 }