// 101-CodigoPHP.php
// Versión 1.0 10/12/2017 Juan Manuel Cueva Lovelle. Universidad de Oviedo
$apikey = "47b790fd0fc41878c80c57c9846132cb";
$ciudad = "Oviedo";
$codigoPais ="ES";
$formato = "&mode=xml";
$unidades = "&units=metric";
$idioma = "&lang=es";
$url = "http://api.openweathermap.org/data/2.5/weather?q=" . $ciudad . "," . $codigoPais . $formato . $unidades . $idioma . "&APPID=" . $apikey;
// Se solicita el archivo XML de la url que se pasa como parámetro y se recibe como un string
$datos = file_get_contents($url);
if($datos==null) {
echo "<h3>Error en el archivo XML recibido</h3>";
}
else {
echo "<h3>XML recibido correctamente</h3>";
}
echo "<h2>XML recibido</h2>";
$datos =preg_replace("/>\s*</",">\n<",$datos);
echo '<pre>', htmlentities($datos), '</pre>';
// Se convierte el string en un objeto XML
$xml = new SimpleXMLElement($datos);
echo "<h2>XML como objeto SimpleXMLElement</h2>";
echo '<pre>', print_r($xml), '</pre>';
echo "<h2>Datos recibidos</h2>";
$icono = $xml->weather['icon'];
$URLicono = "http://openweathermap.org/img/w/" . $icono . ".png";
$descripcion = $xml->weather['value'];
echo "<img src = '$URLicono' alt = '$descripcion' >";
echo "<p>Ciudad: {$xml->city['name']}</p>";
echo "<p>País: {$xml->city->country}</p>";
echo "<p>Coordenadas: Longitud {$xml->city->coord['lon']} grados</p>";
echo "<p>Coordenadas: Latitud {$xml->city->coord['lat']} grados</p>";
echo "<p>Temperatura: {$xml->temperature['value']} grados Celsius</p>";
echo "<p>Temperatura mínima: {$xml->temperature['min']} grados Celsius</p>";
echo "<p>Temperatura máxima: {$xml->temperature['max']} grados Celsius</p>";
echo "<p>Temperatura (unidades): {$xml->temperature['unit']} </p>";
echo "<p>Humedad: {$xml->humidity['value']} {$xml->humidity['unit']} </p>";
echo "<p>Presión: {$xml->pressure['value']} {$xml->pressure['unit']} </p>";
echo "<p>Velocidad del viento: {$xml->wind->speed['value']} metros/segundo</p>";
echo "<p>Tipo de viento: {$xml->wind->speed['name']} </p>";
echo "<p>Dirección del viento: {$xml->wind->direction['value']} grados</p>";
echo "<p>Orientación del viento: {$xml->wind->direction['code']} </p>";
echo "<p>Nombre del viento: {$xml->wind->direction['name']} </p>";
echo "<p>Nubosidad: {$xml->clouds['value']} %. Descripción: {$xml->clouds['name']} </p>";
echo "<p>Visibilidad: {$xml->visibility['value']} metros </p>";
echo "<p>Estado del tiempo: {$xml->weather['value']} </p>";
$fechaHoraAmanecer = new DateTime($xml->city->sun['rise'], new DateTimeZone('Europe/Madrid'));
echo "<p>Amanece: " . $fechaHoraAmanecer->format("d/m/Y G:i:sP e") . "</p>";
$fechaHoraOscurecer = new DateTime($xml->city->sun['set'], new DateTimeZone('Europe/Madrid'));
echo "<p>Oscurece: " . $fechaHoraOscurecer->format("d/m/Y G:i:sP e") . "</p>";
$fechaHoraActualizacion = new DateTime($xml->lastupdate['value'], new DateTimeZone('Europe/Madrid'));
echo "<p>Última actualización: " .$fechaHoraActualizacion->format("d/m/Y G:i:sP e") ."</p>";
<?xml version="1.0" encoding="UTF-8"?> <current> <city id="3114711" name="Oviedo"> <coord lon="-5.8448" lat="43.3603"> </coord> <country>ES</country> <timezone>7200</timezone> <sun rise="2024-09-01T05:47:53" set="2024-09-01T18:59:08"> </sun> </city> <temperature value="22.23" min="20.26" max="22.63" unit="celsius"> </temperature> <feels_like value="22.57" unit="celsius"> </feels_like> <humidity value="79" unit="%"> </humidity> <pressure value="1015" unit="hPa"> </pressure> <wind> <speed value="0.45" unit="m/s" name="Calm"> </speed> <gusts value="1.34"> </gusts> <direction value="42" code="NE" name="NorthEast"> </direction> </wind> <clouds value="71" name="broken clouds"> </clouds> <visibility value="10000"> </visibility> <precipitation mode="no"> </precipitation> <weather number="803" value="muy nuboso" icon="04d"> </weather> <lastupdate value="2024-09-01T12:14:14"> </lastupdate> </current>
SimpleXMLElement Object ( [city] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 3114711 [name] => Oviedo ) [coord] => SimpleXMLElement Object ( [@attributes] => Array ( [lon] => -5.8448 [lat] => 43.3603 ) [0] => ) [country] => ES [timezone] => 7200 [sun] => SimpleXMLElement Object ( [@attributes] => Array ( [rise] => 2024-09-01T05:47:53 [set] => 2024-09-01T18:59:08 ) [0] => ) ) [temperature] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 22.23 [min] => 20.26 [max] => 22.63 [unit] => celsius ) [0] => ) [feels_like] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 22.57 [unit] => celsius ) [0] => ) [humidity] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 79 [unit] => % ) [0] => ) [pressure] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 1015 [unit] => hPa ) [0] => ) [wind] => SimpleXMLElement Object ( [speed] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 0.45 [unit] => m/s [name] => Calm ) [0] => ) [gusts] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 1.34 ) [0] => ) [direction] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 42 [code] => NE [name] => NorthEast ) [0] => ) ) [clouds] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 71 [name] => broken clouds ) [0] => ) [visibility] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 10000 ) [0] => ) [precipitation] => SimpleXMLElement Object ( [@attributes] => Array ( [mode] => no ) [0] => ) [weather] => SimpleXMLElement Object ( [@attributes] => Array ( [number] => 803 [value] => muy nuboso [icon] => 04d ) [0] => ) [lastupdate] => SimpleXMLElement Object ( [@attributes] => Array ( [value] => 2024-09-01T12:14:14 ) [0] => ) ) 1
Ciudad: Oviedo
País: ES
Coordenadas: Longitud -5.8448 grados
Coordenadas: Latitud 43.3603 grados
Temperatura: 22.23 grados Celsius
Temperatura mínima: 20.26 grados Celsius
Temperatura máxima: 22.63 grados Celsius
Temperatura (unidades): celsius
Humedad: 79 %
Presión: 1015 hPa
Velocidad del viento: 0.45 metros/segundo
Tipo de viento: Calm
Dirección del viento: 42 grados
Orientación del viento: NE
Nombre del viento: NorthEast
Nubosidad: 71 %. Descripción: broken clouds
Visibilidad: 10000 metros
Estado del tiempo: muy nuboso
Amanece: 01/09/2024 5:47:53+02:00 Europe/Madrid
Oscurece: 01/09/2024 18:59:08+02:00 Europe/Madrid
Última actualización: 01/09/2024 12:14:14+02:00 Europe/Madrid