Un webservice es una tecnología que permite a dos aplicaciones de software interactuar entre sí para intercambiar datos sin requerir la intervención manual de un ser humano. Tu sitio web creado con Medios CMS incluye un webservice que permite insertar noticias


El webservice en tu sitio está deshabilitado por defecto.
Solicita la habilitación contactándote a soporte@medios.com.ar


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 python2 usando la librería xmlrpclib.

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



Método agregar_noticia

Recibe un diccionario con los datos de la noticia que se desea agregar. Si el resultado es exitoso, devuelve un diccionario con el ID y la URL de la noticia agregada.

Entre los parámetros que recibe este método se encuentra el ID de la noticia, es decir, el identificador de la noticia en tu base de datos actual. No obstante, cuando la noticia se agrega a tu sitio creado con Medios CMS, se le asigna un nuevo ID. Este nuevo ID probablemente difiera del ID que tenía la noticia en tu base de datos actual.
El webservice registra esta relación entre el viejo ID y el nuevo ID. Esto te permite invocar el método agregar_noticia más de una vez usando el mismo ID: la primera vez la noticia se dará de alta, y las demás veces se actualizarán sus datos.



Argumento

  • id (integer, requerido)

Identificador único de la noticia en tu base de datos actual.


  • titulo (string, requerido)

Título de la noticia, en formato de texto plano.


  • fecha_hora (string, requerido)

Fecha y hora de publicación de la noticia en formato dd/mm/yyyy hh:mm.


  • detalle (string, requerido)

Copete (también llamado entrada) de la noticia, en formato de texto plano.


  • categoria (string, requerido)

Categoría o sección principal de la noticia.

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


  • autor (string, opcional)

Autor de la noticia.


  • estado (integer, opcional)

Estado de la noticia, debe ser uno de los siguientes valores:

1. borrador

2. publicada

3. eliminada

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


  • cuerpo (string, opcional)

Cuerpo principal de la noticia, en formato texto plano o HTML. 


  • prioridad (integer, opcional)

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


  • videos (array, opcional)

Lista de URLs de YouTube que se quieran vincular a la noticia.


  • etiquetas (array, opcional)

Lista de etiquetas de la noticia. 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 esta noticia.
    Su valor por defecto es True.


  • imagenes (array, opcional)
    Lista de imágenes de la noticia, 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 la noticia se agregó satisfactoriamente o no.

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

  • url (string)
    Indica la URL pública de acceso a la noticia agregada.

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




Método 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 noticias que tienen imágenes insertadas en el cuerpo. En estos casos, antes de invocar al método agregar_noticia posiblemente quieras analizar el cuerpo de la misma, extraer las imágenes insertadas, invocar el método agregar_imagen (para agregarlas al Centro Multimedia de tu sitio creado con Medios CMS y obtener el nuevo ID / URL de la imagen), reemplazar la URL de la imagen en el cuerpo de la noticia, y recién luego invocar al método agregar_noticia.



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_noticia

# -*- coding: utf-8 -*-
from xmlrpclib import ServerProxy
import base64

# 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())
    imagenes.append({'base64': encoded_string, 'titulo': nombre})

# agrega una noticia con las tres imágenes de antes
result = webservice.agregar_noticia({
  '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 -*-
from xmlrpclib import ServerProxy
import base64

# 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())

# 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

  • Por motivos de seguridad, realizar la conexión siempre a través de HTTPS.

  • El webservice procesa  3 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.

  • El tamaño máximo admitido para cada solicitud es de 5mb.




Redirección de URLs

El webservice suele utilizarse cuando se desea migrar un sitio web desde otra plataforma hacia Medios CMS. En este caso lo ideal es que, al cambiar de plataforma, las viejas URLs sean redirigidas hacia las  nuevas URLs. 


Para estos casos es necesario proporcionar un mapa de redirecciones. Este mapa se encargará de redirigir las URLs usando un código de estado 301 (redirección permanente). Es 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. 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;
  • Las URLs no deben especificar el dominio, sólo el path.
  • El mapa no debe contener URLs repetidas.
  • Se recomienda proporcionar exclusivamente URLs canónicas.
  • Se aceptan mapas de hasta 500000 URLs.


Una vez finalizada la migración, habiendo construido el mapa de redirecciones, enviarlo a soporte@medios.com.ar para su oportuna activación.