Comunicando Node.js y Python (II – la mejor manera)

Como ya os he contado, necesitaba un Web Scraper que fuese disparado bajo demanda del usuario para recuperar de subtitulos.es los títulos de los distintos capítulos, y la manera más sencilla de hacerlo era en Python. Para ello, cada vez que el usuario pidiese al servidor Node.js un contenido, este lo buscaría primero en la BD, y, si no lo encontraba, lo pediría al scraper. De esta manera, si el contenido no existe en subtitulos.es, se pedirá siempre al scraper y este retornará un error, pero si sí existe, este será scrapeado solo la primera vez, encontrándose en veces sucesivas en la BD.

docs-dotcloud-logo

La primera solución consistía en comunicarse con el scraper Python mediante stdout, pero esto tenía varios inconvenientes. El primero, que el scraper debía encontrarse en la misma máquina que Node.js. El segundo, que para objetos más complejos se debía escoger una representación de datos intermedia como JSON. El tercero, que cada vez que se usase el scraper este debía abrir una nueva conexión con la base de datos, en vez de mantener una viva.

Sigue leyendo

Mi primer «pet project», subtiREST

Hubo un tiempo en el que tenía ganas de aprender PHP para poder hacer cosas web guay. Empecé con un libro y lo dejé. Hubo un tiempo en el que tenía ganas de aprender MySQL para poder hacer cosas en general guays. Empecé con un libro y lo dejé. Hubo un tiempo en el que tenía ganas de profundizar un poco más en otros lenguajes de programación como Python. ¿Adivináis lo que pasó? Bueno, en ese caso no cogí un libro, me apunté a un curso online. En cualquier caso, sí, lo dejé.

A pet project is a project, activity or goal pursued as a personal favorite, rather than because it is generally accepted as necessary or important.

El aprendizaje guiado sin goal está claro que no me motiva, así que hace unas semanas me dije, que le den. Pensé un proyecto pequeño que tocase varias cosas con las que tenía ganas de jugar y me puse a la tarea. Sigue leyendo

Comunicando Node.js y Python (I – la manera sencilla)

Estos últimos días estoy quemando mis horas de vacaciones en un pequeño proyecto que me he planteado que tiene por objetivo, más que nada, aprender. Cuando lo termine seguramente lo publique en GitHub bien documentado, de momento baste saber que me está sirviendo para practicar Node.js, MongoDB y Python.

Captura de pantalla 2014-08-02 13.45.32

El problema es que toda la información que maneja Node.js ha de obtenerse mediante web scraping, y realizar este en el servidor (Node) no me parecía correcto (y ni tan siquiera sé si se podría hacer de manera sencilla), máxime cuando con Python y BeautifulSoup, si el HTML tiene una estructura más o menos coherente, el scrap es fácil.

Así que una vez montado el scraper en Python, la duda quedaba en cuándo dispararlo. Se me planteaban dos opciones: hacer un scrap a lo bestia de manera periódica de toda la información que maneja Node y guardarla en MongoDB, o correr el scraper bajo demanda del usuario, con la BD en el medio, de manera que la primera vez que se pidiese algo que no hubiese sido aún scrapeado tardase más por tener que correr el script Python para obtener la información, pero que en veces sucesivas este contenido ya estuviese cacheado en la base de datos.

Posiblemente el peor diagrama de secuencia de la historia

Posiblemente el peor diagrama de secuencia de la historia

Sigue leyendo