Foros del Web » Programando para Internet » PHP »

Problema con generador de RSS

Estas en el tema de Problema con generador de RSS en el foro de PHP en Foros del Web. Hola amigos, les cuento el problema que me ha pasado, desde hace unas horas y no sé cómo es que ha pasado ya que no ...
  #1 (permalink)  
Antiguo 04/06/2008, 17:37
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Problema con generador de RSS

Hola amigos, les cuento el problema que me ha pasado, desde hace unas horas y no sé cómo es que ha pasado ya que no he tocado el script y de buenas a primeras empezó a echar errores cuando enviaba un reporte de actualización a blogalaxia y otros lectores de feeds que no lo pueden leer, el script es este:

Código PHP:
<?php
    $db_direccion 
'****'
    
$db_user '****'
    
$db_pass '****'
    
$db_name '****'
    
$db_table 'articulos'
    
$db_campo_fecha 'fecha'
    
$db_campo_titulo 'titulo';
    
$db_campo_categoria 'categoria';
    
$db_campo_texto 'contenido';
    
$db_campo_url 'id_art';
    
$pg_titulo 'Cinespectaculo.Com';
    
$pg_link 'http://www.cinespectaculo.com';
    
$pg_descripcion 'Weblog sobre temas relacionados al mundo del espectáculo y del séptimo arte';
    
$pg_idioma 'es';
     
    if(isset(
$_REQUEST['perPage'])){ 
        
$perPage $_REQUEST['perPage']; 
    }else { 
        
$perPage 10
    } 
    
header("Content-type: text/xml; charset=iso-8859-1"); 
    echo 
'<'?>?xml version="1.0" encoding="iso-8859-1"?> 
    <rss version="2.0"> 
        <channel>
        <title><?=$pg_titulo?></title>
        <link><?=$pg_link?></link>
        <description><?=$pg_descripcion?></description>
        <pubDate><?php echo date("d-m-Y h:i:s"); ?></pubDate>
        <generator>http://www.cinespectaculo.com</generator>
        <language><?=$pg_idioma?></language>
        <?php
            $db 
mysql_connect($db_direccion,$db_user,$db_pass); 
            include(
'bbcode.php');
            include(
'funcionparrafo.php');
            include(
'funcionfecha.php');
            
$sql "SELECT * FROM $db_table ORDER BY $db_campo_fecha DESC LIMIT 0,$perPage"
            
$qry mysql_db_query($db_name,$sql,$db); 
            if(
mysql_num_rows($qry) == 0) {
                echo 
"No hay articulos publicados";
            }else {
                while(
$row mysql_fetch_array($qry)) {
                    
$fecha obtener_fecha_hora_texto($row[$db_campo_fecha]);
                    
$tit $row[$db_campo_titulo];
                    
$categoria $row[$db_campo_categoria];
                    
$cat $row['cat_name'];
                    
$desc bbcode($row[$db_campo_texto]);
                    
$desc php($desc);
                    echo 
"<item>
                    <title>"
.stripslashes($tit)."</title>
                    <link>http://www.cinespectaculo.com/articulos/"
.$cat."/".$row['sub_title']."/</link>
                    <pubDate>"
.$fecha."</pubDate>
                    <category>"
.$categoria."</category>
                    <description>"
.strip_tags(stripslashes(parrafin($desc)))."</description>
                    </item>"
;
                }
            }
        
?> 
        </channel>
    </rss>
Por ejemplo, Blogalaxia me envía este mensaje de error:
Cita:
Error en Feed : XML error: XML_ERR_NAME_REQUIRED at line 27, column 43

04/06/2008 18:31:30 1. 93007 http://www.cinespectaculo.com/rss.php Fecha del ultimo RSS -> 04/06/2008 05:19:37
Procesando type1 feed http://www.cinespectaculo.com/rss.php
Error: XML_ERR_NAME_REQUIRED at line 27, column 43 -> 32
El directorio de blogs Perublogs me dice lo siguiente:
Cita:
Imposible cargar el título se encontró un error en la línea 29
Error : Whitespace is not allowed at this location.
Url: http://www.cinespectaculo.com/rss.php
La línea 29 a la que hace referencia este error muestra esto: <title>Bruce Willis estará en "Kane & Lynch"</title>

También he probado en la demo online de SimplePie y me dice lo siguiente:
Cita:
XML error: Invalid document end at line 7, column 55
Cada servicio me envía un error diferente, cuando cargo en el navegador mi archivo de RSS me muestra sólo 2 registros cuando en mi table tengo más de 100 y en el sql hago que se muestren los 10 últimos, no consigo dar con el error, espero que alguno de ustede me pueda echar una mano, porque como repito, el script no lo he tocado para nada, en la mañana andubo bien y de un momento a otro comenzó a echar fallos.

Agradezco de antemano la ayuda que pueda recibir.

Saludos
  #2 (permalink)  
Antiguo 04/06/2008, 23:23
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con generador de RSS

haber genera el pubdate antes con

$pubDate = date("r", strtotime($fecha));

y ponle el CDATA a tu descripcion me huele a caracteres no validos para XML

veamos

<description><![CDATA['.strip_tags(stripslashes(parrafin($desc))).']]></description>

segun tienes y me cuentas

dudas :
de donde sale parrafin ????? digo es una funcion pero esta en los includes???? arriba
y seguro que no tienes algun tag html sin su respectivo cierre sabemos que una imagen
<img src="......> sin su cierre da error puede haber pasado algo por alto tume diras...


saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Última edición por kaninox; 04/06/2008 a las 23:29
  #3 (permalink)  
Antiguo 05/06/2008, 10:01
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Problema con generador de RSS

Finalmente pude arreglarlo, el problema estaba en que en uno de los títulos de mis posts, había un ampersand(&), y eso dificultaba que el RSS se genere correctamente, con una función que encontré la web PHP Hispano pude corregir esta falencia y ahora ya está funcionando bien, para quienes deseen la función la dejo aquí:

Código PHP:
<?php
    
function xmlentities($string$quote_style=ENT_QUOTES) {
        static 
$trans;
        if(!isset(
$trans)) {
            
$trans get_html_translation_table(HTML_ENTITIES$quote_style);
            foreach(
$trans as $key => $value)
            
$trans[$key] = '&#'.ord($key).';';
            
// no traduce el '&' si és parte de &xxx;
            
$trans[chr(38)] = '&';
        }
        
// després de traducirlo, pasa el '&' a '&'
        
return preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/","&" strtr($string$trans));
    }
?>
Lo que hace esta función es convertir "&" en "& # 38;"

Saludos y gracias por la ayuda.

PD.: probé lo del pubDate tal como lo pusiste pero el resultado de las fechas me salen como publicado el 1 de enero de 1969, yo guardo las fechas en MySQL como DATETIME, será por eso?
  #4 (permalink)  
Antiguo 05/06/2008, 21:40
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Problema con generador de RSS

de hecho funciona con date time :/ pero bueno si ya te va vale !!! :)
saludos...
__________________
Gokuh Salvo al mundo. PUNTO!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:04.