Google Weather API + PHP

Escrito por: J.P. Aulet el 12 Ago 2011 - Tags: , , , ,

El Tiempo en tu Web con PHP

Si quieres mostrar el tiempo de una ciudad / país en tu página web, puedes usar la API de Google Weather (Tiempo)  que es facil de configurar y cambiar para ajustarlo a tu localización. Puedes realizar consultas sobre la URI de Google con el siguiente formato:

http://www.google.com/ig/api?weather = [nombre de la ciudad]

Por ejemplo, solicitando la siguiente URI:

http://www.google.com/ig/api?weather=barcelona

Esta consulta retornará un archivo XML que se puede procesar facilmente con PHP con el siguiente código:

<?
$xml = simplexml_load_file(‘http://www.google.com/ig/api?weather=barcelona’);
$information = $xml->xpath(“/xml_api_reply/weather/forecast_information”);
$current = $xml->xpath(“/xml_api_reply/weather/current_conditions”);
$forecast_list = $xml->xpath(“/xml_api_reply/weather/forecast_conditions”);
?>
<html>
<head>
<title>Google Weather API</title>
</head>
<body>
<h1><?= print $information[0]->city['data']; ?></h1>
<h2>Hoy:</h2>
<div class=”weather”>
<img src=”<?= ‘http://www.google.com’ . $current[0]->icon['data']?>” alt=”weather”?>
<span class=”condition”>
<?= $current[0]->temp_f['data'] ?>&deg; F,
<?= $current[0]->condition['data'] ?>
</span>
</div>
<h2>Prevision:</h2>
<? foreach ($forecast_list as $forecast) : ?>
<div class=”weather”>
<img src=”<?= ‘http://www.google.com’ . $forecast->icon['data']?>” alt=”weather”?>
<div><?= $forecast->day_of_week['data']; ?></div>
<span class=”condition”>
<?= $forecast->low['data'] ?>&deg; F – <?= $forecast->high['data'] ?>&deg; F,
<?= $forecast->condition['data'] ?>
</span>
</div>
<? endforeach ?>
</body>
</html>

El resultado del código és el siguiente:

google weather api + php

Esperamos que os sirva de ayuda.

Comments Off

  • Nicolás Santibañez

    Muy bueno tu articulo, yo llevo dos dias tratando de obtener estos resultados en español pero no me funciona probe con utf8_encode y nada, tengo dos formas de hacer los mismo y la otra forma me arroja errores de acentos.

    me podrias ayudar? mi correo es: nicolas.santibanez@gmail.com

  • Anónimo

    Hola Nicolás,Grácias por tu comentario. He estado mirando un poco más y he encontrado varias cosas más. Como bien dices debes obligar al navegador a ejecutarse con UTF8, prueba con esto en el inicio de la página: 

            Titulo de la página
       
        Si con esto no te funciona, también he visto que puedes usar la API añadiendo a la ruta el parámetro: “&hl=es” Pero a mi me produce errores de codificación. Por último he visto la siguiente classe construida para trabajar sobre la API de Weather:city_code = $city_code;  
            $this->prefix_images = ’http://’.$this->domain;  
            $this->url = ’http://’.$this->domain.’/ig/api?weather=’.urlencode($this->city_code).’&hl=’.$lang;  
              
            $content = utf8_encode(file_get_contents($this->url));  
              
            $xml = simplexml_load_string($content);  
              
            if(!isset($xml->weather->problem_cause)) {  
                  
                $xml = simplexml_load_string($content);  
      
                $this->city = (string)$xml->weather->forecast_information->city->attributes()->data;  
      
                $this->current_conditions['condition'] = (string)$xml->weather->current_conditions->condition->attributes()->data;  
                $this->current_conditions['temp_f'] = (string)$xml->weather->current_conditions->temp_f->attributes()->data;  
                $this->current_conditions['temp_c'] = (string)$xml->weather->current_conditions->temp_c->attributes()->data;  
                $this->current_conditions['humidity'] = (string)$xml->weather->current_conditions->humidity->attributes()->data;  
                $this->current_conditions['icon'] = $this->prefix_images.(string)$xml->weather->current_conditions->icon->attributes()->data;  
                $this->current_conditions['wind_condition'] = (string)$xml->weather->current_conditions->wind_condition->attributes()->data;  
                  
                foreach($xml->weather->forecast_conditions as $this->forecast_conditions_value) {  
                    $this->forecast_conditions_temp = array();  
                    $this->forecast_conditions_temp['day_of_week'] = (string)$this->forecast_conditions_value->day_of_week->attributes()->data;  
                    $this->forecast_conditions_temp['low'] = (string)$this->forecast_conditions_value->low->attributes()->data;  
                    $this->forecast_conditions_temp['high'] = (string)$this->forecast_conditions_value->high->attributes()->data;  
                    $this->forecast_conditions_temp['icon'] = $this->prefix_images.(string)$this->forecast_conditions_value->icon->attributes()->data;  
                    $this->forecast_conditions_temp['condition'] = (string)$this->forecast_conditions_value->condition->attributes()->data;  
                    $this->forecast_conditions []= $this->forecast_conditions_temp;  
                }  
            } else {  
                $this->is_found = false;  
            }  
        }  
        function getCity() {  
            return $this->city;  
        }  
        function getCurrent() {  
            return $this->current_conditions;  
        }  
        function getForecast() {  
            return $this->forecast_conditions;  
        }  
        function isFound() {  
            return $this->is_found;  
        }  
          
    }  
    $gweather = new GoogleWeatherAPI(‘valencia’,'es’);   
    if($gweather->isFound()) {  
        echo ”; print_r($gweather->getCity()); echo ”;  
        echo ”; print_r($gweather->getCurrent()); echo ”;  
        echo ”; print_r($gweather->getForecast()); echo ”;  
    }  
    ?>  Con esta clase los resultados aparecen es Español, puedes verlo en: http://www.webintenta.com/clase-para-acceder-a-google-weather.htmly el resultado en: http://www.webintenta.com/Files/21082009GoogleWeatherApi.phpCon un poco de combinación de los dos métodos podras mostrarlo en castellano con iconos y todo. Espero que te sirva! Nos vemos

  • Mps

    Hola,

    He estado investigando sobre como utilizar el API con coordenadas geográficas y en mi  opinion longitud y latitud deben de codificarse en formato e6  que utiliza 6 decimales fijos para la parte decimal y sin puntos.

    El resultado de mi investigación y el codigo fuente lo he escrito en mi blog  http://goo.gl/X8Xh8

    Saludos

  • Alberto Corral

    Hay alguna forma de que en vez de Barcelona, Catalonia, te devuelva Cataluña??? O en vez de Castille La Mancha Castilla La Mancha

  • Anónimo

    Hola Alberto y bienvenido!

    Me he estado documentando más y creo que lo que pides no es posible. He intentado forzar la salida en Español pasando el parámetro “&hl=es” en la URL, lo que provoca que los resultados se escriban en Castellano, pero igualmente las localizaciones siguen apareciendo cómo ‘Spain’. Creo que Google usa la nomenclatura estándard del inglés para la localización y no permite otra. 

    Debes tener en cuenta que la API de Google Weather no es oficial y no está muy soportada. Si quieres usar una API más bien documentada y oficial para representar el tiempo, puede que te sirva la de Yahoo!:  http://developer.yahoo.com/weather/ .

    Sinó siempre puedes usar la librería ‘GoogleWeatherApi’ que devuelve el resultado cómo un array de valores y tratar la salida de la localización para traducirla, no creo que sea muy difícil. 

    Aún así seguiré investigando un poco más. 

blog comments powered by Disqus