def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() if number[:3] == "+39": number = number[3:] #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] c.setopt(pycurl.URL, "http://aimon.it/?cmd=smsgratis") postFields = {} postFields["inputUsername"] = username + '@aimon.it' postFields["inputPassword"] = password postFields["submit"] = 'procedi' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) saver = StringIO() self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) #Invio di un sms saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["tiposms"] = '0' postFields["tipomittente"] = '1' postFields["testo"] = text postFields["destinatario"] = number postFields["btnSubmit"] = "Invia SMS" c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, 'http://aimon.it/index.php?cmd=smsgratis&sez=smsgratis') self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("Messaggio inviato con successo", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() #Assegna le variabili standard mittente = dati['Mittente'] if number[:3] == "+39": number = number[3:] elif number[0] == "+": raise SiteCustomError( self.__class__.__name__, u"Questo sito permette di inviare SMS solo verso cellulari italiani." ) #Invio l'sms saver = StringIO() postFields = {} postFields["recipient"] = "+39" + number postFields["subjecttosend"] = "Da: " + mittente postFields["SmilName"] = "" postFields["TextName"] = text postFields["ImageName"] = "" postFields["AudioName"] = "" postFields["nextPage"] = "/web/servletresult.html" c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt( pycurl.URL, "http://mmsviaweb.net.vodafone.it/WebComposer/web/elaborapop.jsp" ) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("Il tuo messaggio è stato inviato", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati = None, ui = None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() if number[0] != "+": number = '39' + number else: number = number[1:] #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] #Invio di un sms c.setopt(pycurl.POST, True) testo = self.codingManager.quoteBase64(text)[:-1] postFields = {} postFields["authlogin"] = username + '@aimon.it' postFields["authpasswd"] = password postFields["body"] = testo postFields["destination"] = number postFields["id_api"] = "106" c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, 'https://secure.apisms.it/http/send_sms') saver = StringIO() self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("SMS Queued", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError(self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile.""" try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() if number[:3] == "+39": number = number[3:] elif number[0] == "+": raise SiteCustomError( self.__class__.__name__, u"Questo sito permette di inviare SMS solo verso cellulari italiani." ) #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] c.setopt(pycurl.URL, "http://www.tim.it") self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) #Faccio il login saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["urlOk"] = "https://www.tim.it/119/consumerdispatcher" postFields["portale"] = "timPortale" postFields["login"] = username postFields["password"] = password c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "https://www.tim.it/authfe/login.do") self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) c.setopt(pycurl.URL, "https://smsweb.tim.it/sms-web/adddispatch?start=new") saver = StringIO() self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) try: formdata1 = re.search( '(?<=(name="addDispatchForm"><div class="t-invisible"><input name="t:formdata" type="hidden" value="))[^"]+', saver.getvalue()).group(0) formdata2 = re.search( '(?<=(seperateFreeNumbers:hidden" name="t:formdata" type="hidden" value="))[^"]+', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) try: jsession = re.search( '(?<=(adddispatch.adddispatchform;jsessionid=))[^"]+', saver.getvalue()).group(0) except: jsession = None if ui: ui.gaugeIncrement(self.incValue) postFields = {} postFields["t:formdata"] = formdata2 postFields["recipientType"] = 'FREE_NUMBERS' postFields["freeNumbers"] = number postFields["textAreaStandard"] = text postFields["deliverySmsClass"] = 'STANDARD' postdata = self.codingManager.urlEncode(postFields)+"&"+\ urllib.urlencode({"t:formdata":formdata1}) c.setopt(pycurl.POSTFIELDS, postdata) c.setopt(pycurl.POST, True) url = "https://smsweb.tim.it/sms-web/adddispatch.adddispatchform" if jsession: url += ";jsessionid=" + jsession c.setopt(pycurl.URL, url) saver = StringIO() self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) try: formdata = re.search( '(?<=(value="Dispatch"></input><input name="t:formdata" type="hidden" value="))[^"]+', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) captchaBroken = False while captchaBroken == False: postFields = {} try: saver = StringIO() c.setopt(pycurl.POST, False) c.setopt( pycurl.URL, "https://smsweb.tim.it/sms-web/validatecaptcha:image/false?t:ac=Dispatch" ) self.perform(self.stop, saver) #postFields["verificationCode"] = CaptchaDecoder.getBestPlugin().decodeCaptcha(saver, self.__class__.__name__) postFields[ "verificationCode"] = AskUserCaptchaDecoder.getInstance( ).decodeCaptcha(saver, self.__class__.__name__) except CaptchaError: raise SenderError(self.__class__.__name__) if not postFields["verificationCode"]: raise SiteCustomError( self.__class__.__name__, u"Captcha non inserito. Invio interrotto.") postFields["t:formdata"] = formdata postFields["t:ac"] = "Dispatch" c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.POST, True) c.setopt( pycurl.URL, "https://smsweb.tim.it/sms-web/validatecaptcha.validatecaptchaform" ) saver = StringIO() self.perform(self.stop, saver) if not re.search( u"Le lettere che hai inserito non corrispondono a quelle presenti nell'immagine", saver.getvalue()): captchaBroken = True self.checkForErrors(saver.getvalue()) if (re.search("SMS inviato", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def __init__(self): """Costruttore standard.""" SenderError.__init__(self, repr('Captcha'))
def sendOne(self, number, text, dati = None, ui = None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: c = self.connectionManager.getCurl() #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] #Ammazzo i vecchi cookie self.connectionManager.forgetCookiesFromDomain("alice.it") #Faccio il login saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["URL_OK"] = "http://portale.rossoalice.alice.it/ps/HomePS.do?area=posta&settore=sms" postFields["URL_KO"] = "http://portale.rossoalice.alice.it/ps/ManageCodError.do?channel=mail_ra&area=posta&settore=sms" postFields["usr"] = username postFields["channel"] = "mail_ra" postFields["login"] = username + "@alice.it" postFields["password"] = password c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://authsrs.alice.it/aap/validatecredential") self.perform(self.stop, saver) if ((re.search(u'non sono corretti', saver.getvalue()) is not None) or (re.search(u"utenza inserita al momento non ", saver.getvalue()) is not None) or (re.search(u"Riprova più tardi ad accedere ad Alice Mail e servizi.", saver.getvalue()) is not None)): raise SiteAuthError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) c.setopt(pycurl.URL, "http://auth.rossoalice.alice.it/aap/serviceforwarder?sf_dest=click_to_send_sms&ID_Value=&ID_Field=mobilphone") self.perform(self.stop) saver = StringIO() c.setopt(pycurl.URL, "http://webloginmobile.rossoalice.alice.it/alice/jsp/SMS/composer.jsp?ID_Field=0&ID_Value=0&id_clickto=0&dummy=dummy") self.perform(self.stop, saver) #Patch di Laurento Frittella if (re.search("L'invio dell'SMS ad ogni destinatario ha un costo di", saver.getvalue()) is not None): raise SiteCustomError(self.__class__.__name__, u"Sono esauriti gli SMS gratuiti di oggi.") if ui: ui.gaugeIncrement(self.incValue) #Spedisco l'SMS postFields = {} postFields["DEST"] = number postFields["TYPE"] = "smsp" postFields["SHORT_MESSAGE2"] = text postFields["SHORT_MESSAGE"] = text postFields["INVIA_SUBITO"] = "true" c.setopt(pycurl.URL, "http://webloginmobile.rossoalice.alice.it/alice/jsp/SMS/CheckDest.jsp") c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop) c.setopt(pycurl.URL, "http://webloginmobile.rossoalice.alice.it/alice/jsp/SMS/inviaSms.jsp") c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) saver = StringIO() c.setopt(pycurl.POST, False) c.setopt(pycurl.REFERER, "http://webloginmobile.rossoalice.alice.it/alice/jsp/SMS/inviaSms.jsp") c.setopt(pycurl.URL, "http://webloginmobile.rossoalice.alice.it/alice/jsp/EwsJCaptcha.jpg") self.perform(self.stop, saver) if saver.getvalue() == "": raise SiteCustomError(self.__class__.__name__, u"Il sito non è disponibile, riprova più tardi.") if ui: ui.gaugeIncrement(self.incValue) postFields = {} postFields["DEST"] = number postFields["TYPE"] = "smsp" postFields["SHORT_MESSAGE2"] = text postFields["SHORT_MESSAGE"] = text postFields["INVIA_SUBITO"] = "true" try: postFields["captchafield"]=AskUserCaptchaDecoder.getInstance().decodeCaptcha(saver, self.__class__.__name__) except CaptchaError: print "An error occurred while trying to decode captcha" c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) saver = StringIO() c.setopt(pycurl.URL, "http://webloginmobile.rossoalice.alice.it/alice/jsp/SMS/inviaSms.jsp") self.perform(self.stop, saver) if (re.search("Attenzione! I caratteri inseriti non sono corretti.", saver.getvalue()) is not None): raise SiteCustomError(self.__class__.__name__, u"I caratteri inseriti non sono corretti.") if (re.search( "È possibile inviare gratuitamente fino a 10 SMS al giorno", saver.getvalue()) is not None): raise SiteCustomError(self.__class__.__name__, u"Sono esauriti gli SMS gratuiti di oggi.") if (re.search("inviato con successo", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError(self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() if number[0] != "+": number = '+39' + number #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] #visito la pagina del login saver = StringIO() c.setopt( pycurl.URL, "http://m.wadja.com/login/default.aspx?url=%2fDefault.aspx") self.perform(self.stop, saver) try: view = re.search( '(?<=(name="__VIEWSTATE" id="__VIEWSTATE" value="))[^"]+', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #se non sono gia' loggato, eseguo il login if (re.search("Sign out", saver.getvalue()) is None) and \ (re.search("Esci", saver.getvalue()) is None) : saver = StringIO() c.setopt( pycurl.URL, "http://m.wadja.com/login/default.aspx?url=%2fdefault.aspx" ) postFields = {} postFields["__VIEWSTATE"] = view postFields["ctl00$cntBody$txtUser"] = username postFields["ctl00$cntBody$txtPass"] = password postFields["ctl00$cntBody$btnLogin"] = '******' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("Sign out", saver.getvalue()) is None) and \ (re.search("Esci", saver.getvalue()) is None) : raise SenderError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #visito la pagina degli sms saver = StringIO() c.setopt(pycurl.URL, "http://m.wadja.com/compose/sms.aspx") self.perform(self.stop, saver) try: view = re.search( '(?<=(name="__VIEWSTATE" id="__VIEWSTATE" value="))[^"]+', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) if (re.search(' value="1">', saver.getvalue())) is not None: mitt = '1' else: mitt = '0' if ui: ui.gaugeIncrement(self.incValue) #invio il messaggio saver = StringIO() c.setopt(pycurl.URL, "http://m.wadja.com/compose/sms.aspx") postFields = {} postFields["__VIEWSTATE"] = view postFields["ctl00$cntBody$cmpsSMS$ddlFrom"] = mitt postFields["ctl00$cntBody$cmpsSMS$txtSMS"] = number postFields["ctl00$cntBody$cmpsSMS$txtMSG"] = text postFields["ctl00$cntBody$cmpsSMS$btnSend"] = 'Send' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("Your sms has been sent", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] sim = str(dati['SIM']) if number[:3] == "+39": number = number[3:] elif number[0] == "+": raise SiteCustomError( self.__class__.__name__, u"Questo sito permette di inviare SMS solo verso cellulari italiani." ) #Visito la pagina iniziale saver = StringIO() c.setopt(pycurl.URL, "http://www.vodafone.it/190/trilogy/jsp/home.do") self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) if ui: ui.gaugeIncrement(self.incValue) #Sono già autenticato? if (re.search("Ciao ", saver.getvalue()) is None): #No, ammazzo i vecchi cookie e mi riautentico self.connectionManager.forgetCookiesFromDomain("190.it") self.connectionManager.forgetCookiesFromDomain("vodafone.it") saver = StringIO() c.setopt(pycurl.URL, "https://www.vodafone.it/190/trilogy/jsp/login.do") postFields = {} postFields["username"] = username postFields["password"] = password c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) if (re.search("Ciao ", saver.getvalue()) is None): raise SiteAuthError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #se Sim e se non è attiva, cambio la SIM attiva if sim and (re.search('value="' + sim + '" selected >', saver.getvalue()) is None): saver = StringIO() c.setopt( pycurl.URL, "http://www.areaprivati.vodafone.it/190/trilogy/jsp/swapSim.do?tk=9616,1&ty_sim=" + sim) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) if ui: ui.gaugeIncrement(self.incValue) #Visito la pubblicità obbligatoria c.setopt(pycurl.POST, False) c.setopt( pycurl.URL, "http://www.vodafone.it/190/trilogy/jsp/dispatcher.do?ty_key=fdt_invia_sms&tk=9616,2" ) self.perform(self.stop) self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) if ui: ui.gaugeIncrement(self.incValue) #Visito il form degli SMS (anche qui obbligatoriamente...) c.setopt( pycurl.URL, "http://www.areaprivati.vodafone.it/190/trilogy/jsp/dispatcher.do?ty_key=fsms_hp&ipage=next" ) self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) #Spedisco l'SMS saver = StringIO() postFields = {} postFields["pageTypeId"] = "9604" postFields["programId"] = "10384" postFields["chanelId"] = "-18126" postFields["receiverNumber"] = number postFields["message"] = text c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.areaprivati.vodafone.it/190/fsms/prepare.do") self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) if (re.search( "Ti ricordiamo che puoi inviare SMS via Web solo a numeri di cellulare Vodafone", saver.getvalue() ) is not None or re.search( "Il numero di telefono del destinatario del messaggio non e' valido", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Questo sito permette di inviare " + u"SMS solo ai cellulari Vodafone.") if (re.search("box_sup_limitesms.gif", saver.getvalue()) is not None): raise SiteCustomError(self.__class__.__name__, u"Hai esaurito gli SMS gratis di oggi.") captchaBroken = False while captchaBroken == False: postFields = {} if re.search("generateimg.do", saver.getvalue()) is not None: try: saver = StringIO() c.setopt(pycurl.POST, False) c.setopt( pycurl.URL, "http://www.areaprivati.vodafone.it/190/fsms/generateimg.do" ) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) postFields[ "verifyCode"] = CaptchaDecoder.getBestPlugin( ).decodeCaptcha(saver, self.__class__.__name__) c.setopt(pycurl.POST, True) except CaptchaError: raise SenderError(self.__class__.__name__) if not postFields["verifyCode"]: raise SiteCustomError( self.__class__.__name__, u"Captcha non inserito. Invio interrotto.") if ui: ui.gaugeIncrement(self.incValue) postFields["pageTypeId"] = "9604" postFields["programId"] = "10384" postFields["chanelId"] = "-18126" postFields["receiverNumber"] = number postFields["message"] = text c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) #Confermo l'invio saver = StringIO() c.setopt( pycurl.URL, "http://www.areaprivati.vodafone.it/190/fsms/send.do") self.perform(self.stop, saver) if (re.search("generateimg.do", saver.getvalue()) is None): captchaBroken = True elif ui: ui.gaugeIncrement(-self.incValue) if (re.search("Hai superato il limite giornaliero di SMS", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Sono esauriti gli SMS gratuiti di oggi.") self.checkForErrors(saver.getvalue()) self.checkManteinance(c.getinfo(pycurl.EFFECTIVE_URL)) if (re.search("elaborata correttamente", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() if not number[0] == "+": number = '+39' + number #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] #Visito la pagina iniziale saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["B1"] = 'logon' postFields["action"] = 'login' postFields["nick"] = username postFields["password"] = password c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.yesmms.com/cgi-bin/yesmms/yesstart.cgi") self.perform(self.stop, saver) if (re.search("Wrong Password", saver.getvalue()) is not None): raise SiteAuthError(self.__class__.__name__) if (re.search("Login again at", saver.getvalue()) is not None): raise SiteCustomError(self.__class__.__name__, u"Errore di Login") if (re.search("did not logout correctly", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Utente gia' loggato, riprova tra 30 minuti") try: session = re.search('(?<=(session" value="))[^"]+', saver.getvalue()).group(0) time = re.search('(?<=(nowtime" value="))[^"]+', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #Visito la pagina intermedia saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["session"] = session postFields["nowtime"] = time postFields["country"] = '212' postFields["lang"] = 'it' postFields["submit"] = 'continue' c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.yesmms.com/cgi-bin/yesmms/yesintro.cgi") self.perform(self.stop, saver) if ui: ui.gaugeIncrement(self.incValue) #Visito la una pagina degli sms saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["session"] = session postFields["lang"] = 'it' c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.yesmms.com/cgi-bin/yesmms/yeslogin.cgi") self.perform(self.stop, saver) if ui: ui.gaugeIncrement(self.incValue) #Spedisco l'SMS saver = StringIO() postFields = {} postFields["number_friend"] = 'NO' postFields["number"] = number postFields["message"] = text postFields["session"] = session postFields["action"] = 'send' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.yesmms.com/cgi-bin/yesmms/yesmms.cgi") self.perform(self.stop, saver) #Eseguo il logout postFields = {} postFields["session"] = session c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.yesmms.com/cgi-bin/yesmms/yeslogout.cgi") self.perform(self.stop) if (re.search("SMS sent", saver.getvalue()) is None): if (re.search("The message contains bad", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Il messaggio contiene parole proibite") elif (re.search("You already sent a", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Hai gia' inviato un SMS a questo numero") elif (re.search("You need at least", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Hai esaurito i crediti disponibili") elif (re.search("not been sent", saver.getvalue()) is not None): raise SiteCustomError(self.__class__.__name__, u"Messaggio non inviato") elif (re.search( "The max. number of FREE SMS per hour has been reached", saver.getvalue()) is not None): raise SiteCustomError( self.__class__.__name__, u"Limite orario di sms raggiunto, riprova piu' tardi") else: raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] if number[0] == "+": number = '00' + number[1:] elif number[:2] != '00': number = '0039' + number #Visito la pagina iniziale saver = StringIO() c.setopt(pycurl.URL, "https://www.vodafone.ie/index.jsp") self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) if re.search('vodafone.ie/myv/services/login/Login.shtml\?ts=', saver.getvalue()) is not None: try: ts = re.search( '(?<=(vodafone.ie/myv/services/login/Login.shtml\?ts=))[^"]', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) #Faccio Login saver = StringIO() c.setopt( pycurl.URL, "https://www.vodafone.ie/myv/services/login/Login.shtml?ts=" + ts) postFields = {} postFields["acc-password-txt"] = 'Password' postFields["username"] = username postFields["password"] = password c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) #Visito il form degli SMS saver = StringIO() c.setopt(pycurl.POST, False) c.setopt( pycurl.URL, "https://www.vodafone.ie/myv/messaging/webtext/index.jsp") self.perform(self.stop, saver) try: token = re.search('(?<=(TOKEN" value="))[^"]+', saver.getvalue()).group(0) except AttributeError: raise SenderError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) time.sleep(3) #Spedisco l'SMS saver = StringIO() c.setopt( pycurl.REFERER, 'https://www.vodafone.ie/myv/messaging/webtext/index.jsp') postFields = {} postFields["org.apache.struts.taglib.html.TOKEN"] = token postFields["message"] = text postFields["recipients[0]"] = number postFields["recipients[1]"] = '' postFields["recipients[2]"] = '' postFields["recipients[3]"] = '' postFields["recipients[4]"] = '' postFields["futuredate"] = 'false' postFields["futuretime"] = 'false' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt( pycurl.URL, "https://www.vodafone.ie/myv/messaging/webtext/Process.shtml") self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("Message sent!", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def __init__(self, site, msg = None): """Costruttore standard.""" SenderError.__init__(self, site) self.msg = msg
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: c = self.connectionManager.getCurl() #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] #Ammazzo i vecchi cookie self.connectionManager.forgetCookiesFromDomain("alice.it") #Inizia la raccolta dei cookie... c.setopt(pycurl.URL, "http://tin.alice.it") self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) #Faccio il login c.setopt(pycurl.POST, True) postFields = {} postFields["usernameDisplay"] = username[:username.find("@")] postFields["dominio"] = username[username.find("@") + 1:] postFields["password"] = password c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://communicator.virgilio.it/asp/a3login.asp") self.perform(self.stop) c.setopt(pycurl.URL, "http://communicator.alice.it/asp/a3login.asp") self.perform(self.stop) postFields = {} postFields["a3l"] = username postFields["a3p"] = password postFields["a3si"] = "-1" postFields["percmig"] = "100" postFields["a3st"] = "VCOMM" postFields["a3aid"] = "comhpvi" postFields["a3flag"] = "0" postFields["a3ep"] = "http://communicator.alice.it/asp/login.asp" postFields["a3afep"] = "http://communicator.alice.it/asp/login.asp" postFields["a3se"] = "http://communicator.alice.it/asp/login.asp" postFields[ "a3dcep"] = "http://communicator.alice.it/asp/homepage.asp?s=005" c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt( pycurl.URL, "http://aaacsc.alice.it/piattaformaAAA/controller/AuthenticationServlet" ) self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode({})) c.setopt(pycurl.URL, "http://communicator.alice.it/asp/menu.asp?dest=WP") self.perform(self.stop) c.setopt(pycurl.URL, "http://communicator.alice.it/asp/loadWP.asp") self.perform(self.stop) saver = StringIO() c.setopt(pycurl.URL, "http://communicator.alice.it/asp/preview_WEBMAIL.asp") self.perform(self.stop, saver) if (re.search(u"Ciao", saver.getvalue()) is None): raise SiteAuthError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) c.setopt( pycurl.URL, "http://communicator.alice.it/asp/dframeset.asp?dxserv=SMS") self.perform(self.stop) #Serve per settare un oscuro cookie... c.setopt( pycurl.URL, "http://casa.virgilio.it/common/includes/header/css/header_4.css" ) self.perform(self.stop) #Altro cookie... getFields = {} getFields["username"] = username c.setopt( pycurl.URL, "http://gsmailmdumail.alice.it:8080/supermail/controller?" + self.codingManager.urlEncode(getFields)) self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) if number[0] != "+": number = "+39" + number postFields = {} postFields["lista_operatori"] = "x" postFields["numero"] = "" postFields["select"] = "x" postFields["testo"] = text postFields["recipient"] = number c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) getFields = {} getFields["username"] = username getFields["action"] = "sendsmspreview" c.setopt( pycurl.URL, "http://gsmailmdumail.alice.it:8080/supermail/controller?" + self.codingManager.urlEncode(getFields)) self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) # conferma #Altro cookie... saver = StringIO() getFields = {} getFields["username"] = username getFields["action"] = "sendsms" c.setopt( pycurl.URL, "http://gsmailmdumail.alice.it:8080/supermail/controller?" + self.codingManager.urlEncode(getFields)) self.perform(self.stop, saver) if (re.search("Messaggio inviato correttamente al server", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def __init__(self, site, msg): """Costruttore standard.""" SenderError.__init__(self, site) self.msg = msg
def __init__(self, site): """Costruttore standard.""" SenderError.__init__(self, site)
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: c = self.connectionManager.getCurl() #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] if number[:3] == "+39": number = number[3:] elif number[0] == "+": raise SiteCustomError( self.__class__.__name__, u"Questo sito permette di inviare SMS solo verso cellulari italiani." ) #Visito la pagina iniziale c.setopt(pycurl.URL, "http://www.enel.it") self.perform(self.stop) if ui: ui.gaugeIncrement(self.incValue) #Faccio il login saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["SpontaneousLogon"] = "/Index.asp" postFields["txtUsername"] = username postFields["txtPassword"] = password c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://www.enel.it/AuthFiles/Login.aspx") self.perform(self.stop, saver) if (re.search("Autenticazione fallita", saver.getvalue()) != None): raise SiteAuthError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #Visito la pagina degli SMS saver = StringIO() c.setopt(pycurl.POST, False) c.setopt(pycurl.REFERER, "http://www.enel.it/Index.asp") c.setopt(pycurl.URL, "http://servizi.enel.it/sms/") self.perform(self.stop, saver) checkCode = "" try: checkCode = re.search( '<input type="hidden" name="cksmsenel" value="([A-Z0-9]+)"', saver.getvalue()).group(1) except AttributeError: raise SenderError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #Pre-invio saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["message"] = text postFields["prefix"] = number[0:3] postFields["gsm"] = number[3:] postFields["cksmsenel"] = checkCode c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt( pycurl.URL, "http://servizi.enel.it/sms/service/scrivisms.asp?SMSstartpage=http://www.enel.it/Index.asp" ) self.perform(self.stop, saver) if (re.search("superato il limite massimo", saver.getvalue()) != None): raise SiteCustomError( self.__class__.__name__, u"Sono esauriti gli SMS gratuiti di oggi.") checkCode = "" xFieldKey = "" xFieldValue = "" try: checkCode = re.search( '<INPUT TYPE=hidden NAME=cksmsenel VALUE="([A-Z0-9]+)"', saver.getvalue()).group(1) match = re.search( '<INPUT TYPE=hidden NAME=x([0-9]+) VALUE=\'([0-9]+)\'>', saver.getvalue()) xFieldKey = match.group(1) xFieldValue = match.group(2) except AttributeError: raise SenderError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #Accetto il contratto saver = StringIO() c.setopt(pycurl.POST, True) postFields = {} postFields["message"] = text postFields["prefix"] = number[0:3] postFields["gsm"] = number[3:] postFields["accetta"] = "yes" postFields["x" + str(xFieldKey)] = str(xFieldValue) postFields["cksmsenel"] = checkCode c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt(pycurl.URL, "http://servizi.enel.it/sms/service/scrivisms.asp") self.perform(self.stop, saver) if (re.search("superato il limite massimo", saver.getvalue()) != None): raise SiteCustomError( self.__class__.__name__, u"Sono esauriti gli SMS gratuiti di oggi.") if (re.search("inviato correttamente", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] sim = str(dati['SIM']) if number[:3] == "+39": number = number[3:] elif number[0] == "+": raise SiteCustomError( self.__class__.__name__, u"Questo sito permette di inviare SMS solo verso cellulari italiani." ) c.setopt(pycurl.HTTPHEADER, [ 'X-Flash-Version: 10,0,45,2;', 'Accept: */*;', 'Accept-Encoding: gzip,deflate;', 'Accept-Language: it-it;' 'Connection: keep-alive;' ]) c.setopt(pycurl.USERAGENT, 'Vodafone_DW') c.setopt(pycurl.REFERER, 'http://www.vodafone.it/') #faccio il login saver = StringIO() c.setopt(pycurl.URL, "https://widget.vodafone.it/190/trilogy/jsp/login.do") postFields = {} postFields["username"] = username postFields["password"] = password postFields["cu_channel"] = 'MM' postFields["cu_notrace"] = 'true' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if (re.search("Ciao ", saver.getvalue()) is None): raise SiteAuthError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #eventuale cambio sim if sim and (re.search('value="' + sim + '" selected >', saver.getvalue()) is None): saver = StringIO() c.setopt( pycurl.URL, "http://www.areaprivati.vodafone.it/190/trilogy/jsp/swapSim.do?channel=VODAFONE_DW&tk=9604,l&ty_sim=" + sim) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) #Visito pagina intermedia c.setopt(pycurl.POST, False) c.setopt( pycurl.URL, "https://widget.vodafone.it/190/fsms/precheck.do?channel=VODAFONE_DW" ) self.perform(self.stop) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) #Spedisco l'SMS saver = StringIO() postFields = {} postFields["receiverNumber"] = number postFields["message"] = text c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) c.setopt( pycurl.URL, "https://widget.vodafone.it/190/fsms/prepare.do?channel=VODAFONE_DW" ) self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) captchaBroken = False while captchaBroken == False: postFields = {} if re.search('CODEIMG', saver.getvalue()) is not None: try: captchaimage = re.search( '(?<=(<e n="CODEIMG" ><!\[CDATA\[))[^\]]+', saver.getvalue()).group(0) captchaimage = captchaimage.decode("base64") saver = StringIO(captchaimage) postFields[ "verifyCode"] = CaptchaDecoder.getBestPlugin( ).decodeCaptcha(saver, 'Vodafone') except CaptchaError: raise SenderError(self.__class__.__name__) if not postFields["verifyCode"]: raise SiteCustomError( self.__class__.__name__, u"Captcha non inserito. Invio interrotto.") #Confermo l'invio if ui: ui.gaugeIncrement(self.incValue) postFields["receiverNumber"] = number postFields["message"] = text c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) saver = StringIO() c.setopt( pycurl.URL, "https://widget.vodafone.it/190/fsms/send.do?channel=VODAFONE_DW" ) self.perform(self.stop, saver) if re.search('CODEIMG', saver.getvalue()) is None: captchaBroken = True elif ui: ui.gaugeIncrement(-self.incValue) self.checkForErrors(saver.getvalue()) if (re.search("inviati correttamente", saver.getvalue()) is None): raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))
def sendOne(self, number, text, dati=None, ui=None): """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength con le credenziali specificate, supponendo Internet raggiungibile. """ try: #Costruisco un nuovo oggetto Curl e lo inizializzo c = self.connectionManager.getCurl() if number[0] == "+": prefix = number[:3] number = number[3:] else: prefix = '+39' #Assegna le variabili standard username = dati['Nome utente'] password = dati['Password'] mittente = dati['Mittente'] #Faccio il login saver = StringIO() c.setopt(pycurl.URL, "http://www.thecellfreak.com/user") postFields = {} postFields["name"] = username postFields["gotohome"] = '1' postFields["pass"] = password postFields["form_id"] = 'user_login' postFields["op"] = 'Log in' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) if (re.search('Wrong login info', saver.getvalue()) is not None): raise SiteAuthError(self.__class__.__name__) if ui: ui.gaugeIncrement(self.incValue) #Visito la pagina intermedia saver = StringIO() c.setopt(pycurl.POST, False) c.setopt(pycurl.URL, "http://www.thecellfreak.com") self.perform(self.stop, saver) self.checkForErrors(saver.getvalue()) if ui: ui.gaugeIncrement(self.incValue) #Spedisco l'SMS saver = StringIO() c.setopt(pycurl.URL, "http://www.thecellfreak.com/sendsms/send2") postFields = {} postFields["sms_sendtocountry"] = 'IT' postFields["sms_sendtonumber"] = number postFields["sms_sendfrom"] = mittente postFields["sms_message"] = text postFields["cname"] = '1' c.setopt(pycurl.POST, True) c.setopt(pycurl.POSTFIELDS, self.codingManager.urlEncode(postFields)) self.perform(self.stop, saver) if (re.search("SMS Sent sucessfully", saver.getvalue()) is None): self.checkForErrors(saver.getvalue()) raise SenderError(self.__class__.__name__) except pycurl.error, e: errno, msg = e raise SiteConnectionError( self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))