Ejemplos usando Python ====================== En este tutorial se van a mostrar diferentes ejemplos de como llamar la api rest del **DMDS** (Data-Mining and Delivery Services) con código de python. Siempre tener en cuenta que método (GET, POST, DELETE, etc) se esta usando para cada llamada y cómo hacemos las llamadas, la parte de la uri.- Devuelve información de un contacto ----------------------------------- En este ejemplo se va a explicar como devolver los grupos, eventos y campos de un contacto en concreto. En la llamada, en la url, hay que especificar el email del usuario ya existente en la base de datos de la api. Así de esta manera, se nos presentará todo la información de un contacto, como su nombre, apellido, etc. Aparte nos va a devolver a que grupos pertenece ese contacto y todos sus eventos. .. code-block:: python import requests r = requests.get("https://api-dmds-host/v1/contacto/email", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxx" }, ) print(r.text)- Listar contactos inválidos -------------------------- Con esta parte de código se nos va a mostrar todos los usuarios que están inválidos. .. code-block:: python import requests r = requests.get("https://api-dmds-host/v1/contactos/invalidos/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxxxxxxx" }, ) print(r.text)- Crear de nuevo o actualizar un contacto --------------------------------------- Con el siguiente parte de código se puede crear un contacto de nuevo o actualizar uno existente.La primera variable que se define es el correo electrónico, para entenderlo es como una primary key en la base de datos. Siempre para actualizar algún contacto nos basaremos en su email ya que es único.Podemos cambiar el grupo a que pertenece un  contacto, en la parte de grupos añadir otro nombre de grupo existente.También podemos cambiar su nombre, su apellido, etc. Todos los campos que se quieren cambiar. .. code-block:: python import requests import json xdata ={ "email":"xxxxxxx@xxxx", "grupos":"xxxx", "nombre":"xxxxx", "apellido":"xx", "sexo":"x", "edad":"xxx", "invalido":"0" } r = requests.post("https://api-dmds-host/v1/contacto/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxx" }, data= json.dumps( xdata ) ) if r.status_code==200: print(r.text) print(r.status_code, r.reason)- Invalidar un contacto --------------------- En la misma actualización de un contacto, se puede invalidar o validar un contacto. Por defecto la variable invalido siempre está en cero. Pero en el caso que un usuario se quiere desuscribir o invalidar, poniendo esa variable a uno, (invalido: 1). Nos permite definir que este contacto esta en la lista de los inválidos. .. code-block:: python import requests import json xdata ={ "email":"xxxxx", "grupos":"xxxxx", "nombre":"xxxx", "apellido":"xx", "sexo":"x", "edad":"xxx", "invalido":"1" } r = requests.post("https://api-dmds-host/v1/contacto/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxxxxxx" }, data= json.dumps( xdata ) ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Enviar un correo ---------------- Para enviar un correo vamos a diferenciar los tipos que queremos enviar. Primero hay dos diferentes llamadas para enviar un correo a uno sólo destinatario y un correo a varios destinatarios. Para eso el cambio es muy básico, cambiar contacto por contactos. Otras dos llamadas se diferencian en enviar un html inline o un html mediante uri.Llamada genérica .. code-block:: python import requests r = requests.post("https://api-dmds-host/v1/envio/enviar/", headers={'Accept':'application/json','Content-type': 'application/json',"Authorization":"xxxxxxxxx"}, data ='{"campana_id":1234,"email":true,"contacto":{"email":"xxxxxxxxx","nombre":"xxxxx","apellido":"xxxxxx"}') if r.status_code==200: print(r.text) print(r.status_code, r.reason) Enviar un correo a uno sólo destinatario con html uri ----------------------------------------------------- Para realizar este envío es necesario definir algunos campos, como por ejemplo: el campo de email tiene que ser siempre verdadero, ya que esto nos permite enviar el correo. SI este valor esta en falso, no se podrán enviar mensajes. Otros valores a definir son la id de la campaña y el correo destinatario. Los otros valores como nombre, apellido, asunto son opcionales. En el caso que quiera enviar un html mediante uri, este se añade en la apartad de html_url. En el apartado de headers, recordar definir su valor de autorización. .. code-block:: python import requests r = requests.post("https://api-dmds-host/v1/envio/send_one_uri/", headers={'Accept':'application/json','Content-type': 'application/json',"Authorization":"xxxxxxxxxxxxx"}, data ='{"campana_id":1234,"email":true,"contacto":{"email":"xxx@xxx","nombre":"xxxx","apellido":"xxx"}, "html_url":"xxxxxxxxxxxxx"}') if r.status_code==200: print(r.text) print(r.status_code, r.reason) Enviar un correo a uno sólo destinatario con html inline -------------------------------------------------------- La diferencia de la llamada previa esta es como definir el html dentro del código. Hay dos maneras de enviar un correo con html inline.Una es definir el código html dentro del script: .. code-block:: python import requests import json xdata ={ "campana_id":111, "email": True, "asunto": "xxxxxxxx", "remitente": "xxxxxxxxx", "contacto":{ "email":"xxxxxx", "nombre":"xxxxx", "apellido":"xxxxx" }, "html": " Page Title

This is a Heading

This is a paragraph.

" } r = requests.post("https://api-dmds-host/v1/envio/send_one_inline/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxxx" }, data= json.dumps( xdata ) ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Otra manera es esta parte de código html, en un fichero. .. code-block:: python import requests import json in_file = open("index.html", "rb") # opening for [r]eading as [b]inary htmlfile = in_file.read() in_file.close() unicode_html_string = htmlfile.decode('utf-8') xdata ={ "campana_id":111, "email": True, "asunto": "Enviando HTML ", "remitente": "xxxx"xxx", "contacto":{ "email":"xxx"xxxx", "nombre":"xxxx", "apellido":"xxxxx" }, "html":"{}".format( unicode_html_string ) } r = requests.post("https://api-dmds-host/v1/envio/send_one_inline/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxx" }, data= json.dumps( xdata ) ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Enviar un correo a uno sólo destinatario con html inline raw ------------------------------------------------------------ Enviar este tipo de mensaje no inserta la imagen de seguimiento (la que permite saber si el usuario abrió/vio un e-mail), ni tampoco reemplaza las URLs para hacer click por URLs del dmds para hacer click-tracking. .. code-block:: python import requests import json in_file = open("index.html", "rb") # opening for [r]eading as [b]inary htmlfile = in_file.read() in_file.close() unicode_html_string = htmlfile.decode('utf-8') xdata ={ "campana_id":111, "email": True, "asunto": "Enviando HTML ", "remitente": "xxxx"xxx", "contacto":{ "email":"xxx"xxxx", "nombre":"xxxx", "apellido":"xxxxx" }, "html":"{}".format( unicode_html_string ) } r = requests.post("https://api-dmds-host/v1/envio/send_one_inline_raw/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxx" }, data= json.dumps( xdata ) ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Enviar un correo a uno sólo destinatario con xml inline ------------------------------------------------------- Permite enviar fichero xml. Tiene la misma estructura que enviar un fichero html, sólo cambiamos el formato de html a xml. Un ejemplo como enviar un fichero xml se puede ver en continuación: .. code-block:: python import requests import json in_file = open("file.xml", "rb") # opening for [r]eading as [b]inary xmlfile = in_file.read() in_file.close() unicode_xml_string = xmlfile.decode('utf-8') xdata ={ "campana_id":111, "email": True, "asunto": "Enviando XML", "remitente": "xxxxxx@xxxx", "contacto":{ "email":"xxxx@xxx.com", "nombre":"xxxx", "apellido":"xxxxxx" }, "xml": "{}".format( unicode_xml_string ) } r = requests.post("https://api-dmds-host/v1/envio/send_one_inline_xml/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxxxxxxxx" }, data = json.dumps( xdata ) ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Enviar un correo a más de un destinatario con html uri ------------------------------------------------------ Para esta llamada vamos a seguir el mismo concepto que para las otras a la hora de enviar un mensaje. En este caso queremos enviar a mucho destinatarios, para esto vamos a definir un array de usuarios que quienes queremos enviar y cambiar contacto por contactos. En el ejemplo que se muestra más abajo, enviamos un correo a dos personas, pero su puede definir muchas más personas. .. code-block:: python import requests r = requests.post("https://api-dmds-host/v1/envio/send_many_uri/", headers={'Accept':'application/json','Content-type': 'application/json',"Authorization":"xxxxxxxxxxx"}, data ='{"campana_id":1234,"email":true,"contactos":[{"email":"usuario1@xxxxxx","nombre":"xxxxxx","apellido":"xxxxxx"},{"email":"usuari02@xxxxx","nombre":"xxxxxx","apellido":"xxxx"}], "html_url":"xxxxxxxxxxxxxxxxx"}') if r.status_code==200: print(r.text) print(r.status_code, r.reason)Enviar un correo a más de un destinatario con html inlineimport requests r = requests.post("https://api-dmds-host/v1/envio/send_many_inline/", headers={'Accept':'application/json','Content-type': 'application/json',"Authorization":"xxxxxxx"}, data ='{"campana_id":"xxxxxxxxxxxx","email":true,"contactos":[{"email":"usuario1@xxxxx","nombre":"xxxxx","apellido":"xxxxxx"},{"email":"usuario2@xxxxxx","nombre":"xxxx","apellido":"xxxxx"}], "html":"Page Title

This is a Heading

This is a paragraph.

"}') if r.status_code==200: print(r.text) print(r.status_code, r.reason) Listar las variables globales y sus valores ------------------------------------------- En la api hay definidas una serie de variables globales. Para ver cuales son estas variables y sus valores podemos ver el siguiente código. .. code-block:: python import requests r = requests.get("https://api-dmds-host/v1/global/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxxx" }, ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Crear variables globales ------------------------ Siempre podemos crear las variables globales. Para la creación vamos a usar el método post, donde le pasamos un variable, cual nos va a indicar el nombre de la variable global. .. code-block:: python import requests xdata ={ "nombre": "xxxxxx", "valor": "xxxxxx" } r = requests.post("https://api-dmds-host/v1/global/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"xxxxxxx" }, data = "{"nombre": "lore ipsum", "valor":"hola"}" ) if r.status_code==200: print(r.text) print(r.status_code, r.reason)- Borrar variables globales ------------------------- De la misma manera que creamos unas variables globales, podemos eliminar estas. Sólo que en este vamos a usar un método que se llama  'Delete'. .. code-block:: python import requests r = requests.delete("https://api-dmds-host/v1/global/", headers={'Accept':'application/json','Content-type': 'application/json',"Authorization":"xxxxxxxx"}, data='{"nombre": "newglobal2", "valor": "xxxx"}') if r.status_code==200: print(r.text) print(r.status_code, r.reason) Listar las campañas ------------------- Con la misma estructura,  como listar los contactos inválido o listar las variables globales, podemos lista todas las campañas existentes. Para esto se utiliza el método get. .. code-block:: python import requests r = requests.get("https://api-dmds-host/v1/campania/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"APIKEYxxxx" }, ) if r.status_code==200: print(r.text) print(r.status_code, r.reason)- Crear un grupo -------------- Como hemos visto anteriormente, cuando creamos o modificamos un usuario podemos asignarle un grupo. Para poder asignar un grupo, hay que ver si este grupo existe, sino existe, podemos crearlo de la siguiente manera. .. code-block:: python import requests r = requests.post("https://api-dmds-host/v1/grupo/", headers={'Accept':'application/json','Content-type': 'application/json',"Authorization":"xxxxxxxxxxxxx"}, data='{"nombre":"xxxxx"}') if r.status_code==200: print(r.text) print(r.status_code, r.reason)- Listar los filtros ------------------ En el sistema de la api, se pueden crear diferentes filtros, que ayudan a especificar los envíos.Para ver esta lista de filtros existentes, seguimos el código mencionado abajo. .. code-block:: python import requests r = requests.get("https://api-dmds-host/v1/filtros/", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":"APIKEYxxxx" }, ) if r.status_code==200: print(r.text) print(r.status_code, r.reason) Revalidar lista de contactos ---------------------------- En este ejemplo, se lee una lista de contactos de un archivo de texto, y se revalidan por si estaban inválidos. .. code-block:: python import requests import argparse import sys import json import os APIKEY=os.environ[ 'APIKEY' ] DMDS=os.environ[ 'DMDS' ] with open( "revalidar.txt", "r") as fd: while True: email = fd.readline().strip() if email == None or not email: break print( email ) try: r = requests.get( f"https://api-dmds-{DMDS}.planisys.net/v1/revalidar/{email}", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":f"{APIKEY}" } ) except Exception as e: print( f"ERROR: al enviar el request {str(e)}" ) Guardar archivo EML de un envio a un email ----------------------------------------- .. code-block:: python import argparse import requests import json import sys import os dmds=os.environ['DMDS'] apikey=os.environ['APIKEY'] parser = argparse.ArgumentParser(usage='''retrieve eml for eeid and email''') parser.add_argument('eeid', help='eeid') parser.add_argument('email', help='email') args = parser.parse_args() eeid = args.eeid email = args.email try: response = requests.get( f"https://api-dmds-{dmds}.planisys.net/v1/eeid_eml/{eeid}/{email}", headers={ 'Accept':'application/json', 'Content-type': 'application/json', "Authorization":apikey, } ) except Exception as e: print( f"ERROR: {str(e)}" ) dict_resp = json.loads(response.content.decode()) eml = dict_resp['eml'] print(eml) .. |date| date:: Last Updated on |date|