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.