Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sow

Como capturar um dado específico de uma página com PHP

Recommended Posts

Boa tarde,

 

Estou desenvolvendo um aplicativo em php, que irá se conectar a um Arduino para coletar informações do tempo e fornecer a sensação térmica do corpo humano.

 

Porém, eu não tenho o sensor de velocidade do vento, tal que seria uma variável importante no cálculo que determina a sensação térmica.

 

Para isso, estou tentando coletar a informação da velocidade do vento online, através de sites direcionado para previsões climáticas.

 

Meu objetivo é coletar essa informação, para então usar no meu programa para calcular a sensação térmica. O problema é que eu não sei como coletar informações de sites externos.

 

 

Alguém poderia me passar algum exemplo de como fazer isso? Coletar uma informação específica de um site usando php?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Obrigada Galliane, mas esse exemplo não está funcionando com o site tempoeagora, justamente por que ele não pertence mais ao UOL e sim ao R7.

 

Como eu não entendo de Expressões regulares, não consegui mudar as informações.

 

Estou usando este site, que tem servidor próprio.

 

http://www.climatempo.com.br/previsao-do-tempo/cidade/361/passofundo-rs

 

 

Quero coletar somente a informação do vento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao invés de criar gambiarras, obtenha os dados de forma adequada usando serviços que fornecem API própria para isso.

 

Veja a API do Yahoo Weather:

http://developer.yahoo.com/weather/

 

 

O parâmetro: yweather:wind, possui o atributos chill, direction e speed...

Speed (velocidade) é o que vc precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Obrigada, vou dar uma estudada nisso, mas eu não faço ideia de como funciona xml. Por isso queria fazer algo com php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Sow, usa essa função aí que resolve!

 

 

<?php
//pega variavel ou função de uma página sem dar include, depois chame a variável ex.: //echo $stone;
ob_start(); // inicia o buffer de memória

include '../index.php'; //página alvo

$conteudo = ob_get_contents(); // guarda o conteúdo do arquivo na variável (parseado normal).
ob_end_clean(); // limpa a memória.


echo $stone;   //Depois é só chamar a variável ou função individualmente!
?>

 

Espero ter ajudado, até mais...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá Maquias,

 

 

Eu quero trazer os dados dessa url: http://api.openweathermap.org/data/2.5/weather?q=Passo Fundo,br

Os dados dela não estão em XML, mas sim em Json. Quero captar e trazer esses dados, mais especificamente o Speed.

Tentei com o exemplo que você me passou:

//pega variavel ou função de uma página sem dar include, depois chame a variável ex.: //echo $stone;
ob_start(); // inicia o buffer de memória

include 'http://api.openweathermap.org/data/2.5/weather?q=Passo Fundo,br'; //página alvo

$conteudo = ob_get_contents(); // guarda o conteúdo do arquivo na variável (parseado normal).
ob_end_clean(); // limpa a memória.


echo $conteudo;   //Depois é só chamar a variável ou função individualmente!

 

Mas aparecerem os seguintes erros:

Warning: include(): http:// wrapper is disabled in the server configuration by allow_url_include=0 C:\wamp\www\arduinoApp\teste1.php on line 41

 

 

Warning: include(http://api.openweathermap.org/data/2.5/weather?q=Passo Fundo,br): failed to open stream: no suitable wrapper could be found in C:\wamp\www\arduinoApp\teste1.php on line

 

Warning: include(): Failed opening 'http://api.openweathermap.org/data/2.5/weather?q=Passo Fundo,br' for inclusion (include_path='.;C:\php\pear') in C:\wamp\www\arduinoApp\teste1.php on line 41

Compartilhar este post


Link para o post
Compartilhar em outros sites

include é apenas para arquivos que estão hospedados na mesma máquina que a sua aplicação, e que vc tenha acesso a eles.

 

vc precisa ler o conteudo da url, ai pode usar um file_get_contents() e para ler o json facilmente, tem o json_decode() para transformar ele num objeto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui trazer da seguinte forma:

<?php	
// Inicia o cURL acessando uma URL	
$cURL = curl_init('http://api.openweathermap.org/data/2.5/weather?q=Passo%20Fundo,br');	// Define a opção que diz que você quer receber o resultado encontrado	curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);	
// Executa a consulta, conectando-se ao site e salvando o resultado na variável $resultado	
$resultado = curl_exec($cURL);              
  echo $resultado; 	
// Encerra a conexão com o site	curl_close($cURL);
?>



O problema agora é o seguinte, como trazer apenas a informação do Speed.

Compartilhar este post


Link para o post
Compartilhar em outros sites

com o json_decode() como eu disse ali em cima.

 

ai vc acessa a informação que quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Você tem algum exemplo, de como eu faço isso?

 

meu app retorna isso:

 

 

{"coord":{"lon":-52.41,"lat":-28.26},"sys":{"message":0.298,"country":"BR","sunrise":1386750356,"sunset":1386800434},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"gdps stations","main":{"temp":298.023,"temp_min":298.023,"temp_max":298.023,"pressure":954.39,"sea_level":1025.27,"grnd_level":954.39,"humidity":65},"wind":{
"speed":4.95
,"deg":129.5},"clouds":{"all":44},"dt":1386780422,"id":3454857,"name":"Passo Fundo","cod":200}

 

 

Eu quero retornar só o speed e seu valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

 

$str = '{"coord":{"lon":-52.41,"lat":-28.26},"sys":{"message":0.298,"country":"BR","sunrise":1386750356,"sunset":1386800434},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"gdps stations","main":{"temp":298.023,"temp_min":298.023,"temp_max":298.023,"pressure":954.39,"sea_level":1025.27,"grnd_level":954.39,"humidity":65},"wind":{"speed":4.95,"deg":129.5},"clouds":{"all":44},"dt":1386780422,"id":3454857,"name":"Passo Fundo","cod":200}';

 

$json = json_decode($str);

 

echo $json->wind->speed;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<?php

$str = '{"coord":{"lon":-52.41,"lat":-28.26},"sys":{"message":0.298,"country":"BR","sunrise":1386750356,"sunset":1386800434},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"gdps stations","main":{"temp":298.023,"temp_min":298.023,"temp_max":298.023,"pressure":954.39,"sea_level":1025.27,"grnd_level":954.39,"humidity":65},"wind":{"speed":4.95,"deg":129.5},"clouds":{"all":44},"dt":1386780422,"id":3454857,"name":"Passo Fundo","cod":200}';

$json = json_decode($str);

echo $json->wind->speed;

 

 

Eu implementei esse exemplo no meu código.

 

<?php
	// Inicia o cURL acessando uma URL
	$cURL = curl_init('http://api.openweathermap.org/data/2.5/weather?q=Passo%20Fundo,br');
	// Define a opção que diz que você quer receber o resultado encontrado
	curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
	// Executa a consulta, conectando-se ao site e salvando o resultado na variável $resultado
	$resultado = curl_exec($cURL);
        
        $json = json_decode($str);

        echo $json->wind->speed;
        
	// Encerra a conexão com o site
	curl_close($cURL);



?>

Mas aparecem esses erros... =\

 

Undefined variable: str in C:\wamp\www\arduinoApp\teste1.php on line 9 ( ! ) Notice: Trying to get property of non-object in C:\wamp\www\arduinoApp\teste1.php on line 11 ( ! ) Notice: Trying to get property of non-object in C:\wamp\www\arduinoApp\teste1.php on line 11

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tem que trocar aqui:

 

$json = json_decode($str);
Por isso:

 

$json = json_decode($resultado);

 

 

Não acredito que não tinha visto isso. Noooooossa, estou muuuuuuuuuuuuuuuuuuuito Agradecida! Obrigada mesmo!

 

Agradeço a todos que ajudaram, mesmo!

 

 

 

Deixo o código abaixo caso alguém precise utilizar algo semelhante um dia.


<?php
// Inicia o cURL acessando uma URL
$cURL = curl_init('http://api.openweathermap.org/data/2.5/weather?q=Passo%20Fundo,br');
// Define a opção que diz que você quer receber o resultado encontrado
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
// Executa a consulta, conectando-se ao site e salvando o resultado na variável $resultado
$resultado = curl_exec($cURL);
        
        $json = json_decode($resultado);

        echo $json->wind->speed;
        
// Encerra a conexão com o site
curl_close($cURL);



?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.