Traduciendo ISBNs

Empezamos a guardar libros en cajas para la mudanza y aproveche para jugar con todos los isbn que teniamos a nuestro alrededor.  Compre un lector de codigo de barras y busque como obtener la informacion del libro a partir del isbn. Encontre isbndb que tiene una api, pero bastantes de los libros que tenemos no los encuentra (mas que nada los de Argentina).

La siguiente solucion fue hacer scraping con Mechanize. Con esto cubro por ahora el 70% de los libros procesados por el momento (unos 270).

El script tiene una lista de librerias en las que busca el isbn, en la primera que encuentra datos para y guarda los resultados, y por cada libreria que no conoce cierto isbn se guarda en un cache negativo la tupla <libreria, isbn, fecha>. Esta tupla tiene un TTL de un par de dias, asi evito hacer pedidos innecesarios.

Como el script esta pensado para una cantidad chica de libros, tanto la lista de libros conocidos como la del cache negativo se mantienen en memoria y se guardan en disco al iniciar el script y por cada cambio en alguna de estas estructuras.

Las librerias en las que busca son:

Se puede usar de dos maneras diferentes, en la primera lee de $stdin de a un isbn por linea, busca la informacion del libro y hace un inspect de lo que obtiene. Un ejemplo de un libro que encuentra:


xrm0@namaka:~/dev/isbn$ ./isbn_search.rb
> 8401014034
..
{:cover=>"http://www.lsf.com.ar/tapas/8401014034.jpg",
 :title=>"LUGAR, EL", :authors=>"levrero, mario",
 :house=>"Plaza & Janes Editores S.A. (E",
 :isbn=>"8401014034",
 :sources=>#<Set: {"lsf"}>}
>

En la segunda forma, si se le pasa el argumento –csv tambien lee un isbn por linea pero va mostrando los datos de cada uno de esos libros como un archivo csv. Por ejemplo:


xrm0@namaka:~/dev/isbn$ echo 8401014034 | ./isbn_search.rb --csv
"8401014034","LUGAR, EL","levrero, mario","Plaza & Janes Editores S.A. (E",""

Los datos que obtiene de cada libro (dependiendo del libro y la libreria algunos pueden estar vacios) son:

  • Autores
  • Edicion
  • URL de la tapa
  • Titulo
  • Editorial
  • ISBN

Se necesita de Ruby 1.9 y los gem mechanize y activesupport (es solo por el .to_day). El script esta aca: isbn_search.rb

Categorías: Investigacion, Programacion, Tecnologia

Leave a comment