Ir para conteúdo

POWERED BY:

Arquivado

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

Frederick Moschkowich

[Resolvido] Webservice com XML

Recommended Posts

Ola pessoal,

 

uso um webservice para previsao do tempo. No entanto, as vezes o webservice sai do ar e meu site fica parado. Como verificar se o webservice esta funcionando.

 

estou usando o seguint codigo para acessar o xml

 

   $obj = simplexml_load_file($url);

 

notem que $url = http://webservice.com/xml/key=XXX

 

outra coisa o xml me devolve o seguinte resultado:

 

<weather ver="2.0">
<head></head>
<loc id="XXX000"></loc>
<cc></cc>
<dayf>
	<lsup></lsup>
	<day d="0" t="Saturday" dt="Aug 15">
		<hi>30</hi>
		<low>28</low>
	</day>
	<day d="1" t="Sunday" dt="Aug 16">
		<hi>32</hi>
		<low>26</low>
	</day>
</dayf>

</weather>

como faço para ler o nó <day d="0" t="Sunday" dt="Aug 16"><hi>? tentei assim:

[php]
   echo $obj->dayf->day[1]->hi;
[/php]

 
mas nao funcionou...
 
[]s
 
FM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta verificar com cURL.

 

$curl = curl_init('http://url.com.br/');

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

$exec = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if ( $status >= '300' )
{
   echo 'Webservice fora do ar.';
}else{
//continua o script...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok André.

 

Obrigado pelo help. Problemas resolvidos.

 

[]s

 

FM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que já resolveu, mas não PRECISA ser com cURL. Uma modificação na função file_exists() também resolve.

 

Sobre manipular as informações, continue com a Lib SimpleXML. Ela tem funções para encontrar um nó específico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que já resolveu, mas não PRECISA ser com cURL. Uma modificação na função file_exists() também resolve.

 

Sobre manipular as informações, continue com a Lib SimpleXML. Ela tem funções para encontrar um nó específico.

 

file_exists() Checa a existência de um arquivo local, o que não é o caso.

Além de curl, outra alternativa :

if(@file('http://url.com.br')) print 'no ar';

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sei que já resolveu, mas não PRECISA ser com cURL. Uma modificação na função file_exists() também resolve.

 

Sobre manipular as informações, continue com a Lib SimpleXML. Ela tem funções para encontrar um nó específico.

 

file_exists() Checa a existência de um arquivo local, o que não é o caso.

Além de curl, outra alternativa :

if(@file('http://url.com.br')) print 'no ar';
Amigo, por favor, não confunda file_exists() nativo com essa modificação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. grato pela ajuda. vou testar dos dois jeitos.

[]s

FM

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Imaggens

 

Não vejo necessidade de usar aquilo tudo para simplismente verificar se o site esta online.

Eu considero aquela função util caso não se tenha cURL instalado no servidor. Se não eu acho uma gambiarra sem necessidade.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Sei que já resolveu, mas não PRECISA ser com cURL. Uma modificação na função file_exists() também resolve.

 

Sobre manipular as informações, continue com a Lib SimpleXML. Ela tem funções para encontrar um nó específico.

 

file_exists() Checa a existência de um arquivo local, o que não é o caso.

Além de curl, outra alternativa :

if(@file('http://url.com.br')) print 'no ar';
Amigo, por favor, não confunda file_exists() nativo com essa modificação.

 

Eu vi depois que era uma modificação, mas o edit do forum não funciona e não queria usar um double-post.

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

 

Sei que já resolveu, mas não PRECISA ser com cURL. Uma modificação na função file_exists() também resolve.

 

Sobre manipular as informações, continue com a Lib SimpleXML. Ela tem funções para encontrar um nó específico.

 

file_exists() Checa a existência de um arquivo local, o que não é o caso.

Além de curl, outra alternativa :

if(@file('http://url.com.br')) print 'no ar';
Amigo, por favor, não confunda file_exists() nativo com essa modificação.

 

Eu vi depois que era uma modificação, mas o edit do forum não funciona e não queria usar um double-post.

[]'s

 

Pois é.O bem dito EDIT de novo http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif

 

@André, foi bem besse sentido que postei a resposta, para o caso não ter a Lib cURL instalada o que é o caso de muitos servidores gratuitos que programadores usam como "teste" antes de entregar algo para um cliente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal vamos citar epenas o que foi postado por ultimo e de preferencia apenas o trecho que interessa

 

neste tópico vocês estão citando todos os posta anteriores sem a minima necessidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao sei se este topico ainda esta aberto, e como nao queria criar um novo la vai

estou tentanto acessar o xml do cptec.inpe si que qaundo upei meu script baseado em fopen, meu host ta "allow fopen off"

ai lendo na net vi sobre o curl .

a duvida e a seguinte ,com eu faço o curl "quebrar" o xml?

este e script que eu to usando, mas fica mairo bagunça, tudo numa linha so, se alguem puder me dar uma luz agradeço.

<?php
$ch = curl_init();
$timeout = 0;
curl_setopt($ch, curlOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, curlOPT_HTTPHEADER, Array("Accept: text/xml"));
curl_setopt($ch, CURLOPT_URL, 'http://servicos.cptec.inpe.br/XML/cidade/4679/previsao.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$conteudo = curl_exec ($ch);
curl_close($ch);

echo $conteudo;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao sei se este topico ainda esta aberto, e como nao queria criar um novo la vai

 

Agora está... :D

 

a duvida e a seguinte ,com eu faço o curl "quebrar" o xml?

 

A CURL não vai quebrar o XML para você, vai apenas comunicar com o servidor e recuperar para você o conteúdo; Para poder trabalhar com o XML que o servidor irá retornar você pode utilizar a SimpleXML:

 

$ch = curl_init();
curl_setopt( $ch , CURLOPT_HEADER , 0 );
curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt( $ch , CURLOPT_URL, 'http://servicos.cptec.inpe.br/XML/cidade/4679/previsao.xml' );

$xml = null;
$conteudo = curl_exec( $ch ); //Aqui gravamos o XML que o servidor irá retornar na variável $conteudo

/**
 * Antes de usar a SimpleXML, vemos se não ocorreu nenhum erro na comunicação com o servidor,
 * para evitar que tentemos utilizar a SimpleXML em um conteúdo inválido.
 */
if ( !curl_errno( $ch ) ){
    $xml = simplexml_load_string( $conteudo ); //Usamos load_string com o conteúdo que recuperamos do servidor

    /**
     * Agora é só mostrar os dados do XML
     */
    printf( "Cidade: %s\n" , $xml->nome ); //Cidade: Santana do Livramento
    printf( "UF: %s\n" , $xml->uf ); //UF: RS
} else
    echo 'Não foi possível ler o XML';

curl_close( $ch );

http://br.php.net/manual/pt_BR/book.simplexml.php

http://br.php.net/manual/pt_BR/book.curl.php

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.