Mercadolibre al menos tiene dos características. La primera es que tiene un gran volumen de datos. Debemos trabajar con maestros de productos de centenares de SKUs, los cuales gracias a las publicaciones de catálogos y los planes de cuotas nos dan miles de publicaciones. Y diariamente debemos asegurarnos que estas publicaciones sean actualizadas con por lo menos con el stock y con el precio correcto (debido a que, si estamos trabajando en Argentina, todas las listas de precios están basadas en USD, y ya vimos como es el valor del USD en Argentina).
Eso lo podemos hacer. Podemos hacer que la actualización de los productos sea automática. Lo que también tenemos que hacer es que su control sea automático. No podemos estar punteando miles de publicaciones en forma diaria para asegurarnos que sean correctas. En este post vamos a explicar como hacerlo mediante scripts de xmlrpc (si bien a xmlrpc ya le pusieron fecha de fin, sigue siendo una herramienta más que válida, por eso voy a seguir publicando sobre dicha venerable herramienta).
Voy a explicarlo con un ejemplo. Vamos a recorrer el maestro de productos en Odoo (que tiene instalado el módulo meli_oerp) y vamos a chequear el stock de Odoo con el stock publicado para dicho producto en Mercadolibre.
#!/usr/bin/python3
import requests
from xmlrpc import client
import ssl
# Primero nos conectamos a un Odoo con la base de datos peinandocanas
url = 'https://peinandocanas.com/'
common = client.ServerProxy('{}/xmlrpc/2/common'.format(url))
res = common.version()
user = 'admin' #the user
pwd = 'peinandocanas' #the user
dbname = 'peinandocanas'
uid = common.authenticate(dbname, user, pwd, {})
models = client.ServerProxy('{}/xmlrpc/2/object'.format(url))
print(uid)
# El uid es el id del usuario conectado, si es False no se pudo conectar
# Leemos los datos de la compañia con ID 1 y de ahi obtenemos el token de autenticación
company_data = models.execute_kw(dbname,uid,pwd,'res.company','read',[[1],['mercadolibre_access_token']])
company_data = company_data[0]
access_token = company_data.get('mercadolibre_access_token')
Lo primero que hacemos es conectarnos a Odoo mediante xmlrpc y obtener el token de acceso a Mercadolibre (el cual Odoo se encarga de obtener, en otro post vamos a hablar más de la autenticación en Mercadolibre).
El paso siguiente es leer todos los productos publicados (cuyo ID de la publicación es el campo meli_id) y obtener su stock virtual.
# Lee los postings en product.product e itera
postings = models.execute_kw(dbname,uid,pwd,'product.product','search',[[['meli_id','!=','']]])
for i,posting in enumerate(postings):
posting_data = models.execute_kw(dbname,uid,pwd,'product.product','read',[[posting],['meli_id','virtual_available']])
posting_data = posting_data[0]
item_id = posting_data.get('meli_id')
# Leemos con requests la información del posting
url = f"https://api.mercadolibre.com/items/{item_id}?access_token={access_token}"
resp = requests.get(url)
if resp.status_code < 400:
data = resp.json()
Lo que hacemos es iterar todos los productos publicados. Y luego por cada producto publicado, vamos a obtener la información de la publicación. Eso se hace chequeando el endpoint items del api de mercadolibre, endpoint que tiene el siguiente formato
url = f"https://api.mercadolibre.com/items/{item_id}?access_token={access_token}"
Como pueden ver, le estamos pasando el token de autenticación en la misma URL (lo mismo lo pueden hacer con su browser).
Bien, paso siguiente chequeamos que el status sea correcto (menor a 400) y luego leemos la información de la respuesta, que es un json
data = resp.json()
stock = data.get('available_quantity')
if stock < posting_data.get('virtual_available'):
# Hacer lo que deseen, emitir alerta o actualizar publicación
Como verán, el control es automatizable. Esto es solo un ejemplo, no tiene en cuenta la realidad de un entorno de publicación (no hace un control serio de errores por ejemplo, y además no chequea si la publicación se encuentra activa y el escenario común donde tenemos por producto múltiples publicaciones). Pero es un ejemplo de como automatizar el control de las publicaciones. Porque en entornos del volumen de Mercadolibre, la única manera de controlarlo es de forma automática.