Datos meteorológicos en XML de OpenWeatherMap

Código fuente PHP

// 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>";

Ejecución del código PHP

XML recibido correctamente

XML recibido

<?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-05-19T04:55:01" set="2024-05-19T19:44:59">
</sun>
</city>
<temperature value="14.25" min="13.25" max="15.71" unit="celsius">
</temperature>
<feels_like value="13.9" unit="celsius">
</feels_like>
<humidity value="83" unit="%">
</humidity>
<pressure value="1011" unit="hPa">
</pressure>
<wind>
<speed value="2.24" unit="m/s" name="Light breeze">
</speed>
<gusts value="4.02">
</gusts>
<direction value="4" code="N" name="North">
</direction>
</wind>
<clouds value="96" name="overcast clouds">
</clouds>
<visibility value="10000">
</visibility>
<precipitation mode="no">
</precipitation>
<weather number="804" value="nubes" icon="04d">
</weather>
<lastupdate value="2024-05-19T12:48:05">
</lastupdate>
</current>

XML como objeto SimpleXMLElement

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-05-19T04:55:01
                            [set] => 2024-05-19T19:44:59
                        )

                    [0] => 

                )

        )

    [temperature] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 14.25
                    [min] => 13.25
                    [max] => 15.71
                    [unit] => celsius
                )

            [0] => 

        )

    [feels_like] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 13.9
                    [unit] => celsius
                )

            [0] => 

        )

    [humidity] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 83
                    [unit] => %
                )

            [0] => 

        )

    [pressure] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 1011
                    [unit] => hPa
                )

            [0] => 

        )

    [wind] => SimpleXMLElement Object
        (
            [speed] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [value] => 2.24
                            [unit] => m/s
                            [name] => Light breeze
                        )

                    [0] => 

                )

            [gusts] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [value] => 4.02
                        )

                    [0] => 

                )

            [direction] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [value] => 4
                            [code] => N
                            [name] => North
                        )

                    [0] => 

                )

        )

    [clouds] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 96
                    [name] => overcast clouds
                )

            [0] => 

        )

    [visibility] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 10000
                )

            [0] => 

        )

    [precipitation] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [mode] => no
                )

            [0] => 

        )

    [weather] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [number] => 804
                    [value] => nubes
                    [icon] => 04d
                )

            [0] => 

        )

    [lastupdate] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [value] => 2024-05-19T12:48:05
                )

            [0] => 

        )

)
1

Datos recibidos

nubes

Ciudad: Oviedo

País: ES

Coordenadas: Longitud -5.8448 grados

Coordenadas: Latitud 43.3603 grados

Temperatura: 14.25 grados Celsius

Temperatura mínima: 13.25 grados Celsius

Temperatura máxima: 15.71 grados Celsius

Temperatura (unidades): celsius

Humedad: 83 %

Presión: 1011 hPa

Velocidad del viento: 2.24 metros/segundo

Tipo de viento: Light breeze

Dirección del viento: 4 grados

Orientación del viento: N

Nombre del viento: North

Nubosidad: 96 %. Descripción: overcast clouds

Visibilidad: 10000 metros

Estado del tiempo: nubes

Amanece: 19/05/2024 4:55:01+02:00 Europe/Madrid

Oscurece: 19/05/2024 19:44:59+02:00 Europe/Madrid

Última actualización: 19/05/2024 12:48:05+02:00 Europe/Madrid