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[: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 isAvailable(self): """Ritorna true se questo plugin è utilizzabile.""" return AskUserCaptchaDecoder.getInstance().isAvailable()
def isAvailable(self): """Ritorna true se questo plugin è utilizzabile.""" #Deve essere disponibile un qualunque CaptchaDecoder return AskUserCaptchaDecoder.getInstance().isAvailable()