homepage > Forum > Sviluppatori > Sender per Frengo - work in progress




Autore Messaggio
Inviato Sabato 13 Dicembre 2008, 23:58 
Avatar utente
Eh qui non finisco più... Eh eh. Comunque qui c'è il sender funzionante, l'unica cosa è che da sempre esito positivo, perché devo capire esattamente come catturare il risultato finale dell'invio. Ma intanto lo posto qui, magari torna utile. :-)
Un'altra cosa: come per Jaxtr, l'ho fatto per prefissi a due cifre. Non so come gestirli bene i country code, per cui aspetto che Silvio venga in mio soccorso!
Codice:
#!/usr/bin/python2.4
# -*- coding: utf-8 -*-
# Originale di Andrea "Lazza" Lazzarotto, http://www.andrealazzarotto.com

import re
from cStringIO import StringIO

import pycurl

from moio.plugins.Sender import Sender
from moio.ConnectionManager import ConnectionManager
from moio.errors.SiteCustomError import SiteCustomError
from moio.errors.SiteConnectionError import SiteConnectionError
from moio.errors.SiteAuthError import SiteAuthError
from moio.errors.SenderError import SenderError

class Frengo(Sender):
    """Permette di spedire SMS dal sito Frengo.com"""
   
    maxLength = 80
    """Lunghezza massima del messaggio singolo inviabile da questo sito."""
   
    requiresRegistration = True
    """Questo plugin richiede nome utente e password?"""
   
    def isAvailable(self):
        """Ritorna true se questo plugin è utilizzabile."""
        return True
       
    def sendOne(self, number, text, username = None, password = None):
        """Spedisce un SMS con soli caratteri ASCII e di lunghezza massima maxLength
        con le credenziali specificate, supponendo Internet raggiungibile.
        """
        try:
            if number[0]!="+":
                number = "+39"+number
            if username[0]!="+":
                username = "+39"+username

            #Visito la pagina di login
            c = self.connectionManager.getCurl()
            c.setopt(pycurl.POST, False)
            saver = StringIO()
            c.setopt(pycurl.WRITEFUNCTION, saver.write)
            c.setopt(pycurl.URL, "http://m.frengo.com/wapfg/login/-1xu?appid=0&returnTo=&param=&ref=hp")
            c.perform()

            #faccio il login, prima parte
            saver = StringIO()
            c.setopt(pycurl.WRITEFUNCTION, saver.write)
            c.setopt(pycurl.POST, True)
            postFields = {}
            prefix = username[:3]
            prefix = prefix[1:]
            postFields["country_code"] = prefix
            postFields["msisdn"] = username[3:]
            postFields["password"] = password
            postFields["login"] = "Login"
            c.setopt(pycurl.POSTFIELDS,
                self.codingManager.urlEncode(postFields))
            c.setopt(pycurl.FOLLOWLOCATION, False)
            c.setopt(pycurl.URL, "http://m.frengo.com/wapfg/login/q0?appid=0&returnTo=&param=&name=")
            c.perform()

            #Visito la pagina home
            c.setopt(pycurl.POST, False)
            saver = StringIO()
            c.setopt(pycurl.WRITEFUNCTION, saver.write)
            c.setopt(pycurl.URL, "http://m.frengo.com/hp")
            c.perform()
           
            try:
                re.search('Logout', saver.getvalue()).group(0)
            except:
                raise SiteAuthError(self.__class__.__name__)


           #tentativo di invio ad uno dei molti paesi supportati
            c.setopt(pycurl.POST, False)
            saver = StringIO()
            c.setopt(pycurl.WRITEFUNCTION, saver.write)
            c.setopt(pycurl.URL, "http://m.frengo.com/wapfreesms/sftm2_lp/optdn3?ref=upsell")
            c.perform()

            try:
                 prefix = number[:3]
                 prefix = prefix[1:]
                 re.search("value=\""+prefix+"\">[a-zA-Z]+ \(\+"+prefix+"\)</option>", saver.getvalue()).group(0)
            except:
                 raise SiteCustomError(self.__class__.__name__,
                 u"Paese di destinazione non supportato.")

            #Invio di un sms
            try:
                 action = re.search("action=\"/wapfreesms/sftm2_send/([0-9]+)\" method=\"post\">", saver.getvalue()).group(1)
            except:
                 raise SenderError(self.__class__.__name__)

            try:
                 name = re.search("value=\"(.+)\" id=\"name\" name=\"name\"", saver.getvalue()).group(1)
            except:
                 name = "MoioSms"

            saver = StringIO()
            c.setopt(pycurl.WRITEFUNCTION, saver.write)

            c.setopt(pycurl.POST, True)

            postFields = {}
            postFields["name"] = name
            postFields["message"] = str(text)
            postFields["country_code"] = prefix
            postFields["rmsisdn"] = number[3:]
            postFields["msisdn"] = username[1:]
            postFields["submit"] = "Submit"

            c.setopt(pycurl.POSTFIELDS,
                self.codingManager.urlEncode(postFields))
           
            url = "http://m.frengo.com/wapfreesms/sftm2_send/"+action;

            c.setopt(pycurl.URL, url)
            c.perform()
           
        except pycurl.error, e:
            errno, msg = e
            raise SiteConnectionError(self.__class__.__name__, self.codingManager.iso88591ToUnicode(msg))

_________________
Sender originale per Freebee: http://is.gd/1seTE (non funziona più)
Sender funzionante per Jaxtr: http://is.gd/1seUc
Sender funzionante per Mjoy: http://is.gd/1seUt (portato per Moiosms 2.18)


 
Inviato Domenica 14 Dicembre 2008, 14:08 
Amministratore
Vedo che ci prendi gusto, eh? :-)

Bene, benissimo. Darò un'occhiata al più presto: a meno di imprevisti Jaxtr e Frengo sono in lista per la versione 2.19.

_________________
"Things should be as simple as possible, but not any simpler" Einstein


 
Inviato Domenica 14 Dicembre 2008, 14:28 
Avatar utente
Eh eh... molto bene.

_________________
Sender originale per Freebee: http://is.gd/1seTE (non funziona più)
Sender funzionante per Jaxtr: http://is.gd/1seUc
Sender funzionante per Mjoy: http://is.gd/1seUt (portato per Moiosms 2.18)


 
Apri un nuovo argomento Rispondi all’argomento

cron