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