Webservice de Medios CMS

Modificado el Mon, 26 Feb 2024 a las 09:39 AM

El Webservice es un complemento que permite ingresar artículos de forma programática y automatizada

Puedes utilizar el webservice para migrar un sitio web hacia Medios CMS.



Migrar un sitio hacia Medios CMS

El caso práctico más frecuente de uso del Webservice es la migración de un sitio hacia Medios CMS. Si ya tienes un sitio web con otro proveedor y deseas migrar a Medios CMS, sigue estos pasos. A los fines de este ejemplo, supongamos que tu sitio es notiweb.com.

  1. Crea un sitio con Medios CMS haciendo clic aquí.
    El nuevo sitio se creará en un dominio temporal, por ejemplo, notiweb.medios.digital, sobre el cual podrás hacer la migración, personalizar el diseño y preparar todo el contenido.

  2. Activa el webservice ingresando a Panel Principal > Complementos > Webservice.

  3. Utiliza la documentación del webservice (ver más abajo) para migrar todo el contenido de tu sitio actual (artículos, imágenes, etc) hacia tu nuevo sitio creado con Medios CMS. Para esta tarea es posible que necesites la ayuda de un programador de sistemas.

  4. Cuando hayas finalizado la migración de contenido, inicia la conexión de tu dominio.




Documentación del Webservice

El webservice de Medios CMS usa el protocolo XML-RPC. Existen implementaciones de este protocolo para cualquier lenguaje de programación. El presente artículo incluye algunos ejemplos en python3 usando la librería xmlrpc, pero puedes utilizar el lenguaje de programación de tu preferencia.


A continuación, se documentan los métodos que expone el webservice.


agregar_articulo

Recibe un diccionario con los datos del artículo que se desea agregar. Si el resultado es exitoso, devuelve un diccionario con el ID y la URL del artículo agregado. Si invocas este método más de una vez proporcionando el mismo ID, la primera vez el artículo se da de alta y las demás veces se actualizan sus datos.



Argumento

  • id (integer, requerido)

Identificador único del artículo en tu base de datos actual.

  • titulo (string, requerido)

Título del artículo, en formato de texto plano.

  • fecha_hora (string, requerido)

Fecha y hora de publicación del artículo en formato dd/mm/yyyy hh:mm.

  • detalle (string, opcional)

Copete (también llamado entrada) del artículo, en formato de texto plano.

  • categoria (string, opcional)

Categoría o sección principal del artículo.

Si la categoría aún no existe, el webservice la creará.

  • autor (string, opcional)

Autor del artículo.

  • estado (integer, opcional)

Estado del artículo, debe ser uno de los siguientes valores:

1. borrador

2. publicado

3. eliminado

Si no se indica, su valor por defecto es 2 (publicado).

  • cuerpo (string, opcional)

Cuerpo principal del artículo, en formato texto plano o HTML. 

  • prioridad (integer, opcional)

Es un número entre 1 y 4 que sólo se utiliza para ordenar los artículos en la portada.
Su valor por defecto es 2.

  • videos (array, opcional)

Lista de URLs de YouTube que se quieran vincular al artículo.

  • etiquetas (array, opcional)

Lista de etiquetas del artículo. Cada posición del array es un string.
Si alguna etiqueta no existe, el webservice se encarga de crearla.

  • comentarios (boolean, opcional)
    Indica si se permiten los comentarios en este artículo.
    Su valor por defecto es True.

  • imagenes (array, opcional)
    Lista de imágenes del artículo, representada como una galería.
    Existen dos maneras de especificar esta lista de imágenes:

  • Lista de imágenes, donde cada elemento de la lista es un diccionario con los siguientes datos:

  • base64 (string, requerido)
    Es un string que representa la imagen codificada en formato base64.

  • titulo (string, opcional)

  • watermark (boolean, opcional)
    Indica si a la imagen se le debe aplicar la marca de agua configurada.
    Su valor por defecto es False.

  • convert_to_webp (boolean, opcional)
    Indica si la imagen debe convertirse al formato WebP.
    Su valor por defecto es True.

  • Si ya has invocado previamente al método agregar_imagen y tienes los IDs de las imágenes, entonces cada elemento de la lista es un diccionario con los siguientes datos:

    • id (integer, requerido)

    • titulo (string, opcional)



Respuesta

  • resultado (boolean)
    Indica si el artículo se agregó satisfactoriamente o no.
  • id (integer)
    Indica el ID que se le asignó al artículo agregado.
  • url (string)
    Indica la URL pública de acceso al artículo agregado.
  • error (string)
    Si el resultado=False, este campo detalla el motivo del error.




agregar_imagen

Recibe un diccionario con los datos de la imagen que se desea agregar al centro multimedia. Si el resultado es exitoso, el método devuelve un diccionario con el ID y la URL de la imagen agregada.
Este método es práctico cuando en tu base de datos actual hay artículos que tienen imágenes insertadas en el cuerpo. En estos casos, antes de invocar al método agregar_articulo posiblemente quieras analizar el cuerpo del mismo, extraer las imágenes insertadas, invocar el método agregar_imagen para obtener la nueva URL, reemplazar la URL de la imagen en el cuerpo del artículo, y recién luego invocar al método agregar_articulo.



Argumento


  • base64 (string, requerido)
    Es un string que representa la imagen codificada en formato base64.

  • titulo (string, opcional)

  • watermark (boolean, opcional)
    Indica si a la imagen se le debe aplicar la marca de agua configurada.
    Su valor por defecto es False.

  • convert_to_webp (boolean, opcional)
    Indica si la imagen debe convertirse al formato WebP.
    Su valor por defecto es True.



Respuesta

  • resultado (boolean)
    Indica si la imagen se agregó satisfactoriamente o no.

  • id (integer)
    Es el ID que se le asignó a la imagen agregada.

  • url (string)
    Es la URL pública de acceso a la imagen agregada.

  • html (string)
    Es la representación de un tag <img> de la imagen agregada.

  • error (string)
    Si el resultado=False, este campo detalla el motivo del error.




Ejemplos de uso

La dirección para conectarse al webservice tiene el siguiente formato: 

https://<email>:<password>@<dominio>/ws/call/xmlrpc


Ejemplo en python: agregar_articulo

# -*- coding: utf-8 -*-
import base64
from xmlrpc.client import ServerProxy

# define los parámetros de conexión
email = 'juancruz@gmail.com'
password = 'mipassword'
dominio = 'misitioweb.com'

# se conecta al webservice
webservice = ServerProxy('https://%s:%s@%s/ws/call/xmlrpc' % (email, password, dominio))

# agrega tres imágenes y guarda sus datos en una lista
imagenes = []
for nombre in ('foto1.jpg', 'foto2.jpg', 'foto3.jpg'):
    image_file = open(nombre, 'rb')
    encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    imagenes.append({'base64': encoded_string, 'titulo': nombre})

# agrega una artículo con las tres imágenes de antes
result = webservice.agregar_articulo({
  'id': 1483,
  'titulo': 'La inundación atrajo a una especie de tortuga gigante',
  'fecha_hora': '05/01/2022 08:30',
  'categoria': 'Curiosidades',
  'etiquetas': ['Naturaleza', 'Animales'],
  'imagenes': imagenes,
  'detalle': 'Un gran ejemplar fue visto intentando cruzar una ruta',
  'cuerpo': '<p>Es conocida como <b>tortuga de laguna</b> y no es muy común ver este tipo de animales. En esta región escasean las fuentes de agua, pero las abundantes lluvias que se dan desde marzo han creado las condiciones propicias para su desarrollo.</p><p>Asombra por su tamaño, ya que su caparazón puede llegar a medir hasta medio metro de largo.</p>'})

print result
$ {'resultado': True, 'id': 1291, 'url': '/contenido/1291/la-inundacion-atrajo-a-una-especie-de-tortuga-gigante'}


Ejemplo en python: agregar_imagen

# -*- coding: utf-8 -*-
import base64
from xmlrpc.client import ServerProxy

# define los parámetros de conexión
email = 'juancruz@gmail.com'
password = 'mipassword'
dominio = 'misitioweb.com'

# se conecta al webservice
webservice = ServerProxy('https://%s:%s@%s/ws/call/xmlrpc' % (email, password, dominio))

# abre la imagen y la codifica en base64
image_file = open('paisaje.jpg', 'rb')
encoded_string = base64.b64encode(image_file.read()).decode('utf-8')

# agrega la imagen a través del webservice
result = webservice.agregar_imagen({
    'base64': encoded_string,
    'titulo': 'Vista del valle',
})

print result
$ {'resultado': True, 'id': 6215, 'url': '/download/multimedia.normal.bdbda368a23b7ac9.6e6f726d616c2e6a7067.jpg', 'html': '<img alt="Vista del valle" class="img-responsive lazyload" data-sizes="auto" data-src="/download/multimedia.normal.bdbda368a23b7ac9.6e6f726d616c2e6a7067.jpg" data-srcset="/download/multimedia.normal.bdbda368a23b7ac9.6e6f726d616c2e6a7067.jpg 1024w, /download/multimedia.miniatura.bc18be0913ff618e.6d696e6961747572612e6a7067.jpg 300w" height="1024" src="data:," width="1024" />'}



Consideraciones importantes

  • El webservice procesa  2 solicitudes por segundo como máximo. Asegúrate de respetar ese valor, de lo contrario obtendrás una respuesta de error 429, 405 o 413. 
  • Se admiten solicitudes de 20 Mb como máximo.
  • Se recomienda usar siempre HTTPS para mayor seguridad.




Redirección de URLs

Si quieres que las viejas URLs sean redirigidas hacia las nuevas URLs, deberás construir un mapa de redirecciones. Se trata de un archivo de texto en el que cada línea contiene dos URLs (la vieja y la nueva) separadas por un espacio y finaliza con punto y coma, por ejemplo:


/2022-01-13/la-redaccion-de-el-faro.html /contenido/3465/la-redaccion-de-el-faro;
/2022-01-12/inundaciones.html /contenido/3468/inundaciones;
/category/economia /categoria/86/economia;


El anterior es el ejemplo más simple, ya que se indica una coincidencia exacta: si la URL de origen coincide, se redirige a la URL de destino. Pero en la práctica, algunas URLs de origen vienen con argumentos adicionales (por ejemplo, cuando los enlaces se han compartido en redes sociales). En estos casos, las URLs de origen pueden llegar de esta forma:

/2022-01-13/la-redaccion-de-el-faro.html?fb=39ql389


Si la URL puede contener argumentos adicionales variables, el formato de redirección anterior no será suficiente. Para redirigir estos casos es posible utilizar expresiones regulares de Nginx. Este artículo no pretende instruir sobre el uso de expresiones regulares, para ello se recomienda consultar la documentación pertinente. El mapeo de la URL de origen se hace sobre la variable $request_uri



Consideraciones importantes

  • Las URLs no deben especificar el dominio, sólo la ruta.
  • El mapa no debe contener URLs de origen repetidas.
  • Enviar el mapa de redirecciones a soporte@medios.com.ar para su validación y activación.
  • Se aceptan mapas de hasta 200000 URLs y 50Mb como máximo.
  • Una vez que se active el mapa no se aceptarán modificaciones.


¿Le fue útil este artículo?

¡Qué bueno!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Díganos cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
La verificación de CAPTCHA es obligatoria.

Comentarios enviados

Agradecemos su iniciativa, e intentaremos corregir el artículo