Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #coding: utf-8
- import urllib
- from xml.dom.minidom import parseString
- import smtplib
- # Configuración do servidor de correo
- smtp_server = 'smtp.gmail.com:587'
- smtp_sender = 'kenkeiras@gmail.com'
- smtp_rcpt = 'kenkeiras@gmail.com'
- smtp_subject = 'Novas en Hackliza'
- smtp_user = 'kenkeiras'
- smtp_pass = 'xxxxxxxxx'
- def getText(nodelist):
- """Ler o texto dunha etiqueta XML."""
- rc = []
- for node in nodelist:
- if node.nodeType == node.TEXT_NODE:
- rc.append(node.data)
- return ''.join(rc)
- def read_atom(target):
- """Ler os títulos e resumo de un ATOM."""
- atom = urllib.urlopen(target).read()
- atom = parseString(atom)
- entradas = atom.getElementsByTagName("entry")
- entradas_lidas = []
- # Por cada entrada
- for entrada in entradas:
- entrada_lida = {}
- # Lemos o título
- entrada_lida['titulo'] = getText(entrada.getElementsByTagName("title")[0].childNodes)
- # E como resumo tomamos as 10 primeiras verbas
- texto = getText(entrada.getElementsByTagName("content")[0].childNodes)
- entrada_lida['resumo'] = ' '.join(texto.split()[:10]).replace("<br />", "\n")
- entradas_lidas.append(entrada_lida)
- return entradas_lidas
- def entry_exists(titulo, cur):
- """Existe unha entrada na base de dados."""
- cur.execute('''SELECT count(*) FROM novas WHERE titulo=?''', (titulo,))
- return cur.fetchone()[0] > 0
- def add_entry(titulo, cur):
- """Engadir unha entrada a base de dados."""
- cur.execute('''INSERT INTO novas VALUES(?)''', (titulo,))
- def mail(server, send_from, rcpt_to, subject, data, username, password):
- """Envio dun correo."""
- mailer = smtplib.SMTP(server)
- mailer.starttls()
- mailer.login(username, password)
- mailer.sendmail(send_from, rcpt_to, "Subject: %s\n\n%s" % (subject.encode("utf-8"), data.encode("utf-8")))
- mailer.quit()
- target = "http://hackliza.blogspot.com/feeds/posts/default"
- import sqlite3
- dbname = "novas.sqlite3"
- conn = sqlite3.connect(dbname)
- # Preparamos o obxecto que xestiona a conexión a base de dados
- cur = conn.cursor()
- # Creamos a táboa de novas
- try:
- cur.execute('''CREATE TABLE novas (titulo varchar)''')
- except sqlite3.OperationalError, e:
- pass
- atom = read_atom(target)
- for a in atom:
- if not entry_exists(a['titulo'], cur):
- mail(server=smtp_server,
- send_from=smtp_sender,
- rcpt_to=smtp_rcpt,
- subject=smtp_subject,
- data="Nova entrada en Hackliza: %s\n\t%s" % (a['titulo'], a['resumo']),
- username=smtp_user,
- password=smtp_pass)
- add_entry(a['titulo'], cur)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement