Получение информации о погоде через OpenWeatherMap

12.09.2017

Пример получения информации о погоде на php

Выбран именно OpenWeatherMap, т.к. его API бесплатные в отличии от Яндекс Погода и Гисметео.

class.weather.php (Download)

 <?

  // OpenWeatherMap
  class soWeather
  {
    const ApiURL         = 'http://api.openweathermap.org/data/2.5/';
    const ApiKey         = 'XXX';
    
    /**
	* Возвращает все данные о текущей погоде
	* 
	* https://openweathermap.org/current#current_JSON
	* 
	* @param int $id_city
	* 
	* @return object
	*/
    protected function _getCurrentWeatherAll($id_city)
    {
      // imperial metric
      $s = file_get_contents(self::ApiURL.'weather?id='.$id_city.'&units=metric&appid='.self::ApiKey);
      return json_decode($s);
    }

    /**
	* Возвращает нужные данные о текущей погоде
	* 
	* @param int $id_city
	* 
	* @return object
	*/
    protected function _getCurrentWeather($id_city)
    {
      $oRet = new stdClass();
      
      $oTMP = $this->_getCurrentWeatherAll($id_city);
      $oRet->temperature = $oTMP->main->temp;
      $oRet->pressure = $oTMP->main->pressure * 0.75008;
      
      return $oRet;
    }

    /**
	* Возвращает все данные о прогнозе погоды 
	* 
	* http://openweathermap.org/forecast5
	* 
	* @param int $id_city
	* 
	* @return object
	*/
    protected function _getForecastALL($id_city)
    {
      // imperial metric
      $s = file_get_contents(self::ApiURL.'forecast?id='.$id_city.'&units=metric&appid='.self::ApiKey);
      return json_decode($s);
    }

    /**
	* Возвращает нужные данные о прогнозе погоды 
	* 
	* @param int $id_city
	* 
	* @return array
	*/
    protected function _getForecast($id_city)
    {
      $aRet = array();

      $oForecast = $this->_getForecastALL($id_city);
      $i = 0;
      foreach($oForecast->list as $oRow)
	  {
	    $oTMP = new stdClass();
	    $oTMP->dt = date("H:i:s", $oRow->dt);
        $oTMP->temperature = $oRow->main->temp;
        $oTMP->pressure = $oRow->main->pressure * 0.75008;
		
		$aRet[] = $oTMP;
		
		if($i > 4)
		{
		  break;
		}
		$i++;
/*
	    echo '<pre>';
		print_r($oRow);
		echo '</pre>';
*/
	  }

      return $aRet;
    }

    /**
	* Возвращает все данные
	* 
	* @return object
	*/
    public function getWeatherData()
    {
      //$id = 524901; // Moscow
      $id = 523812; // Mytishchi

      //$oRet = $this->_getCurrentWeather($id);
      $oRet = $this->_getForecast($id);

      return $oRet;
      
    }
    
  }

index.php (Download)

 <?php

error_reporting(E_ALL);
ini_set('display_errors', 'On');

      require_once(__DIR__.'/class.weather.php');
      $oWeather = new soWeather();

echo '<pre>';
print_r($oWeather->getWeatherData());
echo '</pre>';


Пометки: Температура, давление, погода api
Яндекс.Метрика