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=¶m=&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=¶m=&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))