A base de dados
Como base de dados imos a usar SQLite3, que non require software externo e python implementa como parte da libraría estándar: http://docs.python.org/library/sqlite3.htmlAsí, o noso script tería que abri-lo arquivo da base de dados e se é necesario preparar as táboas:
import sqlite3 dbname = "novas.sqlite3" conn = sqlite3.connect(dbname)
A táboa que usaremos será unha cunha soa columna, a do título, creámola entón:
# Preparamos o obxecto que xestiona a conexión a base de dados
cur = conn.cursor()
# Creamos a táboa de novas
cur.execute('''CREATE TABLE novas (titulo varchar)''')
Pero se o '''CREATE TABLE''' executase coa táboa xa creada (por exemplo se lanzamos o script despois de habelo parado, daría unha excepción, para correxilo faremos:
# Creamos a táboa de novas
try:
cur.execute('''CREATE TABLE novas (titulo varchar)''')
except sqlite3.OperationalError, e:
pass
Así, se queremos engadir unha entrada a táboa faríamos unha query de `INSERT`, como se fora una base de dados SQL normal:
def add_entry(titulo, cur):
cur.execute('''INSERT INTO novas VALUES(?)''', (titulo,))
(Ollo con facer o remprazo modificando directamente a cadea que podemos caer fácilmente nun SQL-injection ;) ).E para comprobar se hay unha entrada, pois o de sempre, `SELECT`
def entry_exists(titulo, cur):
cur.execute('''SELECT count(*) FROM novas WHERE titulo=?''', (titulo,))
return cur.fetchone()[0] > 0
E esta parte xa está...
>>> add_entry(u'Título da entrada', cur) >>> entry_exists(u'título falso', cur) False >>> entry_exists(u'Título da entrada', cur) True >>>
O cliente de correo
E chegamos o momento de preparar o sistema que enviará o correo electrónico, por suposto Python provee unha libraría estándar para isto: http://docs.python.org/library/smtplib.htmlPara mandar un correo so temos que conectarnos a un servidor
mailer = smtplib.SMTP(server)
Iniciar unha sesión cifrada
mailer.starttls()
Facer login
mailer.login(username, password)
Enviar propiamente o correo (o formateado deixa que desexar, pero serve de exemplo)
mailer.sendmail(send_from, rcpt_to, "Subject: %s\n\n%s" % (subject, data))
E por último pechar a conexión
mailer.quit()
E xa está, xuntémolo todo nunha función e vexamos un exemplo:
def mail(server, send_from, rcpt_to, subject, data, username, password):
mailer = smtplib.SMTP(server)
mailer.starttls()
mailer.login(username, password)
mailer.sendmail(send_from, rcpt_to, "Subject: %s\n\n%s" % (subject, data))
mailer.quit()
Por exemplo, se quero enviar un correo de proba dende a miña conta de GMail faríao así
mail(server='smtp.gmail.com:587', # Servidor de gmail
send_from='kenkeiras@gmail.com', # Correo do emisor
rcpt_to='kenkeiras@gmail.com', # Correo do receptor
subject='Proba', # Asunto
data='Proba do script', # Texto do correo
username='kenkeiras', # Usuario do servizo
password='xxxxxxxxxxx') # Contrasinal do servizo
Así, o código podería quedar como este: http://pastebin.com/CvVRDcdm
Como nota final decir que poderíamos facer que se execute cada hora, para isto existe un demo chamado `cron`, queda a idea como exercicio para quen lea ;)
Saúdos
No hay comentarios:
Publicar un comentario