def checkForErrors(self, page): """Solleva un'eccezione se la pagina contiene una segnalazione d'errore dal sito.""" if (re.search("Username o Password errati", page) is not None): raise SiteAuthError(self.__class__.__name__) if (re.search("Credito non sufficiente", page) is not None): raise SiteCustomError(self.__class__.__name__, u"SMS gratuiti esauriti") if (re.search("Mittente non valido", page) is not None): raise SiteCustomError( self.__class__.__name__, u"Il mittente deve essere un numero di telefono") if (re.search("Destinatario richiesto", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Manca il numero a cui inviare") if (re.search("Testo richiesto", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Testo messaggio vuoto") if (re.search("Messaggio non inviato per errore di spedizione", page) is not None): raise SiteSenderError(self.__class__.__name__) if (re.search("limite massimo di sms inviabili gratis in 24 ore", page) is not None): raise SiteCustomError( self.__class__.__name__, u"Troppi sms in 24h per questo destinatario") if (re.search("limite massimo di sms inviabili gratis in 30 giorni", page) is not None): raise SiteCustomError( self.__class__.__name__, u"Troppi sms in 30g per questo destinatario")
def checkForErrors(self, page, last = None): """Solleva un'eccezione se la pagina contiene una segnalazione d'errore dal sito.""" if(re.search("Access denied", page) is not None): raise SiteAuthError(self.__class__.__name__) if(re.search("destination invalid parameter type", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Destinatario non valido") if(re.search("body not specified", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Manca il testo") if(re.search("sender contains invalid characters or is too long", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Mittente non valido") if(re.search("Not enough credit", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Credito esaurito") if(re.search("body contains invalid characters or is too long", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Testo non valido")
def checkForErrors(self, page): if (re.search(u'"Messaggio Errore"', page) is not None) or \ (re.search(u'Bad Gateway', page) is not None) or \ (re.search(u'Il servizio è momentaneamente non disponibile', page) is not None) or \ (re.search(u'Siamo spiacenti, la pagina che hai richiesto al momento non è disponibile.', page) is not None) or \ (re.search(u'Internal Server Error', page) is not None): raise SiteCustomError( self.__class__.__name__, u"Il servizio non \W?\W? al momento disponibile.") if (re.search(u'SMS non inviato, il numero non \W?\W? TIM', page) is not None): raise SiteCustomError(self.__class__.__name__, u"Il destinatario non e' un numero Tim.") if (re.search(u'numero massimo di SMS', page) is not None): raise SiteCustomError(self.__class__.__name__, u"Hai raggiunto il limite di SMS per oggi.") if (re.search(u'essere autenticati', page) is not None) or \ (re.search(u'loginerror.do', page) is not None): raise SiteAuthError(self.__class__.__name__)
def checkForErrors(self, page): """Solleva un'eccezione se la pagina contiene una segnalazione d'errore dal sito.""" if (re.search("Invalid Login", page) is not None): raise SiteAuthError(self.__class__.__name__) if (re.search("no recipient specified", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Numero di telefono non valido") if (re.search("no message written", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Non hai inserito il messaggio") if (re.search("Daily limit reached to the numbers outside wadja.", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Limite di messaggi inviati per oggi.") if (re.search("Daily limit reached to the same number outside wadja.", page) is not None): raise SiteCustomError( self.__class__.__name__, u"Limite di messaggi inviati oggi allo stesso numero")
def checkForErrors(self, page): """Solleva un'eccezione se la pagina contiene una segnalazione d'errore dal sito.""" if (re.search("Please check your details", page) is not None): raise SiteAuthError(self.__class__.__name__) if (re.search( "Current customers may need to reactivate their mobiles by Topping Up your Call Credit", page) is not None): raise SiteCustomError( self.__class__.__name__, u"Devi ricaricare la sim per tornare ad inviare SMS gratis") if (re.search("One or more Numbers is required", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Numero del destinatario mancante") if (re.search("Message is required", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Testo del messaggio mancante") if (re.search("We're sorry, an error has occurred", page) is not None): raise SiteCustomError(self.__class__.__name__, u"Errore del server")
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() #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: 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: 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() 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: 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 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))