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']; ?>° 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']; ?>° C<br /><?php echo $item->condition['data']; ?></td>
</tr>
<?php } ?>
</table>O resultado

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:
- Buscando a Latitude e Longitude de um endereço – Google Maps + PHP – Parte 1
- Pegando dados do Google Analytics via PHP
- Open Search: Adicionando a Busca Rápida no seu site
- Criando um Feed RSS com PHP
- Resultados de busca do Google no seu site
Com as tags API, Banco de Dados, Brasil, Busca, Classe, Clima, Código, Download, File, Google, Google Weather API, HTML, Parâmetros, PHP, PHP 5, PNG, Previsão do Tempo, Rio de Janeiro, Scripts, SimpleXML, SimpleXMLElement, Tutoriais, URL, Variáveis, Web, XML, Yahoo
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo:

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
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!
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
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..
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
@Henrique
Acabei de tentar aqui e consegui fazer funcionar com Belo Horizonte e Porto Alegre… Estranho não?
Tentei transformar em uma função mas não funcionou.
*PS: Não funciona para o interior de minas gerais ~~
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!
Tente usar:
http://www.google.com/ig/api?weather=Sao%20Paulo,Brazil&hl=pt-br
Meu script só funciona com cidade e estado Rio de Janeiro, se eu coloco São Paulo não vai… porque?
@Bruno
Tente “Sao Paulo”…
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?
@Refael
Essa 2ª previsão para “hoje” faz referencia ao final do dia.
Parabéns Thiago. Ótimo script. Sempre visisto seu blog e sempre saio satisfeito dele. Continue assim.
Muito interessante, e util.. Obrigado por compartilhar
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
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
@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…