Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Envío automatizado de SMS (Solucionado)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Spanish
View previous topic :: View next topic  
Author Message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Mon Jun 06, 2011 5:10 pm    Post subject: Envío automatizado de SMS (Solucionado) Reply with quote

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
View user's profile Send private message
opotonil
l33t
l33t


Joined: 17 Jun 2005
Posts: 699
Location: 127.0.0.1

PostPosted: Mon Jun 06, 2011 7:44 pm    Post subject: Reply with quote

Tambien me interesa el tema, aunque nunca he llegado a probar.

Quizas te pueda interesar algo de esto:
http://lopezivan.blogspot.com/2007/05/usando-el-api-de-google-calendar.html
http://blog.flink.it/2010/11/free-smses-through-google-calendar-by.html

Esto tiene pinta de ser demasiado viejo:
http://wiki.nagios.org/index.php/SkypeSmsNotification

Si alguna vez llega Google Voice a España:
http://everydayscripting.blogspot.com/2009/07/google-voice-python-sms.html

Salu2.
Back to top
View user's profile Send private message
pelelademadera
l33t
l33t


Joined: 14 Jul 2008
Posts: 961
Location: La Plata, Argentina

PostPosted: Tue Jun 07, 2011 2:03 am    Post subject: Reply with quote

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
View user's profile Send private message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Wed Jun 08, 2011 12:22 pm    Post subject: Reply with quote

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
View user's profile Send private message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Wed Jun 08, 2011 7:40 pm    Post subject: Reply with quote

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
View user's profile Send private message
agdg
Apprentice
Apprentice


Joined: 15 Aug 2010
Posts: 278

PostPosted: Wed Jun 08, 2011 8:30 pm    Post subject: Reply with quote

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 :P 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
View user's profile Send private message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Wed Jun 08, 2011 9:17 pm    Post subject: Reply with quote

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
View user's profile Send private message
agdg
Apprentice
Apprentice


Joined: 15 Aug 2010
Posts: 278

PostPosted: Wed Jun 08, 2011 9:44 pm    Post subject: Reply with quote

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
View user's profile Send private message
opotonil
l33t
l33t


Joined: 17 Jun 2005
Posts: 699
Location: 127.0.0.1

PostPosted: Thu Jun 09, 2011 8:46 am    Post subject: Reply with quote

Para ejecutarse con:
Code:

./send_sms.py


¿No necisitaria una linea al inicio del script indicando el lenguaje? algo similar a "#!/bin/bash" pero para python.

Por descartar intenta ejecutarlo con:
Code:

python send_sms.py


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
View user's profile Send private message
agdg
Apprentice
Apprentice


Joined: 15 Aug 2010
Posts: 278

PostPosted: Thu Jun 09, 2011 9:35 am    Post subject: Reply with quote

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
View user's profile Send private message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Thu Jun 09, 2011 3:57 pm    Post subject: Reply with quote

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
View user's profile Send private message
HIHIHI
n00b
n00b


Joined: 14 Nov 2011
Posts: 3

PostPosted: Mon Nov 14, 2011 6:52 pm    Post subject: Re: Envío automatizado de SMS (Solucionado) Reply with quote

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
View user's profile Send private message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Mon Nov 14, 2011 7:28 pm    Post subject: Reply with quote

¿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
View user's profile Send private message
HIHIHI
n00b
n00b


Joined: 14 Nov 2011
Posts: 3

PostPosted: Tue Nov 15, 2011 2:23 am    Post subject: Re: Envío automatizado de SMS (Solucionado) Reply with quote

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
View user's profile Send private message
Txema
l33t
l33t


Joined: 20 May 2008
Posts: 757
Location: Granada

PostPosted: Tue Nov 15, 2011 1:23 pm    Post subject: Reply with quote

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
View user's profile Send private message
HIHIHI
n00b
n00b


Joined: 14 Nov 2011
Posts: 3

PostPosted: Tue Nov 15, 2011 5:41 pm    Post subject: Re: Envío automatizado de SMS (Solucionado) Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Spanish All times are GMT
Page 1 of 1

 
Jump to:  
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