Redirecionando seu feed para o Feedburner
Recebi alguns emails e comentários sobre o último post de pessoas com dificuldade para configurar o redirecionamento dos seus feeds atuais para o feedburner.
[update]
Se você usa Wordpress, pode usar o Wordpress Feedburner Plugin. Eu não testei, mas pelo que li parece que ele faz todo o trabalho sujo pra você. Se alguém tiver testado, por favor, me conte como é e eu posto aqui.
[update2]
Atualizei o post pra dizer que, se você usa o wordpress e não está afim de usar o plugin citado acima, você tem que colocar qualquer regra de reescrita deste artigo antes das regras do wordpress. Da seguinte forma, por exemplo:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !feedBurner [NC]
RewriteRule ^feed/?$ http://feeds.feedburner.com/meufeed [R=302,L]
RewriteEngine Off
# BEGIN WordPress
Se as regras forem colocadas depois das do wordpress, ele simplesmente vai aplicar as regras dele e finalizar a reescrita, sem nem ao menos ler as regras que você fez.
Outro motivo para o update é que é interessante fazer a checagem do user agent de forma que seja ignorada a caixa das letras. Ou seja, usando o [NC], como acima.
[/update2]
E para os usuários de Movable Type também tem um plugin. Acho que a Simone está usando e, pelo jeito, está funcionando muito bem.
[/update]
Como eu disse, para fazer esse tipo de coisa, é necessário pelo menos um mínimo de conhecimento sobre HTTP. Você precisa saber manipular redirecionamentos e verificar User Agents seja pelo seu servidor HTTP, seja por alguma linguagem que rode no servidor.
Como vejo que há muitas pessoas com dúvidas sobre isso, vou explicar rapidamente como configurar os tais redirecionamentos.
Vou usar três hipóteses e dar a solução para cada uma delas: feeds estáticos, feeds dinâmicos acessados por uma URL sem query string (variáveis na URL, do tipo ?var1=valor1&var2=valor2) e feeds dinâmicos com query string.
Feeds estáticos
Feeds estáticos são meros arquivos em XML plano, que podem ser acessados via uma URL que reflita sua posição no sistema de arquivos abaixo da root do site ou por alguma URL customizada, seja por meio de mod_rewrite, PHP ou algum outro meio.
Vamos ver como proceder nos dois casos.
Para o nosso exemplo, vamos imaginar um arquivo chamado feed.xml, localizado na raiz do seu site. Normalmente ele pode ser acessado pela URL http://seusite.com/feed.xml.
Vamos assumir também que a URL do novo feed gerado no feedburner seja http://feeds.feedburner.com/meufeed.
Nesse caso, há duas maneiras de você fazer com que seus leitores continuem acessando a url dentro do seu site e sejam redirecionadas para o feedburner: mantendo o mesmo arquivo e verificando o user agent ou mudando o nome do arquivo.
Se você mudar o nome do arquivo, a coisa se simplifica. Nesse caso o mod_rewrite nem é necessário. Por exemplo, se seus usuários acessam /feed.xml, voce pode trocar o nome desse arquivo pra feed-fb.xml, usar essa URL no feedburner e redirecionar a URL que seus usuários acessam com uma regra de redirecionamento (mod_alias):
Redirect /feed.xml http://feeds.feedburner.com/meufeed
Note que o arquivo feed.xml não existe mais. O que há agora é uma URL, /feed.xml, que simplesmente redireciona para um outro local.
Se você mantiver o arquivo com o mesmo nome, o que você precisa fazer é apenas incluir as linhas abaixo no seu arquivo .htaccess, na raiz do site (no mesmo diretório onde está o feed):
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !feedBurner [NC]
RewriteRule ^feed\.xml$ http://feeds.feedburner.com/meufeed [R=302,L]
Isso significa: se o user agent não for o feedburner, ao receber uma requisição para feed.xml, redirecione para http://feeds.feedburner.com/meufeed. Esse redirecionamento é temporário (R=302), e essa regra deve ser a última a ser processada (L), ou seja, qualquer regra abaixo desta deve ser ignorada.
A primeira linha é necessária porque o feedburner precisa continuar tendo acesso à URL original, e não ser redirecionado pra si mesmo.
Agora, imaginemos que o seu feed (feed.xml) seja acessado pela url http://seusite.com/feed de acordo com uma regra de reescrita, como a abaixo:
RewriteRule ^feed\/?$ /feed.xml
Os usuários devem continuar acessando essa URL (/feed) e ser redirecionados para a nova, no feedburner. Para isso, use uma regra bem parecida com a primeira:
RewriteCond %{HTTP_USER_AGENT} !feedBurner [NC]
RewriteRule ^feed\/?$ http://feeds.feedburner.com/meufeed [R=302,L]
RewriteRule ^feed\/?$ /feed.xml
Ou seja, qualquer um, menos o feedburner, vai ser redirecionado. Acho que você já pegou a idéia, né? Que bom…
Feeds dinâmicos sem query string
Mesmo que o seu feed seja dinâmico, leia a parte acima, sobre feeds estáticos, para entender como funciona o esquema do redirecionamento. A mágica com os arquivos dinâmicos é exatamente a mesma.
Digamos que o seu feed se chame feed.php e esteja localizado na raiz do seu site. E a URL do feed no feedburner é a mesma que usamos acima.
No caso de você fornecer a seus leitores a url com a localização do arquivo PHP (http://seusite.com/feed.php), use a seguinte regra:
RewriteCond %{HTTP_USER_AGENT} !feedBurner [NC]
RewriteRule ^feed\.php$ http://feeds.feedburner.com/meufeed [R=302,L]
A explicação é a mesma dada acima.
No caso de você fornecer uma URL customizada, como por exemplo http://seusite.com/feed, use a regra:
RewriteCond %{HTTP_USER_AGENT} !feedBurner [NC]
RewriteRule ^feed\/?$ http://feeds.feedburner.com/meufeed [R=302,L]
RewriteRule ^feed\/?$ /feed.php
Ou seja, funciona da mesma forma que quando o feed é estático. Mas, como eu sei que vão perguntar, acho que pecar por excesso não é o pior dos pecados
.
Feeds dinâmicos com query string
Vou usar o exemplo do nosso amigo Rodrigo Ghedin. O feed do site dele tem uma URL que consiste do nome de um arquivo PHP mais uma query string. A URL é http://winajuda.com/news/rss.php?f=view. E qual o problema com isso? Bem, o mod_rewrite não intercepta a query string. Ou seja, se você reescreve um arquivo rss.php para, por exemplo, feed.rss, este último aceitaria normalmente as query strings na URL. Ou seja, você precisaria acessar por /feed.rss?f=view.
Trocando em miúdos, se você usar
RewriteRule ^rss\.php$ http://feeds.feedburner.com/meufeed [R=302,L]
e acessasse http://seusite.com/rss.php?f=view, você seria redirecionado para a URL do feedburner, com a query string no fim. Assim: http://feeds.feedburner.com/meufeed?f=view.
Isso não causa problemas, na verdade, mas fica um pouco estranho. Esse caso não é, na verdade, o melhor para demonstrar o problema com as query strings mas, se você tem algum caso em que várias variáveis sejam passadas pela query string e isso não possa ser mudado, saiba que o mod_rewrite não é muito seu amigo nesse caso. Você não pode fazer, por exemplo:
RewriteRule ^rss\.php\?f=view$ http://feeds.feedburner.com/meufeed [R=302,L] #isso é errado
Isso não vai funcionar. A melhor maneira de resolver isso é, com certeza, no próprio PHP. E é muito simples.
[update]
Estive discutindo sobre isso com o Danilo hoje e ele me mostrou um texto que mostra como lidar com query strings com mod_rewrite. No caso do nosso exemplo, a regra seria assim:
RewriteCond %{HTTP_USER_AGENT} !feedBurner [NC]
RewriteCond %{QUERY_STRING} ^f=view$
RewriteRule ^rss\.php$ http://feeds.feedburner.com/meufeed? [R=302,L]
[/update]
Continuando a usar o exemplo do Ghedin, ele precisa apenas colocar algumas linhas no início do arquivo rss.php:
<?php
$ua = $_SERVER['HTTP_USER_AGENT'];
if ((isset($_GET['f'])) &&
($_GET['f'] == 'view') &&
(! eregi('feedburner', $ua)))
{
header("Location: http://feeds.feedburner.com/meufeed");
exit; # so pra garantir que não continue a execução
}
?>
Simples assim. Acho que não é necessário explicar as linhas acima, assumindo que você entenda pelo menos um pouco de PHP.
Bom, é isso. Acho que com esse texto você tem o básico para brincar com redirecionamentos. Mas, lembre-se, HTTP é a base da web. Você precisa entendê-lo pelo menos um pouco. Portanto, vale a pena dar uma estudada sobre o assunto. Uma busca no google é um bom começo.
Compare preços de: motos usadas yamaha, motos usadas honda, celulares baratos, automóveis celta, Macbook Pro, Celulares Desbloqueados, Livros Dan Brown, Celulares Motorola, camera samsung l100
Leia também:
- Feedburner bagunçando caracteres especiais em UTF-8
- Feedburner: estatísticas, economia de banda e um trato no visual dos seus feeds
- Feed do Jakob Nielsen agora com conteúdo completo
- Mudanças no serviço “BrowserFriendly” do FeedBurner
- Como saber a quantidade de assinantes de um feed no Google Reader
- Hospedagem de sites Dreamhost: 50% de desconto


Poxa, obrigado pela atenção especial dada ao meu problema! Entretanto, ou ele é muito cabeludo mesmo, ou eu sou muito incompetente.
Adicionei as linhas acima no início do rss.php, subistitui o endereço do feed pelo correto, mas quando tentei acessá-lo, no agregador dá erro, e no navegador, aparece a seguinte mensagem:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ‘]’ in /home/winajuda/public_html/news/rss.php on line 4
E aproveitando o espaço, sem querer abusar, não ficou muito claro se devo ou não adicionar a linha abaixo no .htaccess:
RewriteRule ^rss\.php$ http://feeds.feedburner.com/meufeed [R=302,L]
Tentei com ela, e sem também, em ambos os casos, não obtive sucesso. Mas enfim, creio que o problema esteja ali no código PHP mesmo (sou tapado em PHP, sorry).
Mais uma vez, obrigado!
Abraços!