From dd6f5182c02524bd5f16f5adac6131a65ae37bb1 Mon Sep 17 00:00:00 2001 From: Gardouille Date: Fri, 26 Sep 2014 00:54:30 +0200 Subject: [PATCH] An old script to send sms from a gmail account. Probably not working but the syntax could be a useful example :) --- sms.py | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100755 sms.py diff --git a/sms.py b/sms.py new file mode 100755 index 0000000..c68ff09 --- /dev/null +++ b/sms.py @@ -0,0 +1,160 @@ +#/usr/bin/python +# -*- coding: utf-8 -*- + +# Script permettant d'envoyer des SMS grâce à Google Agenda. +# Créez un compte google, un nouvel agenda, et configurez-le pour que la notification se fasse par SMS 5 minutes avant l'événement. +# L'idée vient de http://macsim.labolinux.net/index.php/post/2008/02/15/137-smsalert-envoyer-des-sms-gratuitement-depuis-ses-serveurs + +# Copyright (C) 2008 Jean-Philippe Brucker — Tous droits réservés. +# +# Ce programme est un logiciel libre. Vous pouvez le redistribuer ou le +# modifier suivant les termes de la "GNU General Public License" version 3, +# telle que publiée par la Free Software Foundation. +# +# Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS +# AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ +# ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale +# Publique GNU pour plus de détails. +# +# Ce programme doit être distribué avec une copie de la +# License Générale Publique GNU (fichier license.html). +# Si ce n’est pas le cas, consultez: . + +import urllib, urllib2 +import time +import re +import sys, getopt + +# Modifiez ces champs pour vous logger automatiquement. +USER='MyEmail@gmail.com' +PASSWD='MyPassword' +# Ajoutez /private/full à la fin d'une adresse personalisée. +ADRESSE="http://www.google.com/calendar/feeds/default/private/full" + +AIDE="""Aide : +Usage : %s [-h] [-e email] [-p pass] [titre [message]] + -h ou --help : Afficher l'aide. + -e ou --email : spécifier un compte. + -p ou --password : spécifier un mot de passe +Et c'est tout. +""" % sys.argv[0] + +def parserLdc(): + global title,where, USER, PASSWD + opts, args=None, None + try: + opts, args=getopt.getopt(sys.argv[1:], "he:p:",['help', 'email=', 'password=']) + except getopt.GetoptError, e: + raise 'Argument «%s» inconnu.' % e.opt + for option, value in opts: + if option in ('-h', '--help'): + print AIDE + sys.exit(0) + elif option in ('-e', '--email'): + USER = value + elif option in ('-p', '--password'): + PASSWD = value + if len(args)==2: + title = args[0].replace('\'', ' ') + where = args[1].replace('\'', ' ') + elif len(args)==1: + title = args[0].replace('\'', ' ') + +class googleCalendar: + """ Cette classe permet de créer un nouvel événement dans un agenda google.""" + def __init__(self, user, passwd, adress): + self.user = user + self.passwd = passwd + self.adress = adress + self.auth = "" + + def connect(self): + url={} + url['accountType']='GOOGLE' + url['Email']=self.user + url['Passwd']=self.passwd + url['service']='cl' + url['source']='exampleCo-exampleApp-1' + page = urllib.urlopen("https://www.google.com/accounts/ClientLogin", urllib.urlencode(url)) + for line in page.readlines(): + if line.find("Auth=")>-1: + self.auth = line[5:-1] + return 0 + return 1 + def send(self,settings): + """ send prend un tuple en argument : + Settings={} + Settings['title'] => Affiché dans un SMS + Settings['content'] + Settings['where'] => Affiché dans un SMS + Settings['start'] => Le SMS est envoyé 5min avant + Settings['end'] + """ + if self.connect(): + print "Connexion impossible !" + return + Data = """ + + %s + %s + + %s + %s + + + + + + """ % (settings['title'], settings['content'], self.user, self.user, settings['where'], settings['start'], settings['end']) + Headers={} + Headers['Host']='www.google.com' + Headers['MIME-Version']='1.0' + Headers['Accept']='text/xml' + Headers['Authorization']='GoogleLogin auth='+self.auth + Headers['Content-length']=str(len(Data)) + Headers['Content-type']='application/atom+xml' + Headers['Cache-Control']='no-cache' + Headers['Connection']='close \r\n' + try: + req = urllib2.Request(self.adress, Data, Headers) + handler = urllib2.HTTPHandler()#debuglevel=2) + opener = urllib2.OpenerDirector() + opener.add_handler(handler) + page = opener.open(req) + + # Pas joli-joli, tout ça. À améliorer + lien = re.compile(r'HREF=["\'](.+)["\']').findall(page.read()) + if len(lien)>0: + req=urllib2.Request(lien[0],Data,Headers) + else: + print "Impossible de récupérer l'adresse de redirection." + return + opener.open(req) + print "Événement envoyé." + except IOError, e: + print e + return + +def RFC3339(date): + d=[] + for i in date: + d.append(str(i)) + for i in xrange(1,6): + if len(d[i])<2: d[i]="0"+d[i] + return d[0]+'-'+d[1]+'-'+d[2]+'T'+d[3]+':'+d[4]+':'+d[5]+'.000Z' + +def main(): + global title,where,USER,PASSWD + title="" + where="" + parserLdc() + while not USER : USER=raw_input("Entrez votre nom d'utilisateur : ") + while not PASSWD: PASSWD=raw_input("Entrez votre mot de passe : ") + while not title : title = raw_input("Entrez un titre : ") + if not where : where = raw_input("Entrez un message ou tapez [Entrée] pour laisser vide: ") + + event = {'title':title, 'content': "SMS", 'where':where, 'start':RFC3339(time.gmtime(time.time()+60*5+30)), 'end':RFC3339(time.gmtime(time.time()+60*5+45))} + + cal = googleCalendar(USER, PASSWD, ADRESSE) + cal.send(event) +if __name__=="__main__": main()