RSS Syndication · 5 min read · Sep 14, 2025

Syndicação de RSS Fácil com MagpieRSS

Syndicação de RSS Fácil com MagpieRSS

O que é MagpieRSS?

MagpieRSS, carinhosamente conhecido como Magpie, é um parser de RSS e Atom para PHP. Ele permite que você exiba os artigos mais recentes de sites com feeds RSS ou Atom em seu próprio site. Esta é uma ótima maneira de adicionar informações novas, frescas e relevantes ao seu site. Ele analisa RSS 0.9, RSS 1.0 e tem algum suporte para RSS 2.0, bem como Atom 0.3.

O que eu preciso para usar o Magpie?

Para usar o Magpie, seu servidor deve suportar a versão PHP 4.2.0 com suporte a XML, ou PHP5 com suporte a libxml2. Depois disso, configurar e usar o Magpie é muito fácil.

Ok, já ouvi o suficiente, onde eu consigo?

Você pode baixar o Magpie do SourceForge clicando aqui.

E agora?

Basta extrair o arquivo e fazer o upload dos seguintes arquivos para o seu servidor: rss_fetch.inc, rss_parser.inc, rss_cache.inc e rss_utils.inc, além de todo o diretório chamado extlib. Você pode colocar esses arquivos em qualquer diretório na raiz do seu servidor web. Eu costumo enviá-los para um diretório chamado rss.

Em seguida, você precisa decidir onde gostaria que o conteúdo sindicado fosse exibido. Por exemplo, se você quiser sindicar conteúdo no índice de www.example.com, você precisará editar o arquivo index.html(php). Se seu arquivo não terminar em php, você precisará alterá-lo para que termine, pois estaremos adicionando código php a ele.

A seguir, vamos realmente editar o arquivo index.php. Precisamos adicionar o seguinte código ao topo da página onde você deseja exibir os feeds:

Por favor, note que seu caminho pode ser diferente dependendo de como você nomeou o diretório e onde na árvore seu index.php reside. Para realmente adicionar os feeds à sua página, você também precisa adicionar as seguintes linhas para buscar e analisar o RSS:

e substituir o endereço pelo endereço do feed que você deseja exibir.

Isso retornará um array, $rss que inclui o conteúdo sindicado, bem como algumas informações sobre o publicador. As outras informações retornadas (geralmente) são o nome do publicador, armazenado em $rss->channel[‘title’], uma descrição do publicador armazenada em $rss->channel[‘description’], e um link geral para o publicador armazenado em $rss->channel[‘link’].

Os itens podem ser acessados através de $rss->items e um loop simples pode ser usado para percorrer os itens um por um. O código para o loop é:

foreach ($rss->items as $item)  
        { // Código para manipular os itens aqui  
        }

Cada item contém um título, link e descrição. $item[‘title’] contém o título do artigo, $item[‘link’] é o link para o original e $item[‘description’] é a descrição da história, que muitas vezes é as primeiras linhas do conteúdo. Uma lista básica do conteúdo sindicado pode ser obtida usando o seguinte código:

channel['link'].">".$rss->channel['title']."";  
foreach ($rss->items as $item) {  
        $href = $item['link'];  
        $title = $item['title'];  
        $desc = $item['description'];  
        echo "  

$title
"; if($desc) echo $desc; }?>

Isso é bem básico, mas você deve ser capaz de personalizá-lo para atender às suas necessidades.

Problemas e Soluções Gerais

O conteúdo sindicado é muito longo para o meu site.

Se o conteúdo que você está sindicando é muito longo ou contém muitos itens e começa a deixar seu site com uma aparência estranha, você pode simplesmente adicionar as seguintes linhas para definir a quantidade de entradas exibidas e definir o comprimento da descrição.

$items = array_slice($rss->items, 0, 5);

Esta linha retorna apenas um subconjunto do feed, neste caso, apenas as primeiras 5 entradas. Para encurtar a descrição, você usaria as seguintes linhas:

if (strlen($desc) >= 100)  
{  
        $desc = substr($desc,0,99)."...";  
}

O que isso faz é verificar se o comprimento da string para a descrição é maior que 100 caracteres, o que, se for, exibirá os primeiros 99 e … depois para avisar o leitor que continua.

Eu gostaria de habilitar o cache dos feeds para reduzir a largura de banda e acelerar o carregamento. Isso é possível?

Com certeza! O Magpie tem o cache habilitado por padrão, mas você provavelmente precisará mudar o diretório para onde ele armazena o cache, além de torná-lo gravável pelo usuário com o qual o servidor é executado. Ele tenta gravar no diretório de trabalho em que o script é chamado. Por exemplo, se você adicionar o feed à sua página inicial, o script tentará criar o diretório de cache na raiz do seu servidor. As seguintes linhas habilitam o cache e definem o diretório onde ele é armazenado:

define('MAGPIE_CACHE_DIR', '/tmp/magpie_cache');  
define('MAGPIE_CACHE_ON', 1);

Por padrão, o Magpie apenas armazena itens em cache por uma hora, mas isso pode ser alterado com a seguinte linha:

define('MAGPIE_CACHE_AGE', 1800);

Isso define o Magpie para armazenar itens em cache por 30 minutos. É importante notar que o intervalo é especificado em segundos.

Ok, eu adicionei essas linhas, mas o cache ainda não está funcionando!

Você precisa ter certeza de que o diretório que você definiu para o cache existe e é gravável pelo usuário com o qual o servidor é executado. No Debian, esse usuário é www-data. Sinto muito, mas não sei qual usuário o apache executa por padrão em outras distribuições. Você pode fazer isso com os seguintes comandos (como root):

mkdir /tmp/magpie_cache  
chown www-data:www-data /tmp/magpie_cache

Por favor, note que o cache não precisa estar em /tmp e é realmente uma boa ideia mudar se você usar hospedagem compartilhada. Depois disso, atualize a página e você deve ver alguns arquivos com nomes muito estranhos no diretório de cache. Se você fizer tudo isso, está tudo certo. Se não, consulte a FAQ na Página Inicial do MagpieRSS.

Juntando tudo

A seguir está como as opções devem ser combinadas, e é um exemplo funcional com pequenas modificações do meu próprio site.

items, 0, 5);  
foreach ($items as $item) {  
        $href = $item['link'];  
        $title = $item['title'];  
        $desc = $item['description'];  
        echo "  

$title
"; if($desc) if (strlen($desc) >= 125) { $desc = substr($desc,0,124)."..."; } echo $desc; } ; ?>

Isso recupera o feed de www.digg.com na seção Linux e exibe as primeiras 5 entradas com uma descrição de 125 caracteres de comprimento. Ele também armazena em cache no diretório /var/cache com o tempo de cache padrão de 1 hora.

E aí está, uma sindicação de RSS rápida e fácil com MagpieRSS! Se você precisar de mais informações, ajuda ou qualquer outra coisa, recomendo fortemente que você confira a Página Inicial do MagpieRSS. Eles também têm uma lista de discussão ativa e mantêm arquivos que responderam às minhas perguntas toda vez que precisei de ajuda.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.