miércoles, 18 de septiembre de 2013

Cómo hacer un feed RSS en PHP desde MySQL

aveces sucede que queremos generar un feed para un determinado propósito por ejemplo en mi caso necesitaba enviar los últimos artículos de mi página a Facebook y Twitter y era indispensable
contar con un feed, como mi web no contaba con el generador de feeds tuve que realizarlo desde cero, por cierto un trabajo cuasi artesanal ya que WordPress y algunos plugins se encargan de este tema, sin mas chachara aquí una solución partiendo de un esqueleto XML normalizado en UTF-8 , el código es simple y se explica por si solo.

Pero antes de echar mano al código es conveniente tener en cuenta algunos puntos,

Debemos crear una carpeta llamada feed y subir el script a esta carpeta como index.php

primero se envía una cabecera del tipo xml al cliente osea al navegador, luego se preparan las fechas en formato RFC 2822 (esto es esencial, es una norma, para las fechas en los feeds)

Para usar el script van a tener que cambiar las variables, por los nombres correspondientes a su web y por las claves de sus bases de datos además de colocar los nombres de las tablas y campos según correspondan,

Por último según donde corran el script, puede suceder que no se muestre el feed correctamente, en ese caso retirar las funciones  utf8_encode que se encuentran en el script.


<atom:link href="$atomLink" rel="self" type="application/rss+xml">
<link></link>$link
<description>$description</description>
<language>es</language>
<lastbuilddate>$lastBuildDate</lastbuilddate>
<generator>$generator</generator>EOD;$host="";$user="";$pass="";$bdatos="";$tabla="";$db = new mysqli($host, $user, $pass, $bdatos);
if($db->connect_errno > 0){
die('No se puede conectar a la base de datos [' . $db->connect_error . ']');
}$sql = <<<sql from="" if="" result="$db-" select="" sql="" tabla="">query($sql)){
die('Hubo un error al ejecutar la consulta [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){$mysqlDateStr = strtotime($row['ad_startdate']);
echo '
<item>
<title><![CDATA['.utf8_encode(ucfirst(strtolower($row['ad_title']))).']]></title>
<link></link>http://mi-pagina.com
<pubdate>'.date("D, d M Y H:i:s O",$mysqlDateStr).'</pubdate>
<description></description>
<category></category>
<guid ispermalink="false">http://mipagina.com</guid>
</item>
';
}

echo'</sql></atom:link></channel>
</rss>';

?> 
Reacciones:

0 comentarios: