A la hora de desarrollar aplicaciones que manejan información perteneciente a libros, vamos a tener que dar vueltas alrededor de varias APIs bastante potentes y relativamente abiertas. Aunque no es un terreno excesivamente complicado, sí que hay ciertos elementos que parecen más sencillos de lo que pueden llegar a ser, como los identificadores.
Hace años se creó un identificador estándar de libros para que las editoriales pudieran categorizar automáticamente los libros que publicaban. El ISBN (International Standard Book Number) empezó como un número de 10 cifras y fue expandido a 13 cifras en 2007. Ambos formatos, de 10 y 13 cifras, coexisten y tienen comprobaciones internas para validar su estructura.
Los ISBN, incluyendo sus dígitos de control, pueden ser un quebradero de cabeza, así que lo mejor será siempre comprobar su validez en tu código antes de llamar a cualquier API. Una comprobación sencilla podría ser esta:
function codigo_ISBN_valido (isbn) {
isbn = isbn.replace(/[^\dX]/gi, ”);
if(isbn.length != 10){
return false;
}
var caracteres = isbn.split(”);
if(caracteres[9].toUpperCase() == ‘X’){
caracteres[9] = 10;
}
var suma = 0;
for (var i = 0; i < caracteres.length; i++) {
suma += ((10-i) * parseInt(caracteres[i]));
};
return ((suma % 11) == 0);
}
Además del ISBN, también tenemos el EAN (European Article Number) con el que algunas editoriales y grupos comerciales etiquetan sus libros. También existe el ASIN (Amazon Standard Identification Number) con el que el gigante del comercio marca de forma única cada producto en su catálogo. Amazon también utiliza los ISBN como ASIN, aumentando a la confusión de algunos desarrolladores novatos.
Una vez aprendidos las diferentes identificaciones estándares de los libros en las diferentes API, podremos empezar a “jugar” con ellas. Hay una gran oferta de APIs libres y corporativas que, con mayor o menor flexibilidad, nos permitirán tener una aplicación o gestión de libros seguramente para casi cualquier necesidad de nuestra aplicación.
ISBNdb: comparar precios
Una de las plataformas más veteranas, fundada en 2002, cuenta con casi 8 millones de títulos en su base de datos. Su API ofrece, además de la búsqueda por identificador, navegar por categorías y conseguir precios de cada título en diferentes comercios.
Adentrándonos en este último apartado, y siguiendo la documentación, podremos hacer una petición así:
http://isbndb.com/api/v2/json/$CLAVE_API/prices/$IDENTIFICADOR
Lo que nos devolverá un listado histórico de precios y comercios donde encontrar este producto. Útil para ver la evolución de precios o comparar entre proveedores. El resultado sería una respuesta en JSON:
{
“result_count” : “2”,
“page_count” : 1,
“current_page” : 1,
“index_searched” : “isbn”,
“min_time_unix” : 0,
“max_time_unix” : 1368820663,
“data” : [
{
“store_title” : “Principles of solid mechanics”,
“store_id” : “amazon”,
“currency_code” : “USD”,
“is_historic” : “1”,
“price_time_unix” : “1367763531”,
“is_new” : “0”,
“in_stock” : “0”,
“price” : “65.66”
},
],
}
Google Books: ver el contenido
La API de Google Books es increíblemente potente y requiere de autenticarnos a través del protocolo OAuth 2, nada excesivamente complejo, si hemos trabajado con este método seguro antes.
Está compuesta de tres partes distintas. La primera permite buscar cadenas de texto entre los millones de libros que Google ha escaneado e indexado. La segunda permite embeber o incrustar estos libros en aplicaciones web. Por último, la última parte de la API nos permite gestionar una librería digital propia con nuestros títulos.
La búsqueda de texto es seguramente la parte más potente e interesante, una vez autenticados, se puede acceder a ella de la siguiente forma:
https://www.googleapis.com/books/v1/volumes?q=FRASE A BUSCAR
Así, nos devolverá las tradicionales cabeceras HTTP 200/OK en caso satisfactorio, con un listado de los títulos donde aparezca la frase:
{
“kind”: “books#volumes”,
“items”: [
{
“kind”: “books#volume”,
“id”: “_ojXHRcCNuzg”,
“etag”: “OTDqn42tB19”,
“selfLink”: “https://www.googleapis.com/books/v1/volumes/_ojXNuzgHRcC”,
“volumeInfo”: {
“title”: “Libro de ejemplo”,
“authors”: [
“BBVAOpen4U”
],
…
},
“totalItems”: 3
}
Cuenta con librerías de programación listas para utilizar la API en casi cualquier lenguaje de programación moderno.
Amazon Books
Dentro del inmenso catálogo de APIs de Amazon se encuentran varias relacionadas con la búsqueda de libros tradicional que sirvieron de base del servicio en sus primeros años.
En esta categoría, el gigante del comercio electrónico ofrece dos API relacionadas: ItemSearch e ItemLookUp. Ambas necesitan de una cuenta de usuario de Amazon Web Services.
La primera nos permite buscar y encontrar libros por múltiples variables: título, autor, fecha de publicación, ASIN/ISBN, editorial, etc.
http://webservices.amazon.com/onca/xml?service=AWSECommerceService&AWSAccessKeyId=$AWS_KEY&
AssociateTag=$TAG_DE_AMAZON&Operation=ItemSearch&Keywords=$TERMINO_A_BUSCAR&SearchIndex=Books&Timestamp=[YYYY-MM-DDThh:mm:ssZ]&Signature=[Request Signature]
Nos devolverá un XML con los atributos habituales de cada libro, además de una escueta descripción:
<TotalResults>2849</TotalResults>
<TotalPages>285</TotalPages>
<MoreSearchResultsUrl>(…)</MoreSearchResultsUrl>
<Item>
<ASIN>B08OE6I000</ASIN>
(…)
<ItemAttributes>
<Author>BBVAOpen4U</Author>
<Manufacturer>BBVA</Manufacturer>
<ProductGroup>Book</ProductGroup>
<Title>Título del libro</Title>
</ItemAttributes>
</Item>
Una vez obtenido estos resultados, podemos pasar a ItemLookup para obtener más datos del título o volumen seleccionado. Por ejemplo, el identificador ficticio B08OE6I000 devolvería el siguiente resultado:
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<ItemId>B08OE6I000</ItemId>
</ItemLookupRequest>
</Request>
<Item>
<ASIN>B08OE6I000</ASIN>
<ItemAttributes>
<Manufacturer>BBVAOpen4U</Manufacturer>
<ProductGroup>Book</ProductGroup>
<Title>Título del libro</Title>
</ItemAttributes>
</Item>
</Items>
Con esta segunda API de Amazon podemos obtener y verificar detalles extra de cada libro o elemento del catálogo cuando necesitemos refrescar los datos. Pero, por lo general, con la API de ItemSearch será suficiente.
¿Te interesan las APIs financieras? Descubre todas las que te ofrece BBVA