Publicidade (Anuncie Aqui)

Mostrando a Previsão do Tempo com PHP

Mostrando a Previsão do Tempo com PHP

Hoje vou mostrar pra vocês como é incrivelmente simples mostrar uma previsão do tempo no seu site usando a API de Previsão do Tempo do Google (Google Weather API).

Diferente da API de previsão do tempo do Yahoo, na do Google você identifica a cidade pelo o seu nome, não por um código alfa-numérico, o que deixa o serviço bem mais fácil e customizável… Você pode, por exemplo, mostrar a previsão do tempo da cidade que o visitante informou na hora do cadastro, é muito bom.

Outra diferença primordial entre as duas APIs é que a do Yahoo retorna apenas a previsão do tempo do dia, e a do Google retorna a previsão do tempo do dia e dos próximos três dias.

A resposta do Google vem em formato XML e vamos usar a classe SimpleXML (PHP 5) para manipular esses dados.

A URL da API

O script todo funciona de uma forma bem simples: você chama a URL da API informando a cidade, estado e o idioma de retorno e ele te responde com os dados no formato XML. A URL que iremos usar de exemplo é essa:

http://www.google.com/ig/api?weather=Rio de Janeiro,Rio de Janeiro,Brazil&hl=pt-br

Repare que passamos dois parâmetros na URL, o “weather” que é onde informaos a cidade, estado e país (Rio de Janeiro, Rio de Janeiro, Brazil)… Antes que você me chame de burro, Brasil lá fora se escreve com Z e não com S… E temos o segundo parâmetro é o “hl” que é o idioma no qual queremos a resposta (pt-br).

O Script

Primeiro nós definimos algumas variáveis que serão usadas pelo script:

<?php

// Localização
$cidade = 'Rio de Janeiro'; // Cidade
$estado = 'Rio de Janeiro'; // Estado (sem abreviação!)
$pais = 'Brazil'; // País (em inglês)
$idioma = 'pt-br'; // Idioma de resposta (pt-br)

// URL principal da API
$googleWeather = 'http://www.google.com/ig/api';

?>

Depois montamos a URL que será usada para chamar as informações:

// Montamos a URL que será chamada
// Usamos a função urlencode() para substituir caracteres especiais
$apiUrl = $googleWeather . '?weather=' . urlencode($cidade) . ',' . urlencode($estado) . ',' . urlencode($pais) . '&hl=' . $idioma;

Agora nós iremos pegar o resultado da API e passá-lo (em codificação UFT-8) para o SimpleXML:

// Pegamos o resultado da API
$resultado = file_get_contents($apiUrl);

// Usamos o SimpleXML para pegar a resposta
// O SimpleXML precisa receber valores em UTF-8, então usamos o uft8_encode()
$xml = simplexml_load_string(utf8_encode($resultado));

Agora nós já temos todas as informações, vamos separá-las usando o método xpath() do SimpleXML:

// Separamos as informações encontradas
$info = $xml->xpath('/xml_api_reply/weather/forecast_information');
$atual = $xml->xpath('/xml_api_reply/weather/current_conditions');
$proximos = $xml->xpath('/xml_api_reply/weather/forecast_conditions');

E por fim, exibimos as informações em formato HTML:

<h2>Previsão do Tempo - <?php echo date('d/m/Y', strtotime($info[0]->forecast_date['data'])); ?></h2>
<p>Cidade: <?php echo $info[0]->city['data']; ?></p>

<h3>Previsão Atual</h3>
<table>
	<tr>
		<td><img src="http://www.google.com<?php echo $atual[0]->icon['data']; ?>" alt="weather" /></td>
		<td><?php echo $atual[0]->temp_c['data']; ?>&deg; C<br /><?php echo $atual[0]->condition['data']; ?></td>
	</tr>
</table>

<h3>Próximos dias</h3>
<table>
	<?php foreach ($proximos AS $item) { ?>
	<tr>
		<td><?php echo $item->day_of_week['data'];?></td>
		<td><img src="http://www.google.com<?php echo $item->icon['data']; ?>" alt="weather" /></td>
		<td><?php echo $item->low['data']; ?>/<?php echo $item->high['data']; ?>&deg; C<br /><?php echo $item->condition['data']; ?></td>
	</tr>
	<?php } ?>
</table>

O resultado

previsao

O Script Completo

Faça o download do script completo aqui: http://blog.thiagobelem.net/arquivos/2009/09/gwa.txt

Considerações finais

Claro que se você fizer seu PHP buscar os dados na API todas as vezes que for exibir a previsão do tempo o seu site ficará lento… É altamente recomendável que você salve esses dados em um banco de dados ou até um arquivo XML dentro do site e use essa fonte de dados (interna) para o site.

Espero que tenham gostado! :)

Abraços!

Baseado em: Showing the weather with PHP and Google Weather API

Você também vai gostar de ler:

Postado em PHP, Tutoriais

Com as tags , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

13 Comentários ou trackbacks

  1. Tyler Vortex disse:

    Tentei transformar em uma função mas não funcionou.

    *PS: Não funciona para o interior de minas gerais ~~

  2. não funciona para a cidade de São Paulo. já tentei “São Paulo” e “Sao Paulo”…… ! qual deve se a maneira de chamar a cidade de SP!

  3. Bruno disse:

    Meu script só funciona com cidade e estado Rio de Janeiro, se eu coloco São Paulo não vai… porque?

  4. Rafael Alves disse:

    Oi Thiago, bom dia!
    Matéria muito boa e útil.
    Ao testar reparei que aparece a previsão do tempo de hoje e para os próximos dias, porém, por exemplo, hoje é sexta e em Guarulhos/SP marca como 18C e Nublado e logo abaixo, no Próximos dias, aparece sexta novamente e com Previsão do tempo diferente!?
    Acontece o mesmo com vocês? Duas previsões diferentes para o mesmo dia?

  5. Eduardo Moreira Vilarinho disse:

    Parabéns Thiago. Ótimo script. Sempre visisto seu blog e sempre saio satisfeito dele. Continue assim.

  6. Muito interessante, e util.. Obrigado por compartilhar ;)

  7. Joabe Brasil disse:

    Thiago, muito bacana o script, porem algumas cidades pequenas como a minha ‘Barreiras-ba’ ele não tem dados…diferente do Yahoo que é mais completo, você poderia cria um tuto também sobre o Yahoo Weather.

    Grato,
    Joabe Pinheiro

  8. Joe disse:

    Viva! Muito boa esta tua matéria, a minha pergunta é, como poderei personalizar isto de modo a dar em outra parte do mundo, neste caso em Portugal.

    Obrigado

    • Thiago Belem disse:

      @Joe
      Não sei se você leu o artigo todo ou acompanhou o desenvolvimento do código mas as quarto primeiras linhas do código são para a definição do local e do idioma… ;)

Deixe um comentário

XHTML: Você pode usar essas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Atenção: O seu comentário precisará ser aprovado antes de ser publicado

Trackbacks e Pings

  1. [...] This post was mentioned on Twitter by Thiago Belem. Thiago Belem said: Artigo: Mostrando a Previsão do Tempo com PHP http://bit.ly/93ePR [...]