<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El cajón desastre &#187; Sindicacion</title>
	<atom:link href="http://www.dubasdey.com/category/sindicacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dubasdey.com</link>
	<description></description>
	<lastBuildDate>Tue, 02 Jun 2009 14:25:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como crear un RSS para tu p&#225;gina (y II)</title>
		<link>http://www.dubasdey.com/2007/04/24/como-crear-un-rss-para-tu-pgina-y-ii/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=como-crear-un-rss-para-tu-pgina-y-ii</link>
		<comments>http://www.dubasdey.com/2007/04/24/como-crear-un-rss-para-tu-pgina-y-ii/#comments</comments>
		<pubDate>Tue, 24 Apr 2007 09:12:04 +0000</pubDate>
		<dc:creator>Manuel Cernuda</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Sindicacion]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/04/24/como-crear-un-rss-para-tu-pgina-y-ii/</guid>
		<description><![CDATA[
Ahora solo falta saber como generar&#237;amos este c&#243;digo XML desde nuestra web de manera autom&#225;tica. Para ello utilizaremos PHP conectado a nuestra base de datos de MySQL (Voy a ponerlo lo mas gen&#233;rico posible, cada uno, incluido yo, tenemos nuestras funciones de acceso a base de datos, pero as&#237; todo el mundo podr&#225; verlo de [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.dubasdey.com/wp-content/uploads/2007/04/rss.png' alt='RSS' /><br />
Ahora solo falta saber como generar&iacute;amos este c&oacute;digo <abbr lang="en" title="eXtensible Markup Language">XML</abbr> desde nuestra web de manera autom&aacute;tica. Para ello utilizaremos <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr> conectado a nuestra base de datos de <a href="http://www.mysql.com" title="Get MySQL">MySQL</a> (Voy a ponerlo lo mas gen&eacute;rico posible, cada uno, incluido yo, tenemos nuestras funciones de acceso a base de datos, pero as&iacute; todo el mundo podr&aacute; verlo de manera clara). </p>
<p>\r\n			Para empezar, el archivo ser&aacute; un .php para que el servidor ejecute nuestro c&oacute;digo, pero para ello necesitamos enga&ntilde;ar al navegador cambiando el content type del archivo, para que una vez ejecutado se interprete como <abbr lang="en" title="eXtensible Markup Language">XML</abbr> y no como <abbr lang="en" title="eXtensible Hypertext Markup Language">XHTML</abbr> o <abbr lang="en" title="Hypertext Markup Language">HTML</abbr>.</p>
<p><code><br />
<?php<br />
header("Content-type: text/xml; charset=ISO-8859-1",true);<br />
print "<?xml version=\\"1.0\\" encoding=\\"ISO-8859-1\\" ?>";<br />
?><br />
</code></p>
<p>Inmediatamente despu&eacute;s, comenzar&iacute;amos rellenando la informaci&oacute;n del channel manualmente excepto el <code>&lt;pubDate&gt;</code> que puede automatizarse. La parte interesante llega con los <code>&lt;item&gt;</code>. Haremos una consulta que nos devuelva las ultimas 25 entradas de nuestra p&aacute;gina (esta os toca hacerla a vosotros, ya que cada modelo de datos es diferente, y no funcionaria una en general). Ser&aacute; del estilo a esta:</p>
<p><code><br />
SELECT * FROM POSTS ORDER BY POSTID DESC LIMIT 0,25<br />
</code>	</p>
<p>Ahora utilizaremos esa consulta para recorrer los resultados generando un <code>&lt;item&gt;</code> por cada fila que nos devuelva. Para ello usaremos la conexi&oacute;n entre <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr> y <a href="http://www.mysql.com" title="Get MySQL">MySQL</a>.\r\n	</p>
<p><code><br />
<?php</p>
<p>     // Objeto de Conexi&oacute;n<br />
      $conexion = mysql_pconnect(\’RUTA_SERVIDOR\’,\’USUARIO\’,\’CONTRASE&ntilde;A\’);<br />
      mysql_select_db(\’NOMBRE_BD\’,$conexion) or die(mysql_error());</p>
<p>    // Ejecutar la consulta ($consulta contiene la consulta SQL citada anteriormente)</p>
<p>    $resultado = mysql_query($consulta) or die(mysql_error());<br />
    // Mientras $resultado siga devolviendo filas creamos un <item><br />
    while ($fila=mysql_fetch_array($resultado)) {<br />
        ?><br />
            <item></p>
<link>http://www.web.com/index.php?p=<?= $fila["POSTID"] ?></link>
<pubDate><?= date("r",makeDate($fila["FECHA"])) ?></pubDate>
                <dc:creator>AUTOR&lt;AUTORl@web.com&gt;</dc:creator><br />
                <guid isPermaLink="true">http://web.com/index.php?p=<?=$fila["IDPOST"] ?></guid></p>
<p>                <description><![CDATA[ <?=$fila["POST"] ?>]]&gt;</description><br />
             </item><br />
         <?<br />
     }</p>
<p>?><br />
</code></p>
<p>Como ya avise antes, hay que tener cuidado con las con las fechas del <code>&lt;pubDate&gt;</code>, para eso utilizo una funci&oacute;n que me paso <a href="http://dubasdey.com/rss.php" title="RSS" target="_blank"><img src="http://www.melkorcete.com/icos/feed.png" alt="Feed" border="0" /></a><a href="http://dubasdey.com" target="_blank" title="El Caj&oacute;n Desastre">dubas</a> que soluciona ese problemilla convirtiendo la fecha al formato de <a href="http://asg.web.cmu.edu/rfc/rfc822.html" target="_blank" title="RFC 822">RFC 822</a> v&aacute;lido. </p>
<p><code><br />
 function makeDate($date) {<br />
      $dm=explode(\’ \’,$date);<br />
      $f=explode(\’-\’,$dm[0]);<br />
      $h=explode(":",$dm[1]);<br />
      return mktime($h[0],$h[1],$h[2],$f[1],$f[2],$f[0]);<br />
 }<br />
</code></p>
<p>Con esto ya tendr&iacute;ais la base de vuestro <abbr lang="en" title="Really Simple Syndication">RSS</abbr>, otras cosas que pod&eacute;is a&ntilde;adirle, es controlar si se introducen valores por <code>$_GET</code> (rss.php?c=1) para tener <abbr lang="en" title="Really Simple Syndication">RSS</abbr> que filtre por categor&iacute;as. Eso ya os lo dejo a vuestro criterio. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/04/24/como-crear-un-rss-para-tu-pgina-y-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como crear un RSS para tu p&#225;gina (I)</title>
		<link>http://www.dubasdey.com/2007/04/20/como-crear-un-rss-para-tu-pgina-i/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=como-crear-un-rss-para-tu-pgina-i</link>
		<comments>http://www.dubasdey.com/2007/04/20/como-crear-un-rss-para-tu-pgina-i/#comments</comments>
		<pubDate>Fri, 20 Apr 2007 18:44:49 +0000</pubDate>
		<dc:creator>Manuel Cernuda</dc:creator>
				<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Sindicacion]]></category>

		<guid isPermaLink="false">http://www.dubasdey.com/2007/04/20/como-crear-un-rss-para-tu-pgina-i/</guid>
		<description><![CDATA[
Mucha gente que se hace su propia web o blog, independientemente de cual sea su motivo, querr&#225; disponer de los servicios habituales de una web o un blog convencional. Estas utilidades de las que disponen los CMS, son ya casi imprescindibles para el correcto uso y disfrute de las mismas, y por tanto renunciar a [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.dubasdey.com/wp-content/uploads/2007/04/rss.png' alt='RSS' /><br />
Mucha gente que se hace su propia web o blog, independientemente de cual sea su motivo, querr&aacute; disponer de los servicios habituales de una web o un blog convencional. Estas utilidades de las que disponen los <abbr lang="en" title="Content Management System">CMS</abbr>, son ya casi imprescindibles para el correcto uso y disfrute de las mismas, y por tanto renunciar a un <abbr lang="en" title="Content Management System">CMS</abbr> no puede significar renunciar a estos servicios. </p>
<p>Una de las utilidades m&aacute;s necesarias para cualquier p&aacute;gina es el <abbr lang="en" title="Really Simple Syndication">RSS</abbr> o feed. Para los no iniciados, el feed es un documento en formato <abbr lang="en" title="eXtensible Markup Language">XML</abbr> que contiene informaci&oacute;n, titulares y noticias de una web, de manera que cada vez que se actualiza, el feed tambi&eacute;n lo hace. Existen muchos programas cuyo prop&oacute;sito es gestionar estos feeds. Es una buena manera de estar al d&iacute;a con las p&aacute;ginas / blogs / planets que sigues habitualmente sin tener que abrirlas todas, y siempre puedes acceder desde ellos a esa noticia / post en concreto para comentar (en el caso de que se pueda) o ver la pagina en tu navegador habitual. </p>
<p>Como se cit&oacute; anteriormente, el formato de &eacute;ste documento es <abbr lang="en" title="eXtensible Markup Language">XML</abbr>, por tanto <a href="http://blogs.law.harvard.edu/tech/rss" target="_blank" title="RSS 2.0 Reference">tendremos que ce&ntilde;irnos a una referencia</a> para que este documento sea standard y as&iacute; nadie tenga problemas con &eacute;l, ampliando un poco mas la accesibilidad de nuestra p&aacute;gina / blog. Adem&aacute;s, la familia de los feeds se divide en dos escuelas mayoritarias, el <abbr lang="en" title="Really Simple Syndication">RSS</abbr> (0.x, 1.0 y 2.0) y Atom (1.0). Este &uacute;ltimo naci&oacute; para tratar de unificar el <abbr lang="en" title="Really Simple Syndication">RSS</abbr> o RDF y ha acabo siendo un nuevo modelo pese a seguir en desarrollo. </p>
<p>Nosotros vamos a centrarnos en el m&aacute;s com&uacute;n y en principio preferido por la mayor&iacute;a de los desarrolladores, el <abbr lang="en" title="Really Simple Syndication">RSS 2.0 </abbr>. Lo primero que tenemos que entender es la estructura b&aacute;sica de nuestro <abbr lang="en" title="eXtensible Markup Language">XML</abbr>. </p>
<p><rss version="2.0" ><br />
     <channel><br />
         <title></title></p>
<link></link>
         <description></description><br />
         <image><br />
                 <url></url></p>
<link></link>
                 <title></title><br />
         </image></p>
<pubDate></pubDate>
     </channel><br />
     <item><br />
         <title></title></p>
<link></link>
         <category></category></p>
<pubDate></pubDate>
         <dc:creator></dc:creator><br />
         <guid isPermaLink="true"></guid><br />
     </item><br />
 </rss></p>
<p>Este seria el orden habitual de creaci&oacute;n del <abbr lang="en" title="eXtensible Markup Language">XML</abbr> para un <abbr lang="en" title="Really Simple Syndication">RSS</abbr>. Para poder utilizar la mayor&iacute;a de estas etiquetas, es necesario especificar una serie de doctypes que proveer&aacute;n al documento de significado. Los m&aacute;s habituales son estos: </p>
<p><rss version="2.0" xmlns:Dc="http://purl.org/dc/elements/1.1/"<br />
     xmlns:Sy="http://purl.org/rss/1.0/modules/syndication/"<br />
     xmlns:admin="http://webns.net/mvcb/"<br />
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"<br />
     xmlns:content="http://purl.org/rss/1.0/modules/content/"<br />
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"<br />
     xmlns:dc="http://purl.org/dc/elements/1.1/" ></p>
<p>Ahora, vamos a ver para qu&eacute; son las etiquetas. Comenzamos con <code>&lt;channel&gt;</code>, que es un meta-elemento, es decir, va a proporcionar informaci&oacute;n sobre el feed y sobre la web a la que pertenece. Todos sus subitems estar&aacute;n relacionados con dicha informaci&oacute;n.</p>
<p>El siguiente elemento mas importante es <code>&lt;item&gt;</code>, y deber&aacute; haber uno completo por cada entrada que se quiera enviar v&iacute;a <abbr lang="en" title="Really Simple Syndication">RSS</abbr>. Por lo general entre 5 y 25 entradas. Lo que identifica a un <code>&lt;item&gt;</code> es su <code>&lt;guid&gt;</code>, que es un identificador &uacute;nico que servir&aacute; a los agregadores para saber si hay elementos nuevos, adem&aacute;s del <code>&lt;pubDate&gt;</code> del <code>&lt;channel&gt;</code>. Si el <code>&lt;guid&gt;</code> ya existe, el agregador lo ignorar&aacute; (esto es importante de cara a las modificaciones de una entrada). </p>
<p>Hay que tener en cuenta, que el <code>&lt;pubDate&gt;</code> no admite nada mas que fechas en formato <a href="http://asg.web.cmu.edu/rfc/rfc822.html" target="_blank">RFC 822</a>, por tanto tal vez debamos crearnos una funci&oacute;n que devuelva el valor almacenado en ese formato m&aacute;s espec&iacute;fico.</p>
<p>La <code>&lt;image&gt;</code> esta formada por tres subitems, <code>&lt;url&gt;</code> (el <code>src</code> de la imagen), <code>&lt;link&gt;</code> (la <abbr lang="en" title="Uniform Resource Locator">URL</abbr> a la que apunta la imagen) y <code>&lt;title&gt;</code> (el texto alternativo o <code>alt</code>). Estos subitems se renderizan en un equivalente al <code>&lt;a href=&quot;link&quot;&gt;&lt;img src=&quot;url&quot; alt=&quot;title&quot; /&gt;&lt;/a&gt;</code>.</p>
<p> Y con &eacute;sto ya quedar&iacute;a claro que es un <abbr lang="en" title="Really Simple Syndication">RSS</abbr>&#8230; En el proximo art&iacute;culo lo generaremos con <abbr lang="en" title="PHP: Hypertext Preprocessor">PHP</abbr> y <a href="http://www.mysql.com" title="Get MySQL">MySQL</a>.</p>
<p>To be continued&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dubasdey.com/2007/04/20/como-crear-un-rss-para-tu-pgina-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

