Comunidad de diseño web y desarrollo en internet online

Recomendaciones en Validación Feed RSS escrito en PHP

Citar            
MensajeEscrito el 10 Ene 2012 03:18 am
Saludos amigos de Cristalab.

Estoy agregando la funcionalidad de los feeds rss a mi sitio, y cuando paso el código por el validador del W3 me dice "Congratulations! This is a valid RSS feed". Sin embargo, el validador me arroja algunas "sugerencias" que no he logrado eliminar. He seguido las recomendaciones y lo único que conseguí es que mi código dejase de ser válido.
:cry:
Mi código creado por mi mismísimo:

Código PHP :

<?php
echo '<?xml version="1.0" encoding="utf-8"?>';
require_once("php/conexion.php");
$consulta ="select * from noticias order by id_noticia desc";
$resultado = mysql_query ($consulta) or die (mysql_error());
echo '<rss version="2.0">';
echo '<channel>';
echo '<title>Canal de Noticias</title>';
echo '<link>http://www.sitio.cl</link>';
echo '<language>es</language>';
echo '<generator>Nombre</generator>';
echo '<description>Descripcion</description>';
while ($noticias = mysql_fetch_array($resultado)){
echo '<item>';
echo '<title>'.$noticias['titulo'].'</title>';
echo '<link>http://www.sitio.cl/noticias.php</link>';
echo '<pubDate>'.date('D, d M Y H:i:s O', strtotime($noticias['fecha'])).'</pubDate>';
echo '<description>'.$noticias['contenido'].'</description>';
echo '</item>';
};
echo '</channel>';
echo '</rss>';
?>
Las sugerencias son las siguientes:
1. Feeds should not be served with the "text/html" media type.
2. Your feed appears to be encoded as "utf-8", but your server is reporting "US-ASCII".
3. Item should contain a guid element.
4. Missing atom:link with rel="self".

1. Probé modificando lo que sale en "help" pero sólo conseguí que mi código dejase de ser válido.
2. Probé poniendo "US-ASCII" en lugar de utf-8 y me dio error.
3. Seguí la recomendación de "help" y no funcionó.
4. Seguí la recomendación de "help" y no funcionó.

¿Alguna idea de cómo quitar esos mensajes? ¿O sólo los ignoro?

Les agradeceré cualquie comentario. Como les mencioné. mi script funciona y es válido, pero me molestan esas "sugerencias" ya que quiero conseguir un código 100% válido.

Buena Caza y Largas Lunas.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 10 Ene 2012 12:31 pm
Bien al inicio del script deberías poner:

Código PHP :

header("Content-Type: application/rss+xml; charset=UTF-8");

Eso satisfacería las dos primeras sugerencias.
Para la nº3 supongo que dentro del elemento <item> también debe ir un elemento <guide> pero no sé para qué sirve.
Y la número 4 no tengo idea qué quiere decir...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 Ene 2012 09:40 pm
Gracias DriverOp por responder como siempre.

1 & 2. En efecto, con la línea que dejaste desaparecieron las dos primeras advertencias. ^^

3. Seguí investigando y comprendí que el elemento <guid> sirve para darle un identificador único a cada <item> del rss. Así que bastó con agregar en el while lo siguiente:

Código PHP :

echo '<guid isPermaLink="false">algo'.$noticias['id_noticia'].'</guid>';
Si la línea anterior se deja en true, exige una url completa al parecer porque me dice algo de la url. Pero como en mi caso todas las noticias están en la misma página y el <guid> debe ser único, lo dejé así y le agregué una palabra para que el indicador sea más único (si dejo sólo el id me avisa que el <guid> no es tan único) y la advertencia desapareció.

4. La última sugerencia tenía que ver con el formato ATOM. Aún no lo entiendo bien del todo pero creo que está relacionado con la evolución de los estándares del rss. Al final agregué dentro de <channel> la siguiente línea:

Código PHP :

echo '<atom:link href="http://www.regline.cl/rss/noticias.php" rel="self" type="application/rss+xml" />';
También modifiqué la especificación del rss. Y todas las advertencias desaparecieron. Ahora tengo mi script rss con php 100% validado por el W3C.

:cool:

Les dejo el script completo:

Código PHP :

<?php
header("Content-Type: application/rss+xml; charset=UTF-8");
echo '<?xml version="1.0" encoding="utf-8"?>';
require_once("php/conexion.php");
$consulta ="select * from noticias order by id_noticia desc";
$resultado = mysql_query ($consulta) or die (mysql_error());
echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
echo '<channel>';
echo '<title>Canal de Noticias</title>';
echo '<link>http://www.sitio.cl</link>';
echo '<language>es</language>';
echo '<generator>Nombre</generator>';
echo '<description>Descripcion</description>';
echo '<atom:link href="http://www.sitio.cl/rss/noticias.php" rel="self" type="application/rss+xml" />';
while ($noticias = mysql_fetch_array($resultado)){
echo '<item>';
echo '<title>'.$noticias['titulo'].'</title>';
echo '<link>http://www.sitio.cl/noticias.php</link>';
echo '<guid isPermaLink="false">regline'.$noticias['id_noticia'].'</guid>';
echo '<pubDate>'.date('D, d M Y H:i:s O', strtotime($noticias['fecha'])).'</pubDate>';
echo '<description>'.$noticias['contenido'].'</description>';
echo '</item>';
};
echo '</channel>';
echo '</rss>';
?>
Gracias DriverOp por, como siempre, salir al rescate.

Buena Caza y Largas Lunas.

¡SOLUCIONADO!

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 11 Ene 2012 12:19 pm
Pues alégrome :)

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.