In this tutorial, we are going to create a PHP application to display weather forecast information using an API. I have used OpenWeatherMap service to implement this with PHP. We will just grab the weather information provided by the API and display it in the application.
This is one of the best API service that provides weather forecast. It provides tremendous volume of weather data regularly. It is a free service with limited access. For basic usage, it should be sufficient and for advanced you may have to pay for it. Integrating this API with a PHP application is easy. The following three steps are used for the integration.
By clicking the below link, the cities list will be downloaded in a compressed format. Unzip the file and get the id of the city/state.
After unzipping, the file will have the JSON formatted data containing an array of locations. Each array item contains the geodata like latitude, longitude, country, city/state, city id.
This is the PHP code to request the OpenWeatherMap service to get the weather forecasts. While sending the request, the API key and the city id is sent with request URL query string.
I used PHP CURL to send the API request. The CURL response will be in a JSON format. By decoding the JSON response, we can get the weather data and populate it in the browser.
<?php $apiKey = "API KEY"; $cityId = "CITY ID"; $googleApiUrl = "http://api.openweathermap.org/data/2.5/weather?id=" . $cityId . "&lang=en&units=metric&APPID=" . $apiKey; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $googleApiUrl); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response); $currentTime = time(); ?>
This HTML code is used to display the weather forecast by decoding the JSON object response. In this section, we access the location, weather description, icon, min-max ranges of the temperature, humidity and wind speed.
<!doctype html> <html> <head> <title>Forecast Weather using OpenWeatherMap with PHP</title> </head> <body> <div class="report-container"> <h2><?php echo $data->name; ?> Weather Status</h2> <div class="time"> <div><?php echo date("l g:i a", $currentTime); ?></div> <div><?php echo date("jS F, Y",$currentTime); ?></div> <div><?php echo ucwords($data->weather->description); ?></div> </div> <div class="weather-forecast"> <img src="http://openweathermap.org/img/w/<?php echo $data->weather->icon; ?>.png" class="weather-icon" /> <?php echo $data->main->temp_max; ?>°C<span class="min-temperature"><?php echo $data->main->temp_min; ?>°C</span> </div> <div class="time"> <div>Humidity: <?php echo $data->main->humidity; ?> %</div> <div>Wind: <?php echo $data->wind->speed; ?> km/h</div> </div> </div> </body> </html>