예제 #1
0
    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))
예제 #2
0
파일: Tim.py 프로젝트: guzmar/pyMoioSMS
    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))
예제 #3
0
 def isAvailable(self):
     """Ritorna true se questo plugin è utilizzabile."""
     return AskUserCaptchaDecoder.getInstance().isAvailable()
예제 #4
0
파일: Tim.py 프로젝트: guzmar/pyMoioSMS
 def isAvailable(self):
     """Ritorna true se questo plugin è utilizzabile."""
     #Deve essere disponibile un qualunque CaptchaDecoder
     return AskUserCaptchaDecoder.getInstance().isAvailable()