| View previous topic :: View next topic |
| Author |
Message |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Mon Jun 06, 2011 5:10 pm Post subject: Envío automatizado de SMS (Solucionado) |
|
|
Buenas, pues llevo un tiempo queriendo hacer esto y no lo consigo, ¿alguien sabe como hacer que el servidor pueda mandar un SMS ante ciertas situaciones?
He visto varios programas por portage pero son tan antiguos que ya no funcionan. Lo ideal obviamente sería no depender de internet y enviarlo directamente pero no me compensa ni el precio ni el trabajo, así que lo que busco es poder enviarlos usando algún servicio de internet, el problema es que no los encuentro, había pensado incluso usar facebook o tweeter pero no envían a España ¬¬
Un saludo.
Last edited by Txema on Thu Jun 09, 2011 3:59 pm; edited 1 time in total |
|
| Back to top |
|
 |
opotonil l33t

Joined: 17 Jun 2005 Posts: 699 Location: 127.0.0.1
|
|
| Back to top |
|
 |
pelelademadera l33t

Joined: 14 Jul 2008 Posts: 961 Location: La Plata, Argentina
|
Posted: Tue Jun 07, 2011 2:03 am Post subject: |
|
|
un sms se puede hacer mediante mail.
al menos aca en argentina, en la epoca de ctimovil era:
nºdetelefono@ctimovil.com y te enviaba un sms.
actualmente no lo he chequeado _________________ el pelado de la gente |
|
| Back to top |
|
 |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Wed Jun 08, 2011 12:22 pm Post subject: |
|
|
No, el envío mediante mail no funciona, hace años que lo deshabilitaron aquí
Gracias opotonil, no había encontrado eso, voy a probar a ver si funciona (aunque lleva un día para mandarme el código de confirmación al móvil y todavía nada...)
Un saludo. |
|
| Back to top |
|
 |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Wed Jun 08, 2011 7:40 pm Post subject: |
|
|
Parece que ya llegan los mensajes, ahora a usar las APIs
He encontrado este mini script en python, el problema es que no tengo ni idea de como se ejecuta siquiera un programa en python así que no sé qué hace xDD
| Code: | # Requires gdata.py-1.2.1 from http://code.google.com/p/gdata-python-client/
try:
from xml.etree import ElementTree
except ImportError:
from elementtree import ElementTree
import gdata.calendar.service
import gdata.service
import atom.service
import gdata.calendar
import atom
import base64
import time
def send_sms(message_text):
cal_client = gdata.calendar.service.CalendarService()
cal_client.email = "YOUR GOOGLE MAIL ACCOUNT"
cal_client.password = "YOUR GOOGLE MAIL PASSWORD"
cal_client.source = 'calendar-sms-misuse-1.0'
cal_client.ProgrammaticLogin()
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text=message_text)
event.content = atom.Content(text="")
# can't set SMS reminders for under 5 minutes, so set this to 6 mins from now
start_time = time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.time()+(6*60)))
end_time = time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.time() + 3600))
when = gdata.calendar.When(start_time=start_time, end_time=end_time)
# can't set SMS reminders for under 5 minutes, so set this to 5
reminder = gdata.calendar.Reminder(minutes=5, extension_attributes={"method":"sms"})
when.reminder.append(reminder)
event.when.append(when)
cal_client.InsertEvent(event, '/calendar/feeds/default/private/full') |
¿Alguna ayudita?
Un saludo. |
|
| Back to top |
|
 |
agdg Apprentice


Joined: 15 Aug 2010 Posts: 278
|
Posted: Wed Jun 08, 2011 8:30 pm Post subject: |
|
|
Para ejecutar un programa python tan solo debes invocar a python: python2 /ruta/programa-python.py. O incluso puedes darle permisos de ejecucción al programa de python e invocarlo directamente: chmod +x python-program.py && ./python-program.py
Respecto a lo que hace el programa, obviamente lo que dice que hace En cualquier caso, el pequeño trozo que has puesto tan solo importa una serie de módulos de la librería estándar de python así como el módulo de terceros gdata, de ahí que te indique expresamente que gdata es una dependencia. En cualquier caso no es problema, ya que incluso está en portage: /package/dev-python/gdata
A continuación viene la función send_sms(), a la cual se le pasa como parámetro el contenido de la variable message_text, que por el nombre se intuye que debe ser el contenido del mensaje. Y ahí termina el fragmento que pusiste. Obviamente la parte más importante a configurar son los parámetros que te está pidiendo en cal.client.____
Normalmente los script de python incluyen instrucciones de uso; si ejecutas python2 python-program.py -h; seguramente te salga el método de uso. _________________ make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux |
|
| Back to top |
|
 |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Wed Jun 08, 2011 9:17 pm Post subject: |
|
|
El problema es que ese es todo el código que hay xDD
gdata ya lo había instalado pero no consigo hacerlo funcionar
Con python send_sms.py Prueba se ejecuta y no muestra error, pero no hace lo que debe y con ./send_sms.py Prueba da un montón de errores del tipo:
| Code: | | ./send_sms.py: línea 3: from: no se encontró la orden |
Un saludo |
|
| Back to top |
|
 |
agdg Apprentice


Joined: 15 Aug 2010 Posts: 278
|
Posted: Wed Jun 08, 2011 9:44 pm Post subject: |
|
|
En ese caso prueba lo siguiente:
Añade al final del script:
| Code: | message_text = input().replace("\n", " ")
send_sms(message_text) |
Al llamar el script, pasale un fichero de texto que contenga el mensaje a enviar. Si el script se llama script.py y el mensaje esta en el archivo mensaje.text:
| Code: | | script.py < mensaje.text |
OJO: De forma intencionada los retornos de carro se convierten en espacios, ya que no se como se comportará el script si encuentra un retorno de carro. Si quieres eliminar este comportamiento, elimina: .replace("\n", " ") _________________ make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux |
|
| Back to top |
|
 |
opotonil l33t

Joined: 17 Jun 2005 Posts: 699 Location: 127.0.0.1
|
Posted: Thu Jun 09, 2011 8:46 am Post subject: |
|
|
Para ejecutarse con:
¿No necisitaria una linea al inicio del script indicando el lenguaje? algo similar a "#!/bin/bash" pero para python.
Por descartar intenta ejecutarlo con:
Salu2.
--- EDITADO ---
Perdona, veo que lo anterior ya lo probaste. No me fije bien en tu post.
Sin que tenga ni idea de python el script anterior tiene pinta de definir la funcion "send_sms" pero parece que no la llame en ningun lado, repito de python, realmente, ni idea.
Pero puedes probar a añadir lo siguiente al final del script:
| Code: |
if __name__ == '__main__':
send_sms("Prueba de notificacion")
|
No se si lo de "if __name__ == '__main__':" seria necesario, pero por los scripts de python que he visto es tipico...
O prueba con este otro:
http://www.randomshouting.com/2011/02/06/Free-SMS-notifications-from-Google.html
Segun la fecha es de este año y el codigo parece bastante limpio. En este por lo que entiendo se declara una clase "GoogleSms" con su constructor "__init__" y el metodo "send" y al final del mismo si que se instancia la clase y se llama al metodo "send".
Last edited by opotonil on Thu Jun 09, 2011 9:56 am; edited 5 times in total |
|
| Back to top |
|
 |
agdg Apprentice


Joined: 15 Aug 2010 Posts: 278
|
Posted: Thu Jun 09, 2011 9:35 am Post subject: |
|
|
opotonil lleva toda la razón, y puesto que no existe línea shebang, crea-la añadiendo justo al principio del archivo:
#!/usr/bin/env python2 _________________ make install . es
Noticias, apuntes y pequeños tutoriales sobre GNU/Linux |
|
| Back to top |
|
 |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Thu Jun 09, 2011 3:57 pm Post subject: |
|
|
Mil gracias a los dos, ya tengo el segundo script funcionando con algunas modificaciones, lo pongo aquí para el que le interese:
| Code: | #!/usr/bin/env python2
import atom
import gdata.calendar
import gdata.calendar.service
import time
import sys
TIME_FORMAT = '%Y-%m-%dT%H:%M:%S.000Z'
CALENDAR_URL = 'http://www.google.com/calendar/feeds/default/private/full'
class GoogleSms:
def __init__(self, username, password):
self.username = username
self.password = password
service = gdata.calendar.service.CalendarService()
service.email = username
service.password = password
service.source = 'GoogleSms'
service.ProgrammaticLogin()
self.calendar_service = service
def send(self, title, message):
# Set time to one hour from now
event_time = time.strftime(TIME_FORMAT, time.gmtime(time.time()+420))
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text=title)
event.content = atom.Content(text=message)
# Send a reminder 60 minutes before the event.
# Since the event is 60 minutes from now, we will receive the message
# in a few seconds.
reminder = gdata.calendar.Reminder(minutes=5)
reminder.method = 'sms'
when = gdata.calendar.When(event_time)
when.reminder.append(reminder)
event.when.append(when)
try:
# Add the entry to calendar
cal_event = self.calendar_service.InsertEvent(event, CALENDAR_URL)
except gdata.service.RequestError, request_exception:
raise
if __name__ == '__main__':
sms = GoogleSms('yourusername@gmail.com', 'yourpassword')
sms.send(sys.argv[1],sys.argv[2]) |
Lo he modificado para poder ejecutarlo directamente como ./script y además le he añadido dos argumentos para el título y el mensaje.
Un saludo  |
|
| Back to top |
|
 |
HIHIHI n00b

Joined: 14 Nov 2011 Posts: 3
|
Posted: Mon Nov 14, 2011 6:52 pm Post subject: Re: Envío automatizado de SMS (Solucionado) |
|
|
Me interesa el tema, quisiera que me ayuden a poder recibir sms al llegar un mail de gmail.
gracias.
Last edited by HIHIHI on Mon Nov 14, 2011 9:54 pm; edited 1 time in total |
|
| Back to top |
|
 |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Mon Nov 14, 2011 7:28 pm Post subject: |
|
|
¿Qué quieres exactamente?
Este código es simplemente para mandar el sms, si además quieres que lo mande cuando suceda X entonces hay que crear otro script que hará uso de este al final.
Yo hice uno que comprobaba si había correos de cierto remitente y cuando era asi me mandaba un SMS avisándome, este es el código:
| Code: | #!/bin/bash
offlineimap
MAIL=`grep -l Biblioteca .UGR/INBOX/cur/*`
fecha_actual=`date +%d/%m/%y`
if [ "$MAIL" != "" ]
then
min=8
for i in $MAIL
do
Titulo=`iconv -f iso-8859-1 -t utf-8 /home/server/$i|sed 's/,/\\,/g'|sed 's/=/\\=/g'|sed 's/:/\\:/g'|grep TITLE |sed 's/.*TITLE....//'|sed 's/ /_/g'`
for UnTitulo in $Titulo
do
if [ "${#UnTitulo}" -gt 30 ]
then
UnTitulo=`echo "${UnTitulo:0:30}..."`
fi
Fecha=`iconv -f iso-8859-1 -t utf-8 /home/server/$i|sed 's/,/\\,/g'|sed 's/=/\\=/g'|sed 's/:/\\:/g'|grep -m 1 DUE |sed 's/.*DUE..//'`
if [ "${Fecha:6:2}" -eq "${fecha_actual:6:2}" ] && [ "${Fecha:3:2}" -eq "${fecha_actual:3:2}" ] && [ "${Fecha:0:2}" -gt "${fecha_actual:0:2}" ] || [ "${Fecha:3:2}" -gt "${fecha_actual:3:2}" ] || [ "${Fecha:6:2}" -gt "${fecha_actual:6:2}" ]
then
TituloLimpio=`echo $UnTitulo|sed 's/_/ /g'`
/usr/local/bin/EnviarSMS.py " $TituloLimpio antes del $Fecha ||" $min
let "min += 30"
sleep 130
#echo "Ejecutado - $TituloLimpio - $Fecha || ${Fecha:3:2} - ${fecha_actual:3:2} | ${Fecha:0:2} - ${fecha_actual:0:2}"
fi
done
done
fi |
Seguro que puede hacerse mejor, pero esto es lo que tengo actualmente funcionando.
Y este es el script para enviar los sms en python modificado:
| Code: | #!/usr/bin/env python2
import atom
import gdata.calendar
import gdata.calendar.service
import time
import sys
TIME_FORMAT = '%Y-%m-%dT%H:%M:%S.000Z'
CALENDAR_URL = 'http://www.google.com/calendar/feeds/default/private/full'
class GoogleSms:
def __init__(self, username, password):
self.username = username
self.password = password
service = gdata.calendar.service.CalendarService()
service.email = username
service.password = password
service.source = 'GoogleSms'
service.ProgrammaticLogin()
self.calendar_service = service
def send(self, message, tiempo):
# Set time to one hour from now
event_time = time.strftime(TIME_FORMAT, time.gmtime(time.time()+int(int(tiempo)*60)))
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text=message)
event.content = atom.Content(text=message)
# Send a reminder 60 minutes before the event.
# Since the event is 60 minutes from now, we will receive the message
# in a few seconds.
reminder = gdata.calendar.Reminder(minutes=5)
reminder.method = 'sms'
when = gdata.calendar.When(event_time)
when.reminder.append(reminder)
event.when.append(when)
try:
# Add the entry to calendar
cal_event = self.calendar_service.InsertEvent(event, CALENDAR_URL)
except gdata.service.RequestError, request_exception:
raise
if __name__ == '__main__':
sms = GoogleSms('TUUSUARIO@gmail.com', 'TUCONTRASEÑA')
if len(sys.argv) < 3:
sms.send(sys.argv[1],7)
else:
sms.send(sys.argv[1],sys.argv[2])
|
Un saludo |
|
| Back to top |
|
 |
HIHIHI n00b

Joined: 14 Nov 2011 Posts: 3
|
Posted: Tue Nov 15, 2011 2:23 am Post subject: Re: Envío automatizado de SMS (Solucionado) |
|
|
La verdad soy un ignorante del tema Python y no quisiera molestarte.
Pero me interesaria alojar en un hosting (website) con soporte python, dichos comandos/script para hacer automatico el envio de los nuevos correos para asi recibirlos via sms.
Por el monento use dicho gadget http://mail2sms.fr.nf/help.php que me funciono bastante bien, pero me empezo a fallar.
Me gustaria poder realizar lo que tu hiciste.
Saludos, y gracias. |
|
| Back to top |
|
 |
Txema l33t

Joined: 20 May 2008 Posts: 757 Location: Granada
|
Posted: Tue Nov 15, 2011 1:23 pm Post subject: |
|
|
| Quote: | tengo un servidor que soporta python, pero la verdad no tengo idea de como se usa.
Probe con PHP y no me funcionaron. ahora me encuentro que a usted le funciona pero eso si, con python. |
Yo no domino nada del tema de python como podrás ver en los mensajes de arriba lo único que hice fue copiar el script, ponerle el nombre (EnviarSMS.py) y hacerlo ejecutable. A ese respecto no hice nada más con python, y de PHP ya sí que no he tocado nada xD
| Quote: | | El primer Script (el cual no se como llamarlo ni punto cuanto es) verifica si hay un correo, es cierto? |
El primer Script que he puesto es simplemente un script en BASH que yo he llamado AvisoBiblioteca.sh y he hecho ejecutable. Comprueba si hay correo proveniente de la biblioteca, luego extrae el título del libro así como las fechas de entrega, hace algunos cálculos y si la fecha de entrega es mayor que la fecha actual entonces manda el SMS
| Quote: | | El segundo el llamado EnviarSMS.py envia si encuentra un o el correo deseado. es asi el tema? |
El segundo script, EnviarSMS.py, envía un SMS (sin comprobar nada, eso lo hace el primer script). Este sólo envía un SMS con dos opciones:
· un sólo argumento que corresponde al contenido del mensaje: EnviarSMS.py "CONTENIDO"
· Dos argumentos siendo el primero el contenido y el segundo el lapso de tiempo para colocar la alarma en google calendar(número en minutos, ej: 7): EnviarSMS.py "CONTENIDO" TIEMPO
Si usas el primer método lo pone a los 7 minutos, esto lo calculé a ojo y el segundo método lo puse porque me di cuenta de que a veces si pones muy juntas dos alarmas solo te envía el SMS de una de ellas. |
|
| Back to top |
|
 |
HIHIHI n00b

Joined: 14 Nov 2011 Posts: 3
|
Posted: Tue Nov 15, 2011 5:41 pm Post subject: Re: Envío automatizado de SMS (Solucionado) |
|
|
De nuevo gracias, Txema.
Me sentare a estudiar un poco mas.
Mas didactico imposible Txema, se agradece mucho.
Te aseguro habra mas preguntas.
Saludos- |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|