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:

View Comments

  1. Po thiago..você me deu uma ideia muito interessante..
    Vi alguns api muito bonitos de clima no Net vibes..
    Vou tentar desenvolver algo..se conseguir posto um feedback aqui!
    abraços

  2. Muito bom a matéria!
    Eu instalei já esse script em mais de 10 sites e todos estão tudo ok!
    Não sei porque tem tanta gente reclamando….
    Muito obrigado thiago!

  3. Henrique, a API do Google não está retornando a condição do tempo e o ícone para o dia atual. Copiei teu script na íntegra pra testar e não aparece. O que será?
    Outra coisa, eu queria personalizar meus ícones, queria saber quais as condições (sol, nublado, chovoso.. ) pra compor as imagens, mas não sei com tirar da API.
    Obrigado

  4. Crissbrito disse:

    Ao pessoal que ainda não conseguiu: cidades de nome composto substituam o espaço por hífen sao-paulo, sao-sebastiao, presidente-venceslau, et cetera..

  5. Não funciona!

    Perdi 3 dias tentando de todas as formas mostrar a previsão para as cidades de São Paulo, Belo Horizonte, PortoAlegre, etc….

    Abandone a idéia.

    Henrique

  6. Tyler Vortex disse:

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

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

  7. 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!

  8. Bruno disse:

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

  9. 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?

  10. Eduardo Moreira Vilarinho disse:

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

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

  12. 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

  13. 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… ;)

blog comments powered by Disqus