La API de Amazon (I)

 Escrito el 4 septiembre 2014

Este post va a ser bastante largo y denso, pero muy interesante y del que hay muy poca información en la red (y muchas veces la he necesitado).

Amazon no es una empresa al uso. Es más que eso, es un gigante del comercio electrónico cuyo CEO Jeff Bezos empezó vendiendo libros por Internet y muchos años después se convirtió en lo que es una de las empresas más grandes del mundo, con una facturación gigantesca y por supuesto, haciendo que la poca competencia que le quede no tenga ninguna posibilidad de hacerle un centímetro de sombra.

Pero, ¿sólo vende libros Amazon? No. También vende aspiradoras, relojes, fregonas y cualquier gadget o tontería que se te ocurra. Y cuando digo tonterías, digo tonterías de verdad. En este artículo se puede ver cuáles son las diez cosas más insólitas que vende Amazon. Como ejemplo:

Estos son 3 ejemplos, pero podéis encontraros las cosas más extravagentes que os imaginéis.

Además de venta de libros y de productos bizarros, Amazon tiene otro jugoso negocio y es Amazon AWS (Amazon Web Services) que es una IaaS, básicamente vende su infraestructura como servicio, o más resumido, te facilita el uso de sus servidores en la nube y tú le pagas por su uso. Y si no lo usas, no pagas, a diferencia del servicio típico de hosting al que estamos acostumbrados. Y si por el contrario, tu uso es muy alto entonces pagas más. Lo que se llama una infraestructura escalable. Tiene muchísimas opciones como son EC2 (Elastic Cloud Computing) que es un servidor virtual en la nube, S3 que nos proporciona almacenamiento en la nube, Elastic Map Reduce que nos proporciona un cluster para poder correr nuestras aplicaciones Hadoop, y un largo etc. Un ejemplo de lo que podremos utilizar.

AWS

Pero nosotros nos vamos a centrar en la parte quizás más desconocida al mundo en general pero muy conocida en el mundo de los afiliados, que es la API que proporciona Amazon para trabajar con su infinito enorme catálogo de productos.

Si tuviera que definir la API de Amazon, sería que es un auténtico despropósito. No parece estar creada por el gigante del comercio electrónico, o al menos da la sensación de que no les interesa mucho que la gente la use. Porque no tiene ninguna explicación la cantidad de fallos que tiene, y lo difícil que se hace utilizarla. Ahora veremos por qué.

La API de Amazon nos permite rastrear todos los productos de Amazon que busquemos de una manera en teoría cómoda, y sin depender de tener que utilizar Web Scraping que nos naveguen por toda la Web para buscar productos y precios. Sólo tendremos que hacer invocaciones a sus servicios Web que nos devolverá los datos que necesitemos, y de esta manera podremos conseguir automatizar el proceso lanzando unas cuantas líneas de código. Sin duda este es un punto a favor de Amazon ya que muchas otras tiendas no disponen de este servicio y menos con una documentación tan extensa.

Lo primero para poder empezar a trabajar con la API de Amazon es registrarse en su programa de afiliados y elegir un identificador que necesitaremos para que Amazon sepa que somos nosotros los que traemos a ese cliente. Pero sólo con ese id no es suficiente y necesitaremos que se genere nuestra clave AWS Access Key ID que a su vez nos servirá para generar la clave secreta AWS Secret Key que luego necesitaremos así que las tendremos que apuntar o bien descargarnos el fichero que nos proporcionan.

access_key

Con esto ya tendremos mucho para poder generar nuestra llamada al servicio Web de Amazon para que nos devuelva datos. ¿Pero cómo? Amazon nos permite realizar peticiones SOAP o REST . En mi caso elegí las peticiones REST ya que es más sencillo su uso, al utilizar peticiones HTTP con respuestas XML que podemos ver en el navegador y implementar de una manera muy fácil. Aunque si estás habituado a trabajar con SOAP tampoco te costará mucho utilizarlo.

Vamos a explicar el significado de cada línea:

La URL de la petición. En el caso de Amazon España, deberemos cambiarla por http://webservices.amazon.es

El tipo de servicio, no cambia y es siempre fijo.

El tipo de operación a la que queremos invocar, puede ser de tipo:

  • ItemSearch. Nos permite buscar cualquier producto vendido pro Amazon o sus vendedores asociados. Es la operación más utilizada.
  • BrowseNodeLookup. Esta operación nos permite buscar productos asociados a un nodo navegando a través de su jerarquía. No devuelve productos, sólo los nodos asociados a los productos. No es una operación que se necesite utilizar a no ser que necesites saber a qué nodo pertenece un determinado artículo. Puede ser interesante si queremos centrarnos en la búsqueda de productos relacionados con las máquinas de coser por ejemplo y queramos saber exactamente cual es su nodo y sus padres. Más adelante la llamada al servicio Web nos lo pedirá.

Importante rellenar aquí nuestro Access Key ID que más arriba explico cómo conseguir.

Nuestro AssociateTag que hemos conseguido al darnos de alta en el programa de afiliados de Amazon.

El índice por el que queremos buscar, puede ser electrónica, hogar, libros, mp3, etc. Para saber cada SearchIndex podemos verlo aquí.

Los índices disponibles son los siguientes:

All
Automotive
Baby
Books
DVD
Electronics
ForeignBooks
KindleStore
Kitchen
MobileApps
MP3Downloads
Music
Shoes
Software
Toys
VideoGames
Watches

El producto que queremos buscar. Podemos ser genéricos “máquinas de coser” o más específicos “Singer Simple 3221″. Básicamente lo que pondríamos en la caja de búsqueda del portal de Amazon.

Este parámetro es importante y es la hora del sistema. Las peticiones a la API de Amazon tienen caducidad así que si lanzamos una petición y a los 5 minutos lanzamos la misma exactamente sin cambiar la hora, nos saldrá un mensaje de que la petición ha caducado.

La firma de la petición, que se calcula en base a unos parámetros en forma de Hash, y que no se puede modificar. Esos parámetros están formados por la hora del sistema y la clave de acceso, y a partir de canonizarlos en Base64 y de transformarlas, nos devolverá nuestra fima. No hace falta saber la fórmula exacta, Amazon nos la dará en uno de sus ejemplos de llamadas a la API así que podemos obtenerlo de ahí.

Una vez que tenemos formada la petición podemos lanzarla, mismamente desde un navegador, ya que al ser REST no tendremos problemas en que nos devuelva una respuesta. Y la respuesta nos la devolverá en forma de XML y aquí empieza el show de Amazon.

Tiene una serie de restricciones que parecen absurdas para un gigante como ellos. La primera y que sin duda es la que más me jode es que sólo puedes devolver como máximo 100 resultados. ¿Qué significa esto? LA MUERTE.

jeff-bezos

Si quieres obtener los iPad no tendrás problemas ya que con 100 resultados tienes de sobra. Pero si quieres obtener todas las tablets que vende Amazon date por jodido porque hablamos de más de 2.000 productos. La solución consiste en recorrer todos los productos por tamaño, color, espacio, memoria, etc. para conseguir que nunca te devuelve más de 100. En el caso de las tablets es algo complejo, ya que si tenemos más de 2.000 productos, blancas habrá 1.000, Android 900, de 16 Gigas unas 500 y así hasta llegar a conseguir un filtro que nos obtenga menos de 100 resultados. Una tarea que es muy compleja de que salga bien además de acabar con la paciencia de uno.

Pero no acaban aquí las penitencias, porque la API de Amazon no devuelve los mismos resultados que si buscas por la Web. ¿¿¿CÓMO??? Pues sí, una búsqueda por idéntica keyword nos puede devolver cosas diferentes, y es frustrante

The-Big-Lebowski-WTF-Gif

Hasta que me di cuenta de por qué pasaba eso, pasaron muchos días y quebraderos de cabeza. Cambié las keywords, los nodos, navegué por foros buscando la causa y al final el problema era tan increíble como tonto. Básicamente la API no devuelve los mismos resultados que el portal de Amazon. ¿Increíble? Sí, pero así es.

Pero no sólo nos aparecen productos diferentes si no que los precios también son diferentes. Vamos, una joyita la API de Amazon :D.

Otro gran problema es la cadencia con la que Amazon te permite hacer consultas a su mierda maravillosa API y ésta es de 1 segundo. Vamos, que como intentes hacer varias peticiones simultáneas en menos de 1 segundo, catacrack. Eso nos permite hacer 3.600 peticiones por hora, por lo que recorrer todo el catálogo de Amazon nos podría llevar muchas horas. Y en las iteraciones que tengamos, debemos ponerle una cadencia de 1 segundo si no queremos que nos de error y no sepamos por qué 8-).

20iz1p1

Estas son algunas de las putadas características que nos proporciona la API de Amazon, pero como ventaja es que al menos dispone de un servicio Web en el que consultar los artículos.

En el siguiente post veremos cómo implementar esto en un lenguaje como Java y cómo poder realizar las iteraciones, y todo el filtrado de artículos.

 

Publicado por miafiliado en Afiliados
Tags: , , ,
You are not authorized to see this part
Please, insert a valid App IDotherwise your plugin won't work.

3 comentarios

  1. Fernando dice:

    Muchas gracias por tu información!
    Estoy de acuerdo con que es bastante farragosa la api de Amazon. A ver si la van mejorando, por que vamos…

  2. […] el primer capítulo de la serie hablé de cómo funciona la API de Amazon, cómo se puede utilizar, qué parámetros […]

  3. […] os conté cómo lo hacía en otras entradas que es actualizando los precios con un pequeño programa que se encarga de […]

Escribir un comentario

SI puedes utilizar codigo HTML y emoticones en los comentarios.
NO se permiten insultos, enlaces de Spam ni mensajes en formato SMS.

Tu comentario será moderado la primera vez que lo hagas. Después de eso no será necesario si usas los mismos datos.