Lendo arquivo XML(RSS) com PHP
No exemplo abaixo vou fazer uma leitura em um arquivo xml de RSS, segue a estrutura desse arquivo:
Para ler um xml é necessario criar um parser, no qual sera usado em cada função para receber os paramentos do xml que esta sendo lido.
Para criar um parser utilizamos a função:
xml_parser_create()
Funções que trazem as tags do xml <></>:
xml_set_element_handler()
Função que trazer os dados do xml <>dados</>.
xml_set_character_data_handler()
Com essas funções criei uma classe para leitura:
<?xml version="1.0" encoding="ISO-8859-1" ?> <rss version="2.0"> <channel> <title></title> <link></link> <description></description> <language></language> <copyright></copyright> <image> <title></title> <url></url> <link><link> </image> <lastBuildDate></lastBuildDate> <ttl></ttl> <item> <title></title> <link></link> <description></description> <datePosted /> </item> . . . </channel> </rss>
Para ler um xml é necessario criar um parser, no qual sera usado em cada função para receber os paramentos do xml que esta sendo lido.
Para criar um parser utilizamos a função:
xml_parser_create()
Funções que trazem as tags do xml <></>:
xml_set_element_handler()
Função que trazer os dados do xml <>dados</>.
xml_set_character_data_handler()
Com essas funções criei uma classe para leitura:
<?php class le_xml{ var $parser; function le_xml() { $this->parser = xml_parser_create(); xml_set_element_handler($this->parser, "tags_ini", "tags_fim"); xml_set_character_data_handler($this->parser, "dados"); } function abre_xml($url){ // Função que pega a tag aberta xml <> function tags_ini($parser, $param) { switch($param) { case "TITLE": echo "<br><table width=100%>"; echo "<tr bgcolor=#c7c7c7><td align=left>"; echo "<font face=Arial size=2><u>Titulo:</u> "; break; case "URL": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Url logo: "; break; case "LANGUAGE": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Linguagem: "; break; case "COPYRIGHT": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Copyright: "; break; case "TTL": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Tamanho letra: "; break; case "LASTBUILDDATE": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Data: "; break; case "LINK": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Link: "; break; case "DESCRIPTION": echo "<table width=100%>"; echo "<tr bgcolor=#f7f7f7><td align=left>"; echo "<font face=Arial size=2>Descrição: "; break; }//fim switch }//fim função tags_ini //função que traz os dados do xml function dados($parser, $dados) { echo $dados; } //Função que pega tag fechada xml </> function tags_fim($parser, $param) { echo "</font></td></tr></table>"; }//fim da funçao tags_fim //Abre a o aquivo na url para leitura if (!($ponteiro = fopen($url, "r"))) { die("Não foi possivel abrir o xml"); } else { //Loop de leitura do xml while ($dados2 = fread($ponteiro, 4096)) { xml_parse($this->parser, $dados2); } //Limpa o parser da memoria xml_parser_free($this->parser); }//fim if de abertura do xml }//Fim função abre_xml }//Fim da classe le xml //abre xml passando seu endereço $xml_parser = new le_xml(); $xml_parser->abre_xml("http://www.maniezo.com.br/site/rss.php"); ?>
Pessoal...
utilizei esse script e deu o seguinte erro: "O Apache.exe encontrou um problema e precisa ser fechado."
Inicialmente, achei que fosse algo com o script. Mas com todos os outros que eu peguei, que liam XML, acontece a mesma coisa.
Alias, quando lê diretamente o XML, roda beleza. Mas quando eu passo uma URL (no caso do RSS), ai é que da esse erro.
Por favor, alguem ja passou por isso e pode me ajudar:
Agradeço a todos...
Marcos
utilizei esse script e deu o seguinte erro: "O Apache.exe encontrou um problema e precisa ser fechado."
Inicialmente, achei que fosse algo com o script. Mas com todos os outros que eu peguei, que liam XML, acontece a mesma coisa.
Alias, quando lê diretamente o XML, roda beleza. Mas quando eu passo uma URL (no caso do RSS), ai é que da esse erro.
Por favor, alguem ja passou por isso e pode me ajudar:
Agradeço a todos...
Marcos
06/07/2006 1:31pm
(~18 anos atrás)
Oi
Estou com um problema... adptei a classe para minha necessidade e preencho um vetor com os dados do xml... esse dados serão inseridos ou atualizados no banco... até ai nenhum problema, meu problema é com as palavras com acento... Ex Florianópolis --> no vetor ou na tela só escreve Florian...
o que eu faço?? alguém pode me ajudar???
esse é o xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <rss version="2.0">
- <integracao-fortuna-planilha>
- <sincroniza-funcionarios>
- <funcionario>
<codigo>999</codigo>
<nome>Joao da Silva</nome>
<email>joao@iea.org.br</email>
<cpf>00000000000</cpf>
<endereco>rua x</endereco>
<bairro>centro</bairro>
<municipio>Florianópolis</municipio>
<cep>88113450</cep>
<caixap>1052</caixap>
<fonecom>30258526</fonecom>
<foneres>32465553</foneres>
<fonecel>91052393</fonecel>
</funcionario>
- <funcionario>
<codigo>998</codigo>
<nome>Teste 2</nome>
<email>paula@iea.org.br</email>
<cpf>00000000000</cpf>
<endereco>rua x</endereco>
<bairro>centro</bairro>
<municipio>Florianópolis</municipio>
<cep>88113450</cep>
<caixap>1052</caixap>
<fonecom>30258526</fonecom>
<foneres>32465553</foneres>
<fonecel>91052393</fonecel>
</funcionario>
</sincroniza-funcionarios>
</integracao-fortuna-planilha>
</rss>
já tentei mudar para <?xml version="1.0" encoding="utf-8" ?> mas não adiantou nada.
se alguém puder me ajudar meu email é paula@iea.org.br
Estou com um problema... adptei a classe para minha necessidade e preencho um vetor com os dados do xml... esse dados serão inseridos ou atualizados no banco... até ai nenhum problema, meu problema é com as palavras com acento... Ex Florianópolis --> no vetor ou na tela só escreve Florian...
o que eu faço?? alguém pode me ajudar???
esse é o xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <rss version="2.0">
- <integracao-fortuna-planilha>
- <sincroniza-funcionarios>
- <funcionario>
<codigo>999</codigo>
<nome>Joao da Silva</nome>
<email>joao@iea.org.br</email>
<cpf>00000000000</cpf>
<endereco>rua x</endereco>
<bairro>centro</bairro>
<municipio>Florianópolis</municipio>
<cep>88113450</cep>
<caixap>1052</caixap>
<fonecom>30258526</fonecom>
<foneres>32465553</foneres>
<fonecel>91052393</fonecel>
</funcionario>
- <funcionario>
<codigo>998</codigo>
<nome>Teste 2</nome>
<email>paula@iea.org.br</email>
<cpf>00000000000</cpf>
<endereco>rua x</endereco>
<bairro>centro</bairro>
<municipio>Florianópolis</municipio>
<cep>88113450</cep>
<caixap>1052</caixap>
<fonecom>30258526</fonecom>
<foneres>32465553</foneres>
<fonecel>91052393</fonecel>
</funcionario>
</sincroniza-funcionarios>
</integracao-fortuna-planilha>
</rss>
já tentei mudar para <?xml version="1.0" encoding="utf-8" ?> mas não adiantou nada.
se alguém puder me ajudar meu email é paula@iea.org.br
03/07/2006 1:53pm
(~18 anos atrás)
Na minha página uso um link para me retornar um XML, mas ele vem com muita informação, e só me interessa 3 delas, <COUNTY>, <CITY>, <UF>, como vou fazer para apresentar somente esta em meu site.
15/05/2006 5:56pm
(~18 anos atrás)
ola, gostaria de saber como faço para que leia apenas 3 noticias do xml, nao quero listar todas
t+
t+
30/10/2005 5:30am
(~19 anos atrás)
Parabens pelo artigo, mas eu tenho uma nova missão para vcs...
É possível acessar um webservice com o servidor feito em Delphi e o cliente em PHP?
Vou especificar melhor...
Minha empresa tem um servidor feito em em Delphi e nossos sites feitos em ASP acessam facilmente esse webservice com apenas poucas linhas:
Set soapclient = Server.CreateObject("MSSOAP.SoapClient30")
Call soapclient.mssoapinit(Server.MapPath("Nome.wsdl"),"ReservaService","ReservaPort")
Com isso as paginas ASP conseguem utilizar funções que estão nesse servidor.exe (feito em delphi) bastando para isso ter o SOAP tool Kit 3.0, e o servidor.exe instalado na maquina.
Como gosto mais do PHP que do ASP, estou numa luta para tentar demonstrar que é possível fazer a mesma coisa com o PHP, mas esta dificil...
O que eu fiz até agora foi baixar o NuSoap e ja consegui rodar os exemplos que encontrei por aí...
No entanto todos usam servidores e funções feitas no propio PHP.
E se eu quiser usar as funções feitas no Delphi????
Criei uma função Soma que simplesmente soma 2 inteiros para testar o webservice.
Notem que no codigo ASP acima eu consigo passar mais parametros:
ReservaService
ReservaPort
Tentei fazer isto
require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Nome.wsdl";
$client=new soapclient($wsdl, 'wsdl');
$param1=array('Valor1'=>20,);
$param2=array('Valor2'=>30);
echo $client->call('Soma', $param1, $param2);
mas não sei onde encaichar os outros dois parametros:
ReservaService e
ReservaPort
para que a comunicação seja feita
Por favor me AJUDEM!
É possível acessar um webservice com o servidor feito em Delphi e o cliente em PHP?
Vou especificar melhor...
Minha empresa tem um servidor feito em em Delphi e nossos sites feitos em ASP acessam facilmente esse webservice com apenas poucas linhas:
Set soapclient = Server.CreateObject("MSSOAP.SoapClient30")
Call soapclient.mssoapinit(Server.MapPath("Nome.wsdl"),"ReservaService","ReservaPort")
Com isso as paginas ASP conseguem utilizar funções que estão nesse servidor.exe (feito em delphi) bastando para isso ter o SOAP tool Kit 3.0, e o servidor.exe instalado na maquina.
Como gosto mais do PHP que do ASP, estou numa luta para tentar demonstrar que é possível fazer a mesma coisa com o PHP, mas esta dificil...
O que eu fiz até agora foi baixar o NuSoap e ja consegui rodar os exemplos que encontrei por aí...
No entanto todos usam servidores e funções feitas no propio PHP.
E se eu quiser usar as funções feitas no Delphi????
Criei uma função Soma que simplesmente soma 2 inteiros para testar o webservice.
Notem que no codigo ASP acima eu consigo passar mais parametros:
ReservaService
ReservaPort
Tentei fazer isto
require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Nome.wsdl";
$client=new soapclient($wsdl, 'wsdl');
$param1=array('Valor1'=>20,);
$param2=array('Valor2'=>30);
echo $client->call('Soma', $param1, $param2);
mas não sei onde encaichar os outros dois parametros:
ReservaService e
ReservaPort
para que a comunicação seja feita
Por favor me AJUDEM!
21/02/2005 9:28am
(~20 anos atrás)
Ai galera, bazeado nesse artigo eu elaborei uma classe para tratrar noticias Rss!!
Da uma olhada ai:
http://www.phpbrasil.com/scripts/script.php/id/2015
Da uma olhada ai:
http://www.phpbrasil.com/scripts/script.php/id/2015
09/02/2005 11:36am
(~20 anos atrás)
Nunca usei php + xml, até que ponto é viável implementar esse estilo de programação?
[]'s
[]'s
21/01/2005 12:08pm
(~20 anos atrás)
Bem interessante o artigo. Ha algum tempo quero aprender a mexer com isso, mas preciso de informações maiores, pois aidna sou novo no assunto. Mas seu tuto ajudou bastante.
Parabens
Parabens
12/01/2005 6:45pm
(~20 anos atrás)
Parabéns pelo conteúdo do artigo e qualquer ajuda vai ser bemvinda, abraços.