Atenção: Este artigo/tutorial foi escrito em setembro de 2009 e seu conteúdo pode estar desatualizado. Se possível, procure artigos mais recentes.
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:
01 | <?php |
02 |
03 | // Localização |
04 | $cidade = 'Rio de Janeiro' ; // Cidade |
05 | $estado = 'Rio de Janeiro' ; // Estado (sem abreviação!) |
06 | $pais = 'Brazil' ; // País (em inglês) |
07 | $idioma = 'pt-br' ; // Idioma de resposta (pt-br) |
08 |
09 | // URL principal da API |
10 | $googleWeather = 'http://www.google.com/ig/api' ; |
11 |
12 | ?> |
Depois montamos a URL que será usada para chamar as informações:
12 | // Montamos a URL que será chamada |
13 | // Usamos a função urlencode() para substituir caracteres especiais |
14 | $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:
16 | // Pegamos o resultado da API |
17 | $resultado = file_get_contents ( $apiUrl ); |
18 |
19 | // Usamos o SimpleXML para pegar a resposta |
20 | // O SimpleXML precisa receber valores em UTF-8, então usamos o uft8_encode() |
21 | $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:
23 | // Separamos as informações encontradas |
24 | $info = $xml ->xpath( '/xml_api_reply/weather/forecast_information' ); |
25 | $atual = $xml ->xpath( '/xml_api_reply/weather/current_conditions' ); |
26 | $proximos = $xml ->xpath( '/xml_api_reply/weather/forecast_conditions' ); |
E por fim, exibimos as informações em formato HTML:
28 | <h2>Previsão do Tempo - <?php echo date ( 'd/m/Y' , strtotime ( $info [0]->forecast_date[ 'data' ])); ?></h2> |
29 | <p>Cidade: <?php echo $info [0]->city[ 'data' ]; ?></p> |
30 |
31 | <h3>Previsão Atual</h3> |
32 | <table> |
33 | <tr> |
34 | <td><img src= "http://www.google.com<?php echo $atual[0]->icon['data']; ?>" alt= "weather" /></td> |
35 | <td><?php echo $atual [0]->temp_c[ 'data' ]; ?>° C<br /><?php echo $atual [0]->condition[ 'data' ]; ?></td> |
36 | </tr> |
37 | </table> |
38 |
39 | <h3>Próximos dias</h3> |
40 | <table> |
41 | <?php foreach ( $proximos AS $item ) { ?> |
42 | <tr> |
43 | <td><?php echo $item ->day_of_week[ 'data' ];?></td> |
44 | <td><img src= "http://www.google.com<?php echo $item->icon['data']; ?>" alt= "weather" /></td> |
45 | <td><?php echo $item ->low[ 'data' ]; ?>/<?php echo $item ->high[ 'data' ]; ?>° C<br /><?php echo $item ->condition[ 'data' ]; ?></td> |
46 | </tr> |
47 | <?php } ?> |
48 | </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!