
1. Descripción
La API HTTP admite su uso desde diferentes lenguajes de programación, acontinuación os mostramos un ejemplo realizado en python para enviar SMS.
A continuación le mostramos un script realizado en python, para enviar SMS a móviles desde la plataforma de Descom SMS.
2. Requerimientos
Tener instalado el interprete de python, que puede descargar en http://python.org, el interprete adecuado para su sistema operativo. Python, dispone de un interprete para los SO más conocidos y usados.
3. Código
import sys
import getopt
import httplib
import urllib
import xml.dom.minidom
from xml.dom.minidom import parseString
####################
# Funciones
####################
def usage():
print 'Uso del programa:'
print '\tArgumentos Obligatorios:'
print '\t\t -i\t--id\t\tCodigo de Cliente de la cuenta en Descom SMS'
print '\t\t -u\t--username\tNombre de usuario de la cuenta en Descom SMS'
print '\t\t -p\t--passwd\tPassword del usuario de la cuenta en Descom SMS'
print '\tArgumentos Opcionales:'
print '\t\t -s\t--sendsms\tLista de nuemeros de moviles a los que se le envia el mensaje, separado por ",". Si no se define este argumento, se obtiene el saldo de la cuenta.'
print '\t\t -m\t--message\tTexto del mensaje a enviar.'
print '\t\t -r\t--remitente\tRemitente personalizado del mensaje.'
def StrtoHex(s):
lst = []
for ch in s:
hv = hex(ord(ch)).replace('0x', '')
if len(hv) == 1:
hv = '0'+hv
lst.append(hv)
return reduce(lambda x,y:x+y, lst)
#######################
# Variables globales
#######################
HOSTNAME = 'www.descomsms.com'
URL='/AP/descomMessage.servlet.Servlet'
VERBOSE=False
USERNAME=''
PASSWD=''
ID=''
REMITENTE=''
MOVILES=''
MENSAJE=''
MENSAJESXML=''
#######################
# Entrada de datos
#######################
try:
opts, args = getopt.getopt(sys.argv[1:], "hu:p:i:vs:m:r:", ["help", "username=", "passwd=", "id=","verbose","sendsms=","message=","remitente="])
except getopt.GetoptError, err:
print str(err)
usage()
sys.exit(2)
for o, a in opts:
if o == "-v":
VERBOSE = True
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-u", "--username"):
USERNAME = a
elif o in ("-p", "--passwd"):
PASSWD = a
elif o in ("-i", "--id"):
ID = a
elif o in ("-s","--sendsms"):
MOVILES = a
elif o in ("-m","--message"):
MENSAJE = a
elif o in ("-r","--remitente"):
REMITENTE = a
else:
assert False, "unhandled option"
if USERNAME=='' or PASSWD=='' or ID=='':
usage()
sys.exit()
if MOVILES<>'' and MENSAJE=='':
usage()
sys.exit()
############################
# Crear Trama XML de envio
############################
N=0
if MOVILES<>'':
for M in MOVILES.split(','):
N=N+1
MENSAJESXML+='<Mensaje><Id>'+str(N)+'</Id><Destino>'+M.strip()+'</Destino><Texto>'+StrtoHex(MENSAJE)+'</Texto></Mensaje>'
if REMITENTE<>'':
REMITENTE=StrtoHex(REMITENTE)
REMITENTE='<Remitente>'+REMITENTE+'</Remitente>'
XML='<TXEnvio><Autentificacion><Usuario>'+StrtoHex(USERNAME)+'</Usuario><Passwd>'+StrtoHex(PASSWD)+'</Passwd><Idcli>'+ID+'</Idcli>'+REMITENTE+'</Autentificacion>'
if MENSAJESXML<>'':
XML+='<Mensajes><Total>'+str(N)+'</Total>'+MENSAJESXML+'</Mensajes>'
XML+='</TXEnvio>'
##################
# Envio de SMS's
##################
params = urllib.urlencode({'xml': XML})
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = httplib.HTTPSConnection(HOSTNAME)
conn.request('POST', URL, params, headers)
response = conn.getresponse()
if response.status<>200:
print 'Error: ',response.reason
sys.exit(2)
RXML=response.read()
conn.close()
dom=parseString(RXML)
nodos=dom.childNodes
#######################
# Analisis de respuesta
#######################
for n in dom.getElementsByTagName("Autentificacion"):
Auth=n
break
for n in Auth.getElementsByTagName("Resultado"):
RAuth=n.firstChild.data
for n in Auth.getElementsByTagName("Comentario"):
Comentario=n.firstChild.data
for n in Auth.getElementsByTagName("Saldo"):
SALDO=n.firstChild.data
if RAuth<>"1":
print "Error: ", Comentario
sys.exit(2)
if MOVILES=='':
print "Saldo actual: ",SALDO,"creditos"
sys.exit(0)
else:
for n in dom.getElementsByTagName("Mensajes"):
MSGS=n
break
TOTAL_ERRORES=int(MSGS.attributes["total_error"].value)
TOTAL_MENSAJES=int(MSGS.attributes["total_mensajes"].value)
TOTAL_OK=int(MSGS.attributes["total_ok"].value)
if TOTAL_ERRORES==0:
print 'Ok, '+str(TOTAL_OK)+' mensajes enviados'
else:
if TOTAL_OK==0:
print 'Error, ningun mensajes ha sido enviado.'
else:
print 'Error, '+str(TOTAL_ERRORES)+' mensajes enviados con errores, '+str(TOTAL_OK)+' enviados correctamente:'
MMOVILES=MOVILES.split(',')
NN=0
for M in MSGS.getElementsByTagName("Mensaje"):
for n in M.getElementsByTagName("Resultado"):
RMesg=n.firstChild.data
break
for n in M.getElementsByTagName("Comentario"):
CMesg=n.firstChild.data
break
if RMesg=="0":
print '\t['+MMOVILES[NN]+'] ERR ['+CMesg+']'
NN=NN+1
print "Saldo actual: ",SALDO,"creditos"
4. Descarga
5. Uso del programa
Llamar al programa:
linux:-$ python dcsms.py
Uso del programa:
Argumentos Obligatorios:
-i --id Codigo de Cliente de la cuenta en Descom SMS
-u --username Nombre de usuario de la cuenta en Descom SMS
-p --passwd Password del usuario de la cuenta en Descom SMS
Argumentos Opcionales:
-s --sendsms Lista de numeros de moviles a los que se le envia el mensaje, separado por ",". Si no se define este argumento, se obtiene el saldo de la cuenta.
-m --message Texto del mensaje a enviar.
-r --remitente Remitente personalizado del mensaje.