Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wonderrow

Problema com RSS dinâmico em PHP.

Recommended Posts

Opa pessoal boa tarde!

Resolvi criar um rss para o site em que sou dono.. Pretendo criar algo dinâmico, atualizado a cada nova notícia.

Tentei de várias formas mas o RSS parece estar inválido, será porque?

 

Vejam o resultado do feed validator: http://feedvalidator.org/check.cgi?url=htt...l.com%2Frss.php

 

E agora o código do RSS:

 

<?php

// Vamos começar criando a conexão com o banco de dados, para podermos pegar as noticias
$conexao = mysql_connect("xxx", "xxx", "xxx");

// Agora vamos selecionar a base de dados na qual as informações serão retiradas
mysql_select_db("xxx");

//Após conectar com o banco de dados, agora vamos umsa a linguagem SQL para podermos selecionar as informações da tabela
$resultado = mysql_query("SELECT * FROM gg_noticias ORDER BY nid DESC");

//Você pode utilizar uma instrução SQL mais completa, para ornedar e listar determinada quanitdade de informações

// Inserimos o cabeçalho XML na página
header("Content-type: application/xml");

// Inserimos o cabeçalho RSS na página, especificando a versão e a codificação
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";

?>

<rss version="2.0">

	<channel>

		<title>GamesGeral.com / Últimas Notícias</title>

		<link>http://www.gamesgeral.com</link>

		<description>A nova geração dos games. O melhor conteúdo relacionado a games, consoles, reviews, previews, notícias, galerias e muito mais. Venha conferir!</description>

		<language>pt-br</language>

		<copyright>GamesGeral.com - Todos os direitos reservados.</copyright>

<?php while($row = mysql_fetch_array($resultado)){

echo "<item>";
echo "<title>".$row['titulo']."</title>";
echo "<description>".$row['game_name']."</description>";
echo "<link>http://www.gamesgeral.com/index.php?s=vnew&nid={$row['nid']}</link>";
echo "</item>";

} ?>

</channel>
</rss>

O erro estaria nessa parte:

echo "<item>";
echo "<title>".$row['titulo']."</title>";
echo "<description>".$row['game_name']."</description>";
echo "<link>http://www.gamesgeral.com/index.php?s=vnew&nid={$row['nid']}</link>";
echo "</item>";

Mais precisamente, nessa linha:

echo "<link>http://www.gamesgeral.com/index.php?s=vnew&nid={$row['nid']}</link>";

 

Se eu a deleto consigo usar o Feed normalmente, mas ela é a responsável para apontar o link da notícia, por isso não posso deletá-la.

 

Link do RSS:

www.gamesgeral.com/rss.php

 

Por favor, me ajudem!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que é porque o $row['nid'] está sem valor.

testa o feed assim:

echo "<link>http://www.gamesgeral.com/index.php?s=vnew</link>";
e depois debuga essa coluna ai...

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas isso não daria certo meu amigo, o $row['nid'] corresponde a ID da notícia. Se colocasse isso que você especificou daria 404, não?

 

edit:

atualizei como falou, e todas as noticias apontavam para um mesmo link (http://www.gamesgeral.com/index.php?s=vnew), e não para o link da notícia.

 

acredito que o problema está especificamente na parte "$row['nid']"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o problema está ai sim.

Veja que no link do validador de RSS que você mandou.. todos os nid estavam SEM VALOR!!

faz apenas isso aqui para vermos oq retorna:

 

<?php while($row = mysql_fetch_array($resultado)){

echo "<link>http://www.gamesgeral.com/index.php?s=vnew&nid=".$row['nid']."</link>\n";

} ?>
Essa coluna, realmente existe ne!? case-sensitive e tal.. ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sou meio que iniciante em programação e PHP, mas sim, esse campo existe na tabela gg_noticias

fiz isso que você falou e as notícias não são mais mostradas, sumiram novamente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá.. mas a idéia era ver o nid aparecer... só isolei o trecho do código para ficar melhor para ver.. retorna o resto agora.

 

<?php while($row = mysql_fetch_array($resultado)){

echo "<item>\n";
echo "<title>".$row['titulo']."</title>\n";
echo "<description>".$row['game_name']."</description>\n";
echo "<link>http://www.gamesgeral.com/index.php?s=vnew&nid=".$row['nid']."</link>\n";
echo "</item>\n\t";

} ?>
a concatenação com o {} que não estava funcionando.

Nunca gerei um feed, mas pelo que tô vendo, ele só vai funcionar, se estiver bem formatado.

http://validator.w3.org/feed/check.cgi?url...l.com%2Frss.php

 

coloque um \n depois de cada echo como fiz acima(editei), e codifique o & por &

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo, valeu mesmo!

Mas, gostaria de colocar a notícia completa no campo <description>, o campo da tabela relacionado a isso tem o nome de 'noticia'. Mas o problema é que a notícia fica na MEMO, e não mostrada ali naquele campo, pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi nada cara..

oque é MEMO ??

 

Pq você não pode fazer simplesmente:

echo "<description>".$row['noticia']."</description>\n";
?

Posta a estrutura da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, me enganei. É que no campo noticia, quando o acesso via MySQL Front ele aparece como MEMO, e não igual quando o acesso via phpmyadmin.

 

Mas havia feito o que você disse acima, mas simplesmente as notícias pararam de aparecer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada no código gerado:

http://validator.w3.org/feed/check.cgi?url...l.com%2Frss.php

# <description><p>Mashahiro Sakurai, criador da nintendo de Kirby, e designer do game Super Smash Bros. Brawl e está criando um novo título que está exatamente de acordo com o anúncio na própria nintendo.</p>
# <p>A companhia de design Sora Ltd., uma desenvolvedora feita pela Nintendo especialmente para uso exclusiva dela mesmo, criou uma nova produtora que foi chamada de: "Project Sora". No caso Sakurai está no alto posto de diretor neste reçém lançado projeto. Como 72% da produtora pertence a Nintendo, ela é a maior investidora da companhia.</p>
acredito que o FEED não possa ter TAGS HTML, pois já é um XML... então esses <p> ai não fazem sentido...

 

tenta remover eles <p> e </p> com um string replace antes de jogar no feed.

http://br.php.net/manual/pt_BR/function.str-replace.php

É certo colocar a notícia inteira assim no FEED ? nunca trabalhei com isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como faço para remover as tags <p> </p>? não entendi muito esse tutorial.

já vi vários feeds com notícias completas, mas como não consigo adicionar um campo de descrição acho melhor assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

use

 

echo "<description>".strip_tags($row['noticia'])."</description>\n";

essa função remove todos códigos HTML de uma variável!

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz assim entao

 

echo "<description>".utf8_encode(strip_tags($row['noticia']))."</description>\n";

ou

 

 

echo "<description>".utf8_decode(strip_tags($row['noticia']))."</description>\n";

 

não lembro qual é o certo agora para converter heheh

Compartilhar este post


Link para o post
Compartilhar em outros sites

Arruma o pubDate, colocando o valor completo.. esses são os exemplos de como ele aceita:

<pubDate>Wed, 02 Oct 2002 08:00:00 EST</pubDate>

	<pubDate>Wed, 02 Oct 2002 13:00:00 GMT</pubDate>

	<pubDate>Wed, 02 Oct 2002 15:00:00 +0200</pubDate>
atualmente, o seu é somente:
<pubDate>2009-02-20</pubDate>
Acho que você deve jogar o Ç mesmo.. em vez da codificação dele..

http://br.php.net/manual/pt_BR/function.ht...tity-decode.php

$noticia = strip_tags($row['noticia']);
echo "<description>".html_entity_decode($noticia)."</description>\n";

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está cadastrando errado.

Tem que ver no script que cria as notícias. Procure usar a função date do php para cadastrar corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um entidade errada lá no meio...

Pesquisei, e acho que não existe:

O certo seria:
«	«	«
Esse caracter é exibido corretamente no browser? quem é ele?

Como a função decode_entity não conseguiu converter, deu o erro, já que pelo que percebemos, o Feed não aceita códigos HTML.

 

Mas você não está jogando tudo isso no banco está? (data/hora)

mostra o teu INSERT ai...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.