Dica Rapida: Pegando Twittadas com PHP
Postado por João Vagner em 24.04.2009 11:25 Desenvolvimento web, Geral, php
Ola a todos,
Vou começar uma série de posts rapidos com dicas legais e uteis pro dia-a-dia relacionadadas a PHP.
Quase todos usam Twitter, e ja sabemos o o Twitter tem uma API para integração, porem nao e necessario usar uma API para algo basico, como pegar os Ultimos posts de alguem via RSS. Ja que RSS e um formato XML.
Abaixo um codigo simples e rapido:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $rss = 'http://twitter.com/statuses/user_timeline/14627317.rss'; $abre = simplexml_load_file($rss); $i = 0 ; $limite=3; foreach ($abre->channel->item as $itens ) { $post = utf8_decode($itens->title); echo $post .'<hr />'; if($i==$limite) { break; } $i++; } ?> |
$rss
Indica o caminho completo do RSS a ser lido.
$abre
Utiliza simplexml_load_file para ler o xml e converter em um objeto/p
$i
Define o inicio do loop para que possamos frear o loop no nosso limite de twittadas./p
$limite=3
Definimos um limite de posts, no caso como nosso loop comeca em em 0, definindo 3, o limite de posts seria 4: 0,1,2,3
foreach ($abre–>channel->item as $itens ) {
Aqui criamos um loop do item do XML e o chamamos de $itens para melhor identificação dentro do loop. Aqui ele herda os itens de channel->item, como title, e outros
$post = utf8_decode($itens->title);
Aqui usamos o UTF-8 para decodificar as mensagens evitando erros de charset e podemos interpretar para o ISO.
echo $post .’ < hr / >‘;
Aqui imprimos o Post na tela e adicionamos a tag
para separar os posts, criando uma linha de separação.
if($i==$limite) { break; }
Aqui verificamos se o nosso loop chegou ao nosso limite definido acima, se chegar coloca um fim no loop do channel->item
Por fim e isso, basta usar em seus blogs, e onde mais desejar ;)
Leitura de XML – Parte 2 SimpleXML
Postado por João Vagner em 24.12.2008 10:00 Desenvolvimento web, Destaques, Internet, php
Olá Pessoal,
Primeiramente, post de dia 24 de Dezembro, desejos a todos um Feliz Natal, que estejam todos ai junto a amigos e familiares curtindo uma data especial.
Bom, demorei um pouco, mas chegou, a segunta parte de Leitura de XML usando SimpleXML, dessa vez vou usar alguns modelos, ao invez de trabalhar com o nosso Feed de RSS, vamos trabalhar com valores de cambio e pesquisa de CEP. Tudo simples e em poucas linhas.
Primeiramente precisamos de algum XML que seja atualizado, com os valores que temos que trabalhar. Para isso existe esse endereço: http://www.republicavirtual.com.br/cotacao/exemplos.php
Não posso garantir 100% de uptime do link, pois não sei se algo vai mudar ok? Mas iremos trabalhar em cima dos retornos desse xml, ok?
Simple XML
O objetivo é fornecer acesso aos documentos XML usando propriedades de objetos e iterators, não é uma extensão complicada (são poucos métodos) mas é bastante flexível.
Exemplo Básico
Importando o XML da URL:
1 | $file = simplexml_load_file('http://cotacao.republicavirtual.com.br/web_cotacao.php?formato=xml'); |
Iniciando o trabalho
Aqui vamos pegar o valor do dolar comercial para compras:
1 2 3 4 | // importando o arquivo $file = simplexml_load_file('http://cotacao.republicavirtual.com.br/web_cotacao.php?formato=xml'); // pegando a tag dolar_commercial_compra echo $file->dolar_comercial_compra; |
As tags que podemos trabalhar podem ser encontrada nesse XML
1 2 3 4 5 6 7 8 9 10 | <webservicecotacao> <dolar_comercial_compra>2,1260</dolar_comercial_compra> <dolar_comercial_venda>2,1280</dolar_comercial_venda> <dolar_paralelo_compra>2,2200</dolar_paralelo_compra> <dolar_paralelo_venda>2,3000</dolar_paralelo_venda> <euro_dolar_compra>1,2410</euro_dolar_compra> <euro_dolar_venda>1,2410</euro_dolar_venda> <euro_real_compra>2,6384</euro_real_compra> <euro_real_venda>2,6408</euro_real_venda> </webservicecotacao> |
Viram como é simples trabalhar com o SimpleXML? Agora vamos trabalhar para achar endereços de CEP ;) O XML que iremos trabalhar emcima é desse modelo:
Trabalhando com CEP
Código:
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="iso-8859-1" ?> <webservicecep> <resultado>1</resultado> <resultado_txt>sucesso - cep completo</resultado_txt> <uf>SP</uf> <cidade>São Paulo</cidade> <bairro>Santana</bairro> <tipo_logradouro>Rua</tipo_logradouro> <logradouro>Duarte de Azevedo</logradouro> </webservicecep> |
A URL que iremos importar as consultas é: http://cep.republicavirtual.com.br/web_cep.php?cep=02036021&formato=xml
Vamos ao Código:
1 2 3 4 5 6 7 | $file = simplexml_load_file('http://cep.republicavirtual.com.br/web_cep.php?cep=02036021&formato=xml'); echo "UF: " .$file->uf; echo "<br />Cidade: " .$file->cidade; echo "<br />Bairro: " .$file->bairro; echo "<br />Tipo de Logradouro: " .$file->tipo_logradouro; echo "<br />Endereço: " .$file->logradouro; |
Não recomendo que essa aplicação rode atravez da url de pesquisa, a base de dados pode ser baixada nesse endereço: Download
É isso, viram como é simples integrar uma pesquisa de CEP pra completar formulários de cadastros e tudo mais? Agora é com vocês ;)
Tags: Desenvolvimento web, php, simplexml, xml
Leitura de XML – Parte 1 DOM XML
Postado por João Vagner em 09.12.2008 12:49 Desenvolvimento web, Internet, php
Já precisaram ler algum XML, de algum lugar, trabalhar com esses valores? Se ainda não precisaram, podem ter a absoluta convicção que esse dia chegará.
Alguns aplicativos ja usam o XML como transmissão de informações, ou recepção de informações. Importar ou exportar um arquivo XML é simples, fácil e rápido, basta manter um padrão para ler dentro de suas tags ou escrever dentro das mesmas.
Alguns sistemas, blogs, entre outros dispostivos, ja estão trabalhando totalmente ou parcialmente com XML, cada um usando formatações diferentes, porém a estrutura do arquivo sempre o mesmo com a marcação de tags, exemplo de um XML comum de RSS do nosso proprio blog TECHNÓCIL:
Nosso XML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" > <channel> <title>technocil.com</title> <atom:link href="http://technocil.com/feed/" rel="self" type="application/rss+xml" /> <link>http://technocil.com</link> <description></description> <pubDate>Tue, 09 Dec 2008 14:30:28 +0000</pubDate> <generator>http://wordpress.org/?v=2.6.5</generator> <language>en</language> <item> <title>Primeiro post, Apresentação…</title> <link>http://technocil.com/2008/12/09/primeiro-post-apresentacao/</link> <comments>http://technocil.com/2008/12/09/primeiro-post-apresentacao/#comments</comments> <pubDate>Tue, 09 Dec 2008 14:29:10 +0000</pubDate> <dc:creator>Tobias</dc:creator> <category><![CDATA[Geral]]></category> <category><![CDATA[Apresentacao]]></category> <category><![CDATA[Technócil]]></category> <guid isPermaLink="false">http://technocil.com/?p=121</guid> <description><![CDATA[nossa descrição do post [...]]]></description> <content:encoded><![CDATA[<p>Todo Conteudo do post</p> <p>Segundo paragrafo</p>]]></content:encoded> <wfw:commentRss>http://technocil.com/2008/12/09/primeiro-post-apresentacao/feed/</wfw:commentRss> </item> </channel> </rss> |
Um tanto quanto grande nosso XML né? Porém ele é ótimo para o exemplo devido aos niveis de title, e description, que irá nos exemplos abaixo.
Agora imaginem como ler ou obter os dados desse nosso RSS (XML). Para isso existem várias maneiras, algumas são usando algumas funções do PHP como a file_get_contents. Exemplo:
1 2 3 4 5 6 7 | <?php $conteudo = file_get_contents('http://technocil.com/feed/'); echo $conteudo; ?> |
Dependendo do seu navegador, o que será impresso é RSS(XML) do nosso blog, ou abrindo o código fonte do que for impresso, verá todo o XML impresso. No meu caso que uso o Opera, precisarei abrir o código fonte para ver o XML Impresso lá. Agora depois trabalhar com esses dados podem ser por expressão regular, e por ai vai, é um trabalhão dessa maneira. O XML não é dinamico, não pode ser interpretado pelo servidor, pode somente ser lido. Para escrever um XML com valores dinamicos sim, se usa usa PHP, e definindo no header o tipo de documento XML, porém ainda não chegamos ao ponto de escrever nenhum XML.
Então para fugir do trabalho duro e chato qual a maneira mais fácil e rápida de trabalhar com XML e seus valores?
São as mais conhecidas duas, usando uma extensão do php chamada DOM XML, que foi revisada no PHP 4.3.0 para trabalhar corretamente com o Padrão DOM, e segunda opção é a SimpleXML.
Instalação do DOM XML
A instalação é simples, basta descomentar a linha do php.ini que possui a extensão domxml.dll ou .so:
extension=php_domxml.dll
No meu caso, como uso o XAMPP 1.6.7, eu comentei a linha, pois a mesma apresentava um erro ao tentar utilizar, e eu apenas comentei e ela voltou a funcionar, no site do PHP Consta alguns avisos de versões, dependendo da sua versão do php, elas são válidas ou não:
Nota: Esta extensão foi movida para o repositório » PECL e não é mais distribuida em conjunto com o PHP a partir do PHP 5.0.0.
Nota: Esta extensão não está mais marcada como experimental. Ele será, contudo, nunca liberada com PHP 5, e irá somente ser distribuida com PHP 4. Se você precisa de suporte a DOM XML com PHP 5, você pode usar a extensão DOM. Esta extensão domxml não é compatível com a extensão DOM.
Alguns servidores web, porém tem dificuldade em trabalhar com essa biblioteca, um exemplo é a Locaweb (não vo divulgar o nome do cliente), que sofreu para que pudessem colocar esse componente tão simples no servidor. Mas isso vai de cliente a cliente. Eu aproveitando o gancho vou divulgar a IW² onde possui SVN (controle de versão), SSH e bibliotecas desses e outros usos liberadas, que hospeda aqui o TECHNOCIL.
Vamos aos códigos do DOM XML:
1 2 3 4 | //aqui iniciamos o trabalho com o DOM, definindo o cabeçalho como versão do XML 1.0, e trabalhando com o charset em UTF-8; $doc = new DOMDocument('1.0?', 'UTF-8?'); // aqui fazemos o load de todo o conteúdo do XML $doc->load('http://technocil.com/feed/'); |
Primeira fase completa, ja pegamos todo o conteudo do XML, ja iniciamos a extensão do DOM, e ja podemos usar os seus componentes:
1 2 3 | //exibe o titulo : technocil.com; pegando da tag title na raiz do XML: <title>technocil.com</title> $titulo = $doc->getElementsByTagName("title")->item(0)->nodeValue; echo $titulo ; |
Caso eu queira o titulo do post eu tenho que entrar dentro dos niveis do XML:
1 2 3 | // observe o item(1); Estamos trabalhando com niveis, parecidos com array, onde temos [0], [1], ['titulo']; $tituloPost = $doc->getElementsByTagName("title")->item(1)->nodeValue; echo $tituloPost ; |
Agora vamos pegar a descrição do Post:
1 2 3 | // observe que estamos ainda usando o item(1), ainda estamos em um segundo nivel das marcações $DescricaoPost = $doc->getElementsByTagName("description")->item(1)->nodeValue; echo $DescricaoPost ; |
Para ler esse conteudo dinamicamente, pode se trabalhar com foreach, listando nos ->item($i) um valor de listagem contando quantos posts possuem no XML. Agora é só brincarem ;)
Na parte dois, posto um exemplo de como pegar e trabalhar com os dados de Frete dos Correios, usando o XML de resposta das consultas por URL, e na parte 3, como trabalhar com o SimpleXML, no qual eu considero mais trabalhoso e chato.
Até mais!

