Pessoal tenho visto pela web muitas formas de inserir notícias em uma página utilizando RSS/XML, muitas dessas formas funcionam bem em qualquer situação e outras não. Resolvi postar aqui uma das que funcianam bem, claro, além de ser de simples alteração.
O arquivo abaixo retorna apenas os links das notícias, então o que vocês precisam fazer nada mais é que mudar o valor da var $feed inserindo a URL que desejar, a váriavel $qtdelinks informa a quantidade de links de notícias que retornarão ao fim das instruções, você pode mudar seu valor também.
Escolha um local em seu site e use include(‘feeds.php’); para incluir os links no site!
Salve-o como feeds.php
<?php
# Iniciando as variaveis
# Url do RSS / Feed
$feed = ‘http://feeds.folha.uol.com.br/folha/mundo/rss091.xml‘;
# Quantidade de links que serão exibidos
$qtdelinks=5;
# Variavel que aramazena os links
$html = ”;
# Variavel utilizada no laço x quantidade de links (set)
$i=0;
# Variavel que recebe os dados do url
$xml = ”;
# Abrindo o arquivo remoto
$fp = fopen($feed, ‘r‘);
while (!feof($fp))
{
# Armazenando o conteudo do arquivo na variavel XML
$xml .= fread($fp, 128);
}
# Fechando o arquivo
fclose($fp);
# Função que captura o conteudo das Tags
function untag2($string, $tag)
{
$tmp = array();
# Informando as tags passadas no parametro para obter o conteudo
$preg = “|<$tag>(.*?)</$tag>|s”;
# Obtendo o conteudo das tags passadas no param e adicionando em tags
preg_match_all($preg, $string, $tags);
# Para cada tag contida em no array tags
foreach ($tags[1] as $tmptag)
{
# Adicionando no array tmp o conteudo das tags
$tmp[] = $tmptag;
}
# Retornando um array com conteudo de cada tag
return $tmp;
}
# Retornando o conteudo de todas as tags item do RSS / XML
$items = untag2($xml, ‘item‘);
# Retornando cada tag item do array items
foreach ($items as $item)
{
if ($i < $qtdelinks)
{
# Recuperando o conteudo da tag title
$title = untag2($item, ‘title‘);
# Recuperando o conteudo da tag href / link
$link = untag2($item, ‘link‘);
# Armazenando o link na var html / utf8_decode trata os acentos no titulo
$html .= ‘<a href=”‘.$link[0].‘” target=”_blank”>’.utf8_decode($title[0]).”</a><br>\n“;
$i++;
}
}
# Exibindo o HTML gerado
echo $html;
?>
Utilize o CSS do seu site para formatar os links, não precisa alterar nada na variável($html) que concatena os links. Se preciso adicione apenas o atributo Class (se seu css já não estiver tratando todas as tags A href).
É isso aí, apenas.
O exemplo funcionando aqui. Download do exemplo funcionando aqui.
Obrigado,
Rafael Clares
36 Comentários até o momento
Deixe um comentário
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Ótimo tutorial, simples e preciso. Porém, ainda tenho uma dúvida: quando clico na notícia, não consigo acessar a página com a notícia. Em vez disso, o navegador tenta abrir a página como se ela estivesse hospedada no meu próprio site. Tem como resolver isso?
Comentário por Heloisa Novembro 2, 2008 @ 5:29 amOi Heloisa, poderia colocar o código aqui para vermos juntos. Importante também ver de onde você está recebendo as noticias. Aguardo seu comentário com o código. Até logo,
Comentário por Rafael Clares Novembro 2, 2008 @ 8:19 pmSe atraplhei pedindo o e-mail me desculpe so achei que seria mais simples do que ficar trocando comentario pelo blog.
Bom, gostaria de saber passo a passo como implementar isso e usar o serviço de php, nao entendo muito sobre esse tipo de linguagem.
Um passo-a-passo seria bem bacana ainda mais para um leigo.
Comentário por André Novembro 3, 2008 @ 6:19 pmObrigado
Olá André, obrigado pelo comentário. Amigo a intenção do blog é justamente trocar comentários. Imagine 50 pessoas com a mesma dúvida que você e eu tendo que escrever 50 emails, viu só, assim sua dúvida irá ajudar outras pessoas. Mas tem uma coisa, não tem como ficar mais explicado que isso o exemplo se pensarmos em leigos como você mencionou.
Comentário por Rafael Clares Novembro 3, 2008 @ 6:33 pmUma dica que dou à todos é: façam o upload do arquivo para seu site e testem on-line, testar localmente pode ser bem demorado ou ainda travar, então quando estiver desenvolvendo comente a linha que inicia a leitura do RSS (se for um include por ex). O exemplo acima está funcionando como podem ver no link, mas se eu testar localmente vai demorar ou travar.
Obrigado
Muito legal este codigo, vou implementar nos meus sites
Comentário por Messias Anjos Novembro 23, 2008 @ 9:01 pmOlá Rafael! Gostei do post, más eu queria algo mais.
Comentário por carlos Janeiro 11, 2009 @ 6:52 pmVeja bem, eu quero colocar esse feed no meu site mas não quero que abra a página inteira do endereço colocado, e sim que a noticia abra em uma popup.será que atraves de algum script isso é possível?
Olá, em primeiro ligar quero agradecer pela ajuda que seu blog traz a nós, programadores.
Criei meu site 100%, desde o layout e logotipo até todo o código-fonte usando PHP, gostaria que desse uma olhada em meu site e desse sua opinião, ele é muito recente e eu ainda estou tentando melhorá-lo, existem algumas ferramentas no painel de administração que eu criei que ainda estão em desenvolvimento, mas todo o site é dinâmico e utiliza banco de dados MySQL e seu conteúdo é adicionado pelo próprio navegador.
Agradeço pela atenção e parabéns pelo blog e sua competência.
http://www.TheNets.org :: Os Melhores Programas
Comentário por Luiz Felipe Janeiro 20, 2009 @ 9:34 pmOlá Luiz, obrigado pelo comentário. Vi seu site tá muito bom, achei bem profissional e com conteúdo bem distribuído, bacana mesmo cara parabéns.
Comentário por Rafael Clares Janeiro 21, 2009 @ 9:59 amobs: um dia eu chego lá!!!
abraços
publiquei este artigo no site de um cliente e os acentos não aparecem, o que tenho que adicionar ou modificar. o site esta hospedado em um servidor linux do terra. grato.
Comentário por Weliton Eloilson Março 3, 2009 @ 7:52 pmOlá Weliton, você precisa mudar o encoding da sua página que está lendo o XML, você pode adicionar inicio do seu arquivo PHP o que segue:
Comentário por Rafael Clares Março 4, 2009 @ 12:58 am@header(‘Content-Type: text/html; charset=iso-8859-1′);
Dentro das tags PHP, claro. Outra tentativa que pode fazer caso essa não funcione é retirar o trecho do código que converte o conteudo com utf8_decode
que está na 5 linha de baixo para cima no arquivo feeds.php, retire o utf8_decode($title[0]) e deixe somente o $title[0], mas isso depois de testar com o cabeçalho PHP que eu disse acima, somente se ele não funcionar. Qualquer coisa me diga..
Certo Rafael, mas onde eu tenho que inserir @header(’Content-Type: text/html; charset=iso-8859-1′); pois a segunda opção tb não deu certo, ficarei grato se conseguir colocar no site sem esse problema. o site é http://www.vecaadvogados.com obrigado!
Comentário por Weliton Eloilson Março 4, 2009 @ 10:07 pmObrigado Rafael esta fuincionando…muito obrigado.
Comentário por weliton Março 4, 2009 @ 10:28 pmOlá Rafael parabéns pelo trabalho eu estou com um probleminha aqui segue os erros…
Warning: feof(): supplied argument is not a valid stream resource in /home/eduardodafo/public_html/homo/wp-content/themes/probama/feeds.php on line 18
Warning: fread(): supplied argument is not a valid stream resource in /home/eduardodafo/public_html/homo/wp-content/themes/probama/feeds.php on line 21
Comentário por Wanderson Março 11, 2009 @ 2:01 pmOlá Wanderson, obrigado pelo comentário!
Comentário por Rafael Clares Março 11, 2009 @ 2:46 pmOlha só, para eu te ajudar preciso saber o que tem na linha que aponta o erro…
Você modificou algo no código, certo ? Pode colocar o trecho do código que está dando erro?
até logo,
Rafael o seguite código estava comentado “ini_set(‘allow_url_fopen’, true);” quando eu retirei o comentário funcionou tranquilo. Outra coisa sem querer abusar muito, mas você sabe como eu faço pra exibir a data e hora da notícia?
Comentário por Wanderson Março 11, 2009 @ 5:05 pmWanderson, é fácil, basta você adicionar a tag que possui tal informação no foreach, nesse trecho do código por ex:
$link = untag2($item, ‘link’);
estamos atribuindo link da notícia à variável link, certo ?
Podemos adicionar qualquer TAG contida no XML/RSS, por exemplo…
No RSS do jornal Estadão a data/hora está na TAG “pubDate”, logo, temos:
$data = untag2($item, ‘pubDate’); // recuperada data da tag pubDate
$html .= “Data de publicação: $data[0]“;
Espero ter ajudado ou dado uma direção ao menos.
Comentário por Rafael Clares Março 11, 2009 @ 5:26 pmabraços,
Rafael,
Desculpe fica te enchendo, mas o que eu posso te errado, segue o código abaixo, porém na index só retorna “Array”…
# Retornando cada tag item do array items
Comentário por Wanderson Março 11, 2009 @ 6:40 pmforeach ($items as $item) {
if ($i < $qtdelinks)
{
# Recuperando o conteudo da tag title
$title = untag2($item, ‘title’);
# Recuperando o conteudo da tag href / link
$link = untag2($item, ‘link’);
# recuperada data da tag pubDate
$data = untag2($item, ‘pubDate’);
# Armazenando o link na var html
$html .= ‘» ‘.$title[0].”\n”. $data;
$i++;
}
}
Wanderson, não está errado mas acontece que vc não informou o indice no vetor $data que incrementa o link.
$data[0];
Tá certinho, veja:
http://clareslab.com.br/learn/feeds/feeds2.php
Abraços,
Comentário por Rafael Clares Março 11, 2009 @ 7:12 pmKaraca, que lerdo eu sou… Valeu….
Comentário por Wanderson Março 11, 2009 @ 8:00 pmolha o erro que ta dando o seu script no meu site, me ajuda a resolver isto.. obrigado pela atenção
Comentário por Allan Março 30, 2009 @ 9:09 pmAllan, como diz a mensagem exibida em sua página, a função fopen está desabilitada em seu servidor. Solicite ao host para habilita-la. abraços
Comentário por Rafael Clares Março 31, 2009 @ 12:09 amOtima funcão! Funcionou legal aqui!
Comentário por Victor Lelis Abril 16, 2009 @ 1:37 pmObrigado!
Ae velho gostei do teu php cara!Mas olha só no meu localhost abre legal…mas no servidor não,ja tinha tentado até outro escript rss/xml e aconteceu a mesma coisa.
O servidor é da via-rs.net,o problema é la isso é certo!
tem alguma idea do que pósa ser?
agradeço se puder me ajudar
Comentário por Lucas Abril 30, 2009 @ 8:38 amOlá Lucas, o problema pode estar relacionado as permissões ao uso da função fopen, certifique-se com seu host quanto a permissão de uso do comando, isso é estranho mas já fiz uso de um host que não me deixava usar a função, o motivo não sei. Pow mas se os caras não lhe derem uma solução aproveita e muda para meu host ha-ha.
abraços,
Comentário por Rafael Clares Abril 30, 2009 @ 12:16 pmEles não disponibilizam função fopen do php!!
Vo ter que usar a função curl!!!
agradeço a atenção!!
Comentário por Lucas Abril 30, 2009 @ 8:12 pmGostaria de saber se a partir desse código é possível filtrar posts por TAGS específicas. Acrescentar algo nesse arquivos feeds.php que fizesse aparecer apenas os posts do blog que interessasse.
Comentário por Olá! Junho 8, 2009 @ 2:32 pmOlá Priscila,
tem sim, na verdade você pode colocar apenas os canaisl RSS que lhe interessem.
Na váriável $feed do código está contido o endereço do jornal A Folha mas você pode
trocar esse endereço pelo endereço do canal de um blog.
Quaisquer dúvidas, fique à vontade para perguntar.
Comentário por Rafael Clares Junho 8, 2009 @ 2:37 pmSim eu sei que é possível setar canais, mas gostaria de dentro de um RSS de um blog eu pudesse filtrar algumas TAGS somente. Por exemplo, gostaria que de todos os post do site X, apenas os que se referem a “gripe suína” aparecessem nessa lista que estou publicando em meu site. É possível?
Comentário por Priscilla Junho 8, 2009 @ 3:29 pmTem como diminuir o espaçamento entre as notícias? Coloquei em meu site o teu código mas tão muito longe as notícias, dá uma olhada ae, http://www.portalpitimbu.com.br desde já agraceço.
Comentário por Pedro Outubro 27, 2009 @ 1:15 pmOla Rafael, bem legal este seu post, mas como citaram acima, meu servidor bloqueia a função Fopen, dizem q fica vulnerave a ataques, mas tem como usar outra (Curl), vc conhece ela? poderia disponibilizar ela para mim e para a galera q sofre com isso. abraço
Comentário por Estevão Novembro 16, 2009 @ 5:47 pmEstevão,
$url = “blablablabla.xml”;
if (!defined(“ch”))
Comentário por Rafael Clares Novembro 16, 2009 @ 9:43 pm{
function setupch()
{
$ch = curl_init();
$c = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
return($ch);
}
define(“ch”, setupch());
function curl_get_contents($url)
{
$c = curl_setopt(ch, CURLOPT_URL, $url);
return(curl_exec(ch));
}
}
Ola muito obrigado pela dica, graças a pessoas como vc q a net vale a pena. mas estou com uma duvida, preciso add mais algum codigo a este ai acima? ou posso só copiar em um arq. novo e fazer um include? fiz isso e n’ao apareceu nada na area da noticia. grato pela ajuda.!!
Comentário por Estevao Novembro 18, 2009 @ 12:27 amOla Rafael muito obrigado pelo codigo, me ajudou bastante, mas tem um problema q não aparece nada qdo eu coloco este codigo, ele precisa ter mais algum codigo para funcionar ou eu posso criar um arq. novo com este q vc me passou e chama-lo com um include? se puder mandar ai… estou pegar os rss de informatica do terra. obrigado pela atenção!!
Comentário por Estevão Novembro 18, 2009 @ 3:26 pmDá sim Priscila, mas assim…. você vai precisar fazer uma busca no titulo da notícia, então acredito que usando expressões regulares para fazer essa busca na tag title você consiga o que quer, claro que não será 100% por que pode ser que hava uma matéria sobre tal assunto mas que o título não faça referência direta, mas acredito que conseguirá 99% das notícias que procura.
Dê uma buscada no google sobre Expressões regulares (preg_match_all) no PHP e aplique na linha
$title = untag2($item, ‘title‘);
Boa sorte!
Comentário por Rafael Clares Junho 8, 2009 @ 3:38 pmPerfeito!! Muito obrigada Rafael! =)
Comentário por Priscilla Junho 8, 2009 @ 3:40 pmEstevão, pode fazer include sim!
Comentário por Rafael Clares Novembro 18, 2009 @ 7:15 pm