• 0
OscarRocha

Obtener ordenes por canal mshops y meli duda

Question

Posted (edited)

Hola, :v:
Busco ayuda con el tema del tag de mshops, con la comunidad. Tengo unas dudas. Esta es la documentación  -->  https://developers.mercadolibre.com.pe/es_ar/gestiona-ventas#%C3%93rdenes-Mercado-Shops

Mi app intenta mostrar las ventas por ambos canales y me ha dicho soporte que no use el tag="mshops" en la ruta del recurso al hacer la llamada, sino más bien completas o sin el tag (para ahorrar llamadas al API) y en su lugar yo haga el filtro internamente.

Tal vez sea algo tonto de mi parte o la solución es muy lógica.. pero no la veo, me dicen.. "pues si no existe un tag meli saca la inversa".. algo como tag!='mshops'  pero noo esa no sería su inversa... porque el atributo tag, puede tener más valores como bien saben

Vean los resultados que me trae esta ruta json (muy seguramente la tendré mal, ¿alguien sabe como quedaría la correcta?)

/results[status='paid']/total_amount      -->   401 resultados
/results[status='paid' and tags='mshops']/total_amount  -->   163 resultados órdenes mshops.  Si uso el request de orders con tag=mshops,  si me trae las 163 orders
/results[status='paid' and tags!='mshops']/total_amount  -->   401 resultados   -- pero porque acá no le quita los 163 al usar el not    tag !=mshops ... bueno si se, es porque la ruta encuentra más tags que no son mshops en cada una de las mismas ordenes y entonces si las cuenta.  Hay más tags..

Para obtener el total de ventas por canal
mshops  si funciona
meli  no funciona

Entonces con estos resultados, estaría duplicando las ventas de mercado shops al esconderlas en  mercado libre...  y hay quién me dirá.. pues réstale el valor que te da de mshops.. pero pues creo que ya se perdió parte de la eficiencia ahí. Imaginen hacer esto para al menos 10,000 orders.

La otra solución que se me ocurre sería iterar o mapear por un lookup para sacar los Order_ID's que si sean mshops y nosotros descartarlos para que sean meli. Esta solución.. quita mucha memoria & recursos.

quisiera saber
¿Cómo le hacen para poder distinguirlas, en especial las de 'meli' ya que existe el tag de 'mshops' pero no existe el tag de 'meli'?  a varias APPs les debió dar este error o ajuste para las cuentas que hicieron el merge con Mercado Shops 2.0 si antes como yo también sólo hacían el request de orders directamente.

le decía al soporte que sería mejor agregar un atributo 'channel' con valores 'meli' ó 'mshops'  en lugar del atributo tag con valor adicional 'mshops'. Justo como está el API de Mercado Shops 1.0 sin más valores en las rutas.

Alguien, alguna idea? o entendí mal la solución
gracias

Edited by OscarRocha

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 1
Posted (edited)

Hola 

¿Cómo le hacen para poder distinguirlas, en especial las de 'meli' ya que existe el tag de 'mshops' pero no existe el tag de 'meli'? 

Tu mismo lo has dicho, para distinguir una de mercadoshops, ya trae el tag mshop, si una orden lo tiene la catalogas como de mercadoshop y si no lo trae, entonces es una orden normal.

Entonces tu iteras en todo el historial de ordenes, vas a poner algo asi:

foreach($orders as $order){
	if( in_array('mshops', $order->tags) ){
		//La orden es de mshops
	} else {
		//La orden es normal
	}
}

La verdad no se si a eso te referias, pero a eso se referian cuando te dijeron "eso haslo en tu codigo".

Saludos

Edited by Fernando Aguirre

Share this post


Link to post
Share on other sites
  • 0
11 hours ago, Fernando Aguirre said:

Entonces tu iteras en todo el historial de ordenes, vas a poner algo asi:


foreach($orders as $order){
	if( in_array('mshops', $order->tags) ){
		//La orden es de mshops
	} else {
		//La orden es normal
	}
}

 

gracias por responder @Fernando Aguirre ,  ok es lo que imaginé que sería,

está bien explicada la lógica, sólo que quería evitar tener que hacer un cálculo previo para nosotros tener que pre-clasificar las órdenes en lugar de usar los resultados del JSON directamente como opción.

Estoy buscando algo más del lado de JSONPATH en lugar de hacer esa pre-clasificación en el código o middlewear para evitar usar memoria o recursos de más.

/results[status='paid' and tags!='mshops']/total_amount 

 

Share this post


Link to post
Share on other sites
  • 0

Hola Oscar.

Esque lo que ML quiere evitar tambien es sobrecargar sus servidores, imaginate la infraestructura gifante que tienen con tanta informacion guardada, ademas no somos los unicos tu y yo consumiendo su API.

Ellos quieren las cosas mas simples y que la "Bussines logic" corra por nuestra parte, te sañe mas barato a ti agregar un procesador mas o un 1gb de ram a tu servidor en la nube que gastar tiempo en algo que realmente no van a hacer porque tienen claro sus prioridades y limites.

Igual tu servidor no va a tronar por hacer esa iteracion.

Aqui siempre lo comento en los foros, la API de ML no esta diseñada para ahorrarnos logica en nuestro codigo, no nos va a dar NUNCA exactamente lo que queremos, eso ya depende de nosotros acomodar la informacion.

Igual, la API es publica, gratis, es facil de accesar y usar, practicamente no estas gastando nada para obtener esta informacion valiosa, me parece justo que puedas gastar en agregar mas recursos a tu servidor para manejar la informacion a tu gusto.

Saludos.

Share this post


Link to post
Share on other sites
  • 0
Posted (edited)

ok gracias Fernando, ya se, estoy de acuerdo en evitar saturar al API, por eso uso los resultados JSON. Esto no se trata de hacer más requests al API, en eso no hay alternativa y creo que es lo mejor.

Por eso ellos me dijeron que sacara 1 request a Orders en lugar de usar su nueva forma de obtener ordenes de mshops desde orders con el tag en la url.

El problema principal es la solución propuesta para la estructrua de datos. 

  • Se mezclaron las ordenes de MeLi con MShops en el request de orders general
  • Para identificar si la orden es mshops, agregaron al atributo "tags" el valor "mshops" en las órdenes.   Entonces hay que iterar tags.
  • "tags" es una lista desordenada de tamaño diferente en cada orden que puede seguir creciendo y en la que el valor "mshops" aparece en posiciones diferentes de la lista. Pareciera como un comodín de valores random.
  • Y para identificar si es meli, debemos iterar "tags" también a  ver si no tienen mshops... pues ok

Sería más simple y eficiente crear una etiqueta "channel" que tuviera 1 de estos valores: "mshops" ó "meli"

 

Por cierto,  aunque no es la ruta que quería, al final ya lo iteré para saber si es mshops o meli

ojala alguien sepa como hacerlo por JSONPATH

 

gracias

 

Edited by OscarRocha

Share this post


Link to post
Share on other sites
  • 0

Hola, una pregunta amigos, hay manera de determinar o sacar las ultimas ordenes del dia? o como  puedo saber el offset correcto? ya que la API de ML limita a 50 resultados maximos, y el offset tengo que estar jugando, como se calcula este valor?

Share this post


Link to post
Share on other sites
  • 0
1 hour ago, CGFT2008 said:

Hola, una pregunta amigos, hay manera de determinar o sacar las ultimas ordenes del dia? o como  puedo saber el offset correcto? ya que la API de ML limita a 50 resultados maximos, y el offset tengo que estar jugando, como se calcula este valor?

Hola CGFT2008

Si, si hay forma, para las últimas órdenes ocupas poner el orden de forma descendente y el offset en 0 desde la llamada al API. Algo así ..

&sort=date_desc&offset=0
https://developers.mercadolibre.com.mx/es_ar/gestiona-ventas

La verdad es que los límites del API para obtener datos están están muy pobres

el máximo de órdenes por llamada es de 50..  y son muy pocas, entonces

si quieres sacar más ocupas iterar la llamada con offset=1   y así 2, 3, 4  hasta las que ocupes.

el máximo de órdenes por sacar con offset es hasta 10,000 ordenes     o un offset de 199     Si tienes más hay otro método tipo nav que le llama scann_id pero no sirve mucho, te consume toda la memoria y no hay forma de usar indice , entonces ocupas recorrer otra vez las primeras 10,000 ordenes para llegar a sacar las siguientes 10,050

y no puedes ver historial mayor a 1 año, lo borraron

así está el API de ...  buena 😉

Share this post


Link to post
Share on other sites
  • 0

Wowww! que descepcion , y de antemano te agradezco mucho esta informacióon. Fijate que estoy usando el API de JAVA llamada DefaultApi, pero, el tema es que nos expone un metodo que se llama ordersSearchGet , el tema es que este te devuelve las ordenes pero de forma ASCENDENTE, y no veo alguna manera de setearle el valor contrario... quera decir que tendre hacer la llamada rest de manera independiente a la API?

Como puedes ver solo recibe: accessTokem, buyer, seller, offset y limit.

 

DefaultApi apiInstance = new DefaultApi();
String accessToken = "\"APP_USR-2132133211-072613-cabb235ea80bb70b9312c2aade38ec3d-1232121\""; // String | 
Integer buyer = "213222112"; // Integer | 
Integer seller = "123212122"; // Integer | 
Integer offset = 0; // Integer | The number of results to skip before starting to collect the result set.
Integer limit = 50; // Integer | The numbers of restuls to return.
try {
    Object result = apiInstance.ordersSearchGet(accessToken, buyer, seller, offset, limit);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling DefaultApi#ordersSearchGet");
    e.printStackTrace();
}

 

Share this post


Link to post
Share on other sites
  • 0

oo

busca dónde están definiendo el método   ordersSearchGet  en esa librería

y agrégale el parámetro de "sort" y de valor, le pones   "date_desc"

&sort=date_desc

y cuando la mandes llamar le agregas ese valor   date_desc

ó duplica el método y le alteras esa parte

 

yo usé node js a patín, porque sus librerías estaban sin actualizarse hace un buen.

Share this post


Link to post
Share on other sites
  • 0

o sábes que..  podrías usar una trakalosa

al llamar el método podrías usar un parámetro, por ejemplo limit ponle de valor esto

"50&sort=date_desc"

jajajaja igual y jala ..  está bien rancio todo  😉

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