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.