Kumbia feed

Hola, hacía bastante tiempo que no me pasaba por aquí, como 8 o 9 meses, me alegro de veros. Ahora vengo aportando en vez de preguntando, jeje.

He escrito las clases necesarias para integrar en Kumbia un sistema de feeds, tanto para leerlos como para escribirlos. Por ahora implementan el sistema mínimo para poner un lector de feeds en nuestras aplicaciones Kumbia, o para ser nosotros quienes los publiquemos. El tema de los feeds es muy amplio, así que sólo me he centrado para feeds de blogs, o sea, de noticias, pero es fácilmente ampliable a más propósitos. La clase Feed lee y escribe en formato RSS y Atom. Lo he testeado con varios blogs con éxito en la lectura. En la escritura, no pasan los tests de http://feedvalidator.org/, pero cuando le doy a enlazar con el archivo de feeds, firefox lo reconoce inmediatamente y me manda a la página de google reader. No he dado soporte para RSS 1.0, aún no he comprendido bien la estructura de ese formato, pero sí reconoce bien los formatos de wordpress, RSS 2.0 y otros.

He escrito también un helper para incrustar la típica imagen de RSS que enlaza con el xml resultante.

Os explico cómo instalarlos y cómo usarlos para que los testéis.

En el archivo config/boot.ini hay que añadir la nueva extensión:
; Cargar los modulos de Kumbia en lib

[modules]
extensions = kumbia.logger, mail.mail, libchart.libchart, kumbia.feed

En library/kumbia/feed/ subis los archivos que he adjuntado: feed.php, rss.php, atom.php y exception.php.

Para leer:

En el controller:
$this->rss = new Feed();
$file="http://www.proclamo.com/errekerre/feed/";
$this->rss->Read($file);

En la vista:
$rss->getTitulo()                       // el título del blog
$rss->getNumeroNoticias()          // el número de noticias descargadas
$rss->getNoticiaTitulo($numeroNoticia) // título del post
$rss->getNoticiaDescripcion($numeroNoticia) // el texto del post

... etc ...

Mirad los archivos de ejemplo que he puesto en el zip.

Para escribir:
// indicamos el tipo "rss" ó "atom"
$feed = Feed::Write("rss");

$feed->setTitulo("Mis Noticias");
$feed->setDescripcion("Mi lugar de noticias");
$feed->setDireccion("www.proclamo.com");
$feed->setGenerador();
$feed->setLanguage("es");
$feed->setUltimaActualizacion(date("Y - m - d G:s"));

$feed->setNoticiaTitulo("La muerte de los blogs");
$feed->setNoticiaLink("http://www.proclamo.com/errekerre/2008/11/19/la-muerte-de-los-blogs/");
$feed->setNoticiaFecha("Wed, 19 Nov 2008 00:32:06 +0000");
$feed->setNoticiaDescripcion("No se si los blogs morirán, en todo caso los blogueros, según el genial Hernan Casciari: http://orsai.es/2008/11/una_charla_sobre_la_muerte_de_los_blogs.php Acabo de descubrir a este autor, y ya estoy absolutamente enganchado. ");

$feed->setNoticiaTitulo("un triste error");
$feed->setNoticiaLink("http://www.proclamo.com/errekerre/2008/11/13/un-triste-error/");
$feed->setNoticiaFecha("Thu, 13 Nov 2008 12:00:54 +0000");
$feed->setNoticiaDescripcion("Hace unos meses hice una aplicación web para una ONG llamada FISC. Ayer, al parecer por error, recibí un e-mail procedente de esta ONG que a su vez debe proceder de algún misionero que hay ahora en el Congo. En el e-mail no se relata ni la más mínima parte de las atrocidades que deben estar pasando [...]");

$feed->build("/tmp/");

Los datos deberían salir de los modelos de la aplicación, pero a mano también funciona.

Me he encontrado con un problema: la función build() escribe el resultado en un fichero .xml en el directorio que le pasemos por parámetro. Lo ideal es que la salida de la acción fuera directamente el xml, pero no he encontrado la manera de que kumbia me deje hacerlo.

Podeis ver el resultado en http://www.proclamo.com/kumbia503/feed, lo mantendré un tiempo en activo para vosotros. En el ejemplo, la acción publicar() crea el servicio de feeds y redirige a la acción index donde lee el mismo archivo que acaba de escribir.

Bueno, espero que os guste y me hagais saber vuestras opiniones.

Comentarios

  • Hola proclamo tiempo sin verte por estos lados y me alegras que estés de vuelta con nuevas funcionalidades para el framework...

    En cuanto a los problemas que tienes con la función build() voy a revisar el código haber como hacemos y podemos hacer un plugin para kumbia que cualquiera lo pueda utilizar, tratamos de buscar que estas ideas tengan sus propios mantenedores, para evitar recargar la carga de trabajo que ya existe sobre nosotros.
  • edited 8:39
    Hola deivison.
    Te puedo ahorrar tiempo. El problema está en la función Kumbia::main. Cuando ponemos en el controller $this->set_response("xml"), Kumbia llama a la clase SimpleXML y le agrega automáticamente unos tag de inicio y final con el texto <response>.

    El asunto sería que dejara salir nuestro xml limpio, con las cabeceras para xml.
  • Pudiste hacer esa prueba?
  • edited 8:39
    No, porque me daba error de headers ya enviados. No he encontrado la manera de saltarme el dispatcher de kumbia tampoco.
  • ok hare las pruebas en cuanto saque tiempo...
  • edited 8:39
    Muy bien. Es importante poder generar salida .xml para poder dotar a Kumbia de funciones para web services, y salida para diversos medios (web, teléfono, pdf, etc).

    Mientras iré informándome para que los feeds validen. Tengo que revisar el formato de las fechas y la generación de los id para Atom. Si alguien tiene alguna sugerencia, será bienvenida.
  • Buenisimo, vamos a trabajar en eso!
  • edited 8:39
    Doy por acabada la versión 0.1 del módulo feed para Kumbia. Actualmente no valida, pero si alguien lo necesita que me lo comunique y me pondré a trabajar en ello. Los archivos se encuentran el el adjunto.

    La clase Atom genera los id correspondientes y la fecha en el formato standard de Atom.
    La clase RSS genera las fechas en el formato standard de RSS.
  • Buen trabajo proclamo haré las pruebas y bueno si todo ande bien lo agregamos como un plugin al svn la idea es que eso sea mantenido por la misma comunidad...
  • edited 8:39
    No hay problema. Lo más lógico es que lo mantenga yo, que vosotros ya tenéis bastante.
  • Vaya funciona muy bien ya lo estoy probando... lo único que haré es escribir el XML con XMLWrite en vez de escribir con simple_xml porq es 100 veces mas rápido... tómalo como dato también!
  • edited 8:39
    ok, apuntado queda, jeje.
Sign In or Register to comment.