Bem, como alguns já sabem, o topo deste blog muda constantemente de paisagem de acordo com a previsão do tempo de minha cidade (Natal/RN). Mas como fiz isso? PHP!
A seguir detalho os passos…
Primeiramente veremos de onde pegar as informações do tempo. Escolhi o tempoagora, pois ao fim do endereço insere-se a cidade de onde deseja buscar a previsão, facilitando assim nosso trabalho.
No meu caso seria http://tempoagora.uol.com.br/previsaodotempo.html/brasil/Natal-RN.
Agora vamos ao que interessa.
O Script completo desse tutorial fica assim:
<?php //Definimos a cidade $cidade = 'Natal-RN'; //Capturamos o conteudo do site $file = file_get_contents("http://tempoagora.uol.com.br/previsaodotempo.html/brasil/".$cidade); //Capturamos a imagem $img = explode("mini-",$file); $img = explode(".gif",$img[2]); switch($img[0]) { case 'PI': print "Pouco ensolarado"; break; case 'CC': print "Céu Claro"; break; case 'PC': print "Pancadas de chuva"; break; case 'NC': print "Nublado com chuva"; break; case 'CH': print "Chuvoso"; break; case 'NB': print "Nublado"; break; case 'PN': print "Poucas núvens"; break; default: print "Céu claro"; break; } ?>
Agora vamos às explicações…
//Definimos a cidade $cidade = 'Natal-RN'; //Capturamos o conteudo do site $file = file_get_contents("http://tempoagora.uol.com.br/previsaodotempo.html/brasil/".$cidade);
Neste trecho de código, primeiramente, definimos a cidade à qual estamos interessados em saber a previsão do tempo. A seguir, utilizando-se da função file_get_contents, capturamos o conteúdo da página como um arquivo. Repare que a variável $cidade aparece concatenada em seguida com o endereço, completando assim o mesmo.
//Dividimos o conteudo em partes $sep = explode("&deg;C",$file); //Capturamos a imagem $img = explode("mini-",$file); $img = explode(".gif",$img[2]);
De posse dos dados do conteúdo site na variável $file, iremos tratá-lo agora. Com o site aberto, percebemos que uma imagem é apresentada, com o desenho da previsão (como neste site). É em cima dela que iremos trabalhar.
Clicando em ‘exibir imagem’ com o botão direito vemos que o endereço segue um padrão, como por exemplo mini-NB.gif, para nublado. E é isso que vem depois do ‘mini-’ que irá nos interessar.
Com o auxílio da função explode, quebramos o conteúdo de $file cada vez que aparecer ‘mini-’, e depois fazemos outro explode, mas dessa vez com $img[2], cada vez que encontrarmos ‘.gif’, que é para restar apenas as duas letras correspondentes à previsão, como ‘NB’ por exemplo.
Pronto! Agora para finalizar:
switch($img[0]) { case 'PI': print "Pouco ensolarado"; break; case 'CC': print "Céu Claro"; break; case 'PC': print "Pancadas de chuva"; break; case 'NC': print "Nublado com chuva"; break; case 'CH': print "Chuvoso"; break; case 'NB': print "Nublado"; break; case 'PN': print "Poucas núvens"; break; default: print "Céu claro"; break; }
No passo anterior fizemos um explode na imagem, e gravamos o resultado na variável $img. Esta variável é um vetor de Strings, e se imprimirmos a posição zero desse vetor, teremos o resultado que desejamos.
Todas as possíveis situações são: PI, CC, PC, NC, CH, NB e PN. Como podem ver, fiz apenas um switch com $img[0], mas vocês podem adaptar da forma que desejarem.
Bom isso é só. Espero ter explicado direitinho.
Quaisquer dúvidas, podem perguntar nos comentários. Estarei à disposição.
#1 by Ale on 20 de novembro de 2008
Vc viu que o gmail faz tipo isso tb? Nos temas…
#2 by arthur on 20 de novembro de 2008
Foi… eu percebí isso também…
#3 by Bruno Fumagally on 2 de dezembro de 2008
Opa amigo, poderia dar uam explicação breve de como pegar mais dados, como por exemplo a temperatura máxima e mínima por exemplo…
#4 by arthur on 2 de dezembro de 2008
Olá Bruno,
Para mostrar mais dados devemos “quebrar” o arquivo mais vezes. Vou dar o exemplo das temperaturas máximas e mínimas como você citou.
Acrescente $temp = explode(”° ;C”,$file); em qualquer lugar do arquivo. Isso faz com que o arquivo seja dividido a cada ºC. Feito isso, faça um teste. Escreva echo $temp[3]; e verá que terminará na temperatura mínima, como 25 por exemplo. Mas terá algo mais atrás. Para pegar só a temperatura basta utilizar substr($temp[3],-2), negativo pois pega duas posições de trás para frente. Então basta dar um echo substr($temp[3],-2).”° ;C”; para escrever a temperatura mínima. De forma análoga é feita para a máxima, mas nesse caso usa-se $temp[4]. Perceba que escrevi ° ; com um espaço antes do ponto e vírgula, mas quando for escrever terá que juntá-los.
Qualquer dúvida pode perguntar.
abraço
#5 by Bruno Fumagally on 3 de dezembro de 2008
Rapaiz!!! Valew mesmo funciono perfeitamente… só uma dúvida… ele gera é um array correto pra você então selecionar qual exibir como exemplo $temp[1]… $temp[2]… existe alguma forma de listar todos os arrays criados?
#6 by arthur on 3 de dezembro de 2008
Que bom que deu certo.
Ele gera um array sim. Para listar tudo criado utilizo var_dump ou então print_r. Não sei se é isso que está querendo…
#7 by Bruno Fumagally on 3 de dezembro de 2008
Caraca viu….!!! agora sim… sei exatamente como coletar os dados de página esternas, muito obrigado amigo… qualquer coisa que precise também e que eu possa ajudar é só add meu MSn aí… Valew
#8 by arthur on 3 de dezembro de 2008
Beleza Bruno! Que bom que ajudei. Adicionei você aqui no msn.
Abração, e obrigado pela visita.
#9 by Djalma Chagas Bina on 22 de dezembro de 2008
Muito bom e funcional seu script,Artur ! gostaria de saber como eu poderia acrescentar outros dados de tempo na página como Vento,Umidade relativa,Pressão,Visibilidade,etc… tem que saber quais as variaveis que pegam estes dados ?
#10 by arthur on 23 de dezembro de 2008
Olá Djalma,
que bom que gostou do script.
Para pegar outros dados, basta fazer o explode no respectivo valor. Por exemplo, se quiser saber dados sobre o Vento, explode(’km/h’, $file), pressão explode(’hPa’, $file) e assim por diante. Não precisa saber as variáveis, basta apenas quebrar em um valor próximo a ele, no caso o explode faz essa quebra. Espero que tenha entendido.
Abraço
#11 by Djalma Chagas Bina on 29 de dezembro de 2008
Exatamente, deu certo, eu fiz esta página baseada em seu script -http://djalmabina.orgfree.com/Forms/tempo.php para efetuar uma busca nacional e está exibindo as condições meteorologicas correntes perfeitamente. Vc sabe como poderiamos pegar as previsões para os outros dias da semana ? Eu já tentei com um foreach pegando uma matriz de 7 dias com a função strftime(’%A %d %B %Y’); mas não deu certo ! Obrigado.
#12 by Djalma Chagas Bina on 20 de janeiro de 2009
Entrar nome da Cidade e UF:
<?php
//$cidadeuf = Cidade-UF
//Exemplo: Tramandai-RS (Tramandaí tem acento mas não se coloca)
$cidadeuf = $_POST['cidadeuf'];
function tempo($cidadeuf)
{
//abre arquivo
$arquivo = @file_get_contents(”http://tempoagora.uol.com.br/previsaodotempo.html/brasil/”.$cidadeuf);
//separa arquivo em partes
$temp = explode(”°C”,$arquivo);
$vento = explode(”km/h”,$arquivo);
$umidade = explode(”%”,$arquivo);
$pressao = explode(”hPa”,$arquivo);
//pega imagem
$img = explode(”mini-”,$arquivo);
$img = explode(”.gif”,$img[2]);
switch($img[0])
{
case ‘PI’: print “Pouco ensolarado”; break;
case ‘CC’: print “Ceu Claro”; break;
case ‘PC’: print “Pancadas de chuva”; break;
case ‘NC’: print “Nublado com chuva”; break;
case ‘CH’: print “Chuvoso”; break;
case ‘NB’: print “Nublado”; break;
case ‘PN’: print “Poucas nuvens”; break;
default: print “Ceu claro”; break;
}
//exibe temperaturas
$tempomax = substr($temp[1],-2);
$tempomin = substr($temp[2],-2);
$wind = substr($vento[0],-1);
$humidity = substr($umidade[0],-2);
$pressure = substr($pressao[0],-6);
setlocale(LC_ALL, “pt_BR”);
echo ““.strftime(”%A %d %B %Y”).”";
echo ““.$cidadeuf.”";
echo “”;
echo “Min: $tempomin°C”;
echo “Max: $tempomax°C”;
echo “Ventos: $wind km/h “;
echo “Umidade: $humidity % “;
echo “Pressao: $pressure hPa “;
echo ” “;
}
tempo(”$cidadeuf”)
?>
#13 by arthur on 20 de janeiro de 2009
Fala pessoal. Estou um pouco ausente do blog… Relaxando nas férias. Peço desculpas pela ausência.
Djalma, quanto a sua dúvida, já tentei diversas vezes e não consegui pegar os dados dos outros dias, mas continuarei tentando. Se conseguir, envio-te um e-mail.
Tadeu, para pegar os outros campos é exatamente como Djalma escreveu agora. A única mudança no script dele para o que disponibilizei aqui é que ele recebe o nome da cidade através de um POST. Mas como você pode ver, ele pega além das temperaturas, dados como pressão, umidade e etc. Abraço a todos.
#14 by André on 28 de janeiro de 2009
Esse código não está funcionando.
#15 by arthur on 28 de janeiro de 2009
Olá André,
Que parte não está funcionando?
Este blog utiliza exatamente este código no topo da página, e funciona perfeitamente. Deve estar faltando alguma coisa…
#16 by Thiago on 27 de julho de 2009
De acordo com exemplo do Djalma, fiz uma modificaçao na hora de atribuir a variavel tempoMax e tempoMin, ja que do jeito em que está, se a temperatura tiver ponto, ele vai exibir algo assim: .3 C e nao a temperatura inteira… basta fazer a seguinte modificacao:
$tempomax = substr($temp[1],-4);
if(strpos($tempomax, “>”) == true){
$tempomax = substr($temp[1],-2);
}
$tempomin = substr($temp[2],-4);
if(strpos($tempomin, “>”) == true){
$tempomin = substr($temp[1],-2);
}
#17 by arthur on 27 de julho de 2009
Muito bem observado Thiago.
Abraço
#18 by Nivaldo on 27 de agosto de 2009
Deu esse erro:
Parse error: parse error, unexpected ‘:’ in /home/domains/caarapoense.com.br/web/test.php on line 11
#19 by Nivaldo on 27 de agosto de 2009
Warning: file_get_contents(): URL file-access is disabled in the server configuration in /home/domains/caarapoense.com.br/web/tempo.php on line 5
Warning: file_get_contents(http://tempoagora.uol.com.br/previsaodotempo.html/brasil/Caarapo-MS): failed to open stream: no suitable wrapper could be found in /home/domains/caarapoense.com.br/web/tempo.php on line 5
Céu claro
Script que estou usando:
#20 by Fabiano on 3 de setembro de 2009
Estranho em localhost ele funciona perfeitamente, mas quando acesso no servidor web ele não aparece as informações, sabe dizer se isso é por restrição do UOL?
#21 by Rafael R.P (Raff) on 17 de setembro de 2009
Cara se eu dou um $temp = explode(”° ;C”,$file);
ele pega e inclui a página inteira, tu tens uma solução?
#22 by Flavio on 17 de setembro de 2009
Olah Arhur, está funcionando esse script ainda? Ñ consegui aqui, obrigado!
#23 by Maicon on 29 de setembro de 2009
Olá pessoal sou novo na linguagem PHP e estou com dificuldades de aplicar este script em um site, pois o mesmo me retorna erros.
PHP Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /home/franzens/public_html/maicon/index.php on line 5
[28-Sep-2009 22:58:29] PHP Warning: file_get_contents(http://tempoagora.uol.com.br/previsaodotempo.html/brasil/NovoHamburgo-RS) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /home/franzens/public_html/maicon/index.php on line 5
se puderem me ajudar obrigada.
Add MSN me_maikinhonh@hotmail.com
#24 by Maicon on 30 de setembro de 2009
Desculpem ai meu comentário… Criei um servidor aki no meu pc e rodo bunito… Vlw Arthur.
#25 by André on 29 de dezembro de 2009
Pessoas, consegui pegar as temperaturas de amanhã usando a seguinte config.
echo "Hoje";
echo substr($temp[3],-2)."°C";
echo substr($temp[4],-2)."°C";
echo "Amanhã";
echo substr($temp[15],-2)."°C";
echo substr($temp[16],-2)."°C";
#26 by weslley clyton on 5 de janeiro de 2010
e ae brother blz?? queria saber onde consigo as imagens dos estados do tempo. .vlw.