• 0
OscarRocha

Obtener órdenes con límite > 50 - orders/search?seller=

Question

Hola

Soy algo nuevo con el API de Mercado Libre, estuve trabajando con el API de Mercado Shops ya unos meses y ahora he estado investigando en la documentación pero por más pruebas que realizo no logro esto, ojala me puedan ayudar.

Estoy intentando traerme todo el histórico de órdenes de un vendedor pero sólo logro traerlo en lotes de 50 como máximo. Es posible traer más de una llamada? por decir 500 o 1000 en una sóla llamada.

https://api.mercadolibre.com/orders/search?seller={seller_id}&limit=50&access_token={access_token}#json

Ya leí la paginación por offset para recorrer las siguientes 50 órdenes,  ya la implementé y todo.. sólo agrego el parámetro offset=50 y voy iterando en la url.

El problema es que en recursos llega a ser algo tardado por todas las múltiples instancias que llego a crear. Por decir tengo 7500 órdenes, para iterar el offset llego a crear 150 requests...   y he tenido problemas de forma aleatoria en donde el servidor de MeLi me regresa undefineds o nulls como si me bloqueara o limitara el número de request en poco tiempo. Por consiguiente me arroja GAPs de periodos sin ordenes..

Creo que si lograra traerme al menos de 1000 órdenes en un request se resolverían varios problemas de performance y reduciría las llamadas en poco tiempo.

yo pensaba que agregando limit=1000 podría pero no encuentro nada de un máximo en el limit en la documentación

{
  "message": "Oops! Something went wrong...",
  "error": "limit.maximum_exceeded",
  "status": 400,
  "cause": [
  ]
}

Encontré sobre otros recursos del uso de &search_type=scan  pero parece que sólo funciona con items y preguntas

Espero que me puedan ayudar con algún ejemplo o un link donde venga esta información, o si fue un tema anterior.. estuve buscando mucho. Por favor no me bateen u.u  ya lo han hecho antes con otras de mis dudas y veo que pasa muy seguido en este foro

gracias

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 1

Creo que debido a las limitaciones, lo mejor seria que guardes esos datos en una base de datos junto con el offset y vayas haciedo solicitudes cada cierto tiempo con la ayuda de algun cronjob, y que se vayan guardando progresivamente las ordenes nuevas o que faltan en la base de datos

Share this post


Link to post
Share on other sites
  • 1

Hola.

Esque estas mal al no guardar la informacion en tu BD y estar llamando a la API cada vez que tu cliente hace refresh a la pagina, eso no debe de hacerse, saturas la API.

Y simplemente has un foreach  o un for.

Por ejemplo, si te dice que hay 1000 resultados, divide ese numero entre 50 y ya son las iteraciones que tienes que realizar. pero como te comento no lo hagas asi.

Guarda toda la informacion basica en tu BD y con las notificaciones ve actualizando dicha informacion, o con un cronjob. 

La verdad todos trabajamos asi, ese offset es para que no se sature el server de ML tambien, imaginate que le pongas que mostrara 500 datos a la vez.

Saludos.

Share this post


Link to post
Share on other sites
  • 0
On 10/26/2018 at 7:44 PM, OscarRocha said:

... Es posible traer más de una llamada? por decir 500 o 1000 en una sóla llamada. ...

no, el limit és 50

Share this post


Link to post
Share on other sites
  • 0
On 10/27/2018 at 7:33 PM, mldev said:

no, el limit és 50

disculpa mldev

sabes si hay alguna forma de pedirle a Mercado Libre que se incremente el valor del límite máximo de 50 ?    Como crear un thread al respecto, una solicitud o votación de la comunidad?   O si con la certificación que conseguí hace poco,  que te liberen por decir a 250 o 500 en el limit.

Quisiera saber porque está esta restricción del atributo limit..  que según entiendo sólo sirve de 1 - 50..  alguien si preferirá traer menos datos en 1 llamada para paginar más veces?

a mi parecer le perjudica más al server de MeLi tener que hacer muchas peticiones para iterar las órdenes en lotes pequeños que hacer un request con varios resultados o por ejemplo en el caso de los products con multiget que se ocupa primero obtener el id de cada producto y después hacer otra llamada para obtener la información..  es como si fuera tendencia de tener el API como una base de datos relacional y me parece que perdería parte del sentido del API, bueno al final es obtener los datos por otro medio pero su estructura se  me hace fuera de lo común.

3 hours ago, gajosu said:

Creo que debido a las limitaciones, lo mejor seria que guardes esos datos en una base de datos junto con el offset y vayas haciedo solicitudes cada cierto tiempo con la ayuda de algun cronjob, y que se vayan guardando progresivamente las ordenes nuevas o que faltan en la base de datos

Voy a considerar lo que dice Gajosu de lo de guardar los resultados en una base de datos para aquellas órdenes antiguas que es probable que ya no reciban cambios.

Edited by OscarRocha

Share this post


Link to post
Share on other sites
  • 0
On 10/28/2018 at 8:38 PM, Fernando Aguirre said:

Hola.

Esque estas mal al no guardar la informacion en tu BD y estar llamando a la API cada vez que tu cliente hace refresh a la pagina, eso no debe de hacerse, saturas la API.

Y simplemente has un foreach  o un for.

Por ejemplo, si te dice que hay 1000 resultados, divide ese numero entre 50 y ya son las iteraciones que tienes que realizar. pero como te comento no lo hagas asi.

Guarda toda la informacion basica en tu BD y con las notificaciones ve actualizando dicha informacion, o con un cronjob. 

La verdad todos trabajamos asi, ese offset es para que no se sature el server de ML tambien, imaginate que le pongas que mostrara 500 datos a la vez.

Saludos.

gracias por la explicación Fernando ? eso me ayudará a trabajar con esta API.. entonces por las limitantes tiene que ser por base de datos

yo lo que hacía era hacer 1 llamada y lo cacheaba en un server tercero, después metía cron jobs entre 4 y 24 horas según el movimiento de las órdenes diario del vendedor, así ya no dejaba que el usuario hiciera llamadas al API de MeLi. Pero el historial yo si lo volvía a pedir completo o al menos la parte que ocupo para presentar. Debo modificar esa parte para que sólo haga llamadas a lo reciente.

 

Lo que me extraña es el limitante de 50 por call.

Es decir para sacar 500 datos debo hacer 10 llamadas de jalón...   pienso que eso es peor para el server de MeLi que hacer 1 sola de 500. Parecieran bases para saturar al server si fuera un ataque DDoS. También encontré el límite por hora de llamadas por token, eso lo debería prevenir. Me ha tocado trabajar con más APIs de otros marketplaces o e-commerce u apps en donde también ocupo traer información de órdenes.. (pensando que el json x orden es similar en tamaño)  .. y  la mayoría permite traer un limte más grande a 50 ... por eso me extraña que el server de MeLi lo reestringieran tanto.      

 

Te ha pasado que a veces alguna llamada falle con time out y si la vuelves a correr funciona.. ?  Me ha estado pasando.. Si tengo que hacer muchas llamadas y falla alguna debo volver a pedir esa para no tener el GAP.

 

Edited by OscarRocha

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now