Advertisement
Guest User

Untitled

a guest
Sep 30th, 2012
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.68 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #coding: utf-8
  3.  
  4. import urllib
  5. from xml.dom.minidom import parseString
  6.  
  7. import smtplib
  8. # Configuración do servidor de correo
  9. smtp_server = 'smtp.gmail.com:587'
  10. smtp_sender = 'kenkeiras@gmail.com'
  11. smtp_rcpt = 'kenkeiras@gmail.com'
  12. smtp_subject = 'Novas en Hackliza'
  13. smtp_user = 'kenkeiras'
  14. smtp_pass = 'xxxxxxxxx'
  15.  
  16.  
  17. def getText(nodelist):
  18.     """Ler o texto dunha etiqueta XML."""
  19.     rc = []
  20.     for node in nodelist:
  21.         if node.nodeType == node.TEXT_NODE:
  22.             rc.append(node.data)
  23.     return ''.join(rc)
  24.  
  25.  
  26. def read_atom(target):
  27.     """Ler os títulos e resumo de un ATOM."""
  28.     atom = urllib.urlopen(target).read()
  29.     atom = parseString(atom)
  30.     entradas = atom.getElementsByTagName("entry")
  31.     entradas_lidas = []
  32.     # Por cada entrada
  33.     for entrada in entradas:
  34.         entrada_lida = {}
  35.         # Lemos o título
  36.         entrada_lida['titulo'] = getText(entrada.getElementsByTagName("title")[0].childNodes)
  37.         # E como resumo tomamos as 10 primeiras verbas
  38.         texto = getText(entrada.getElementsByTagName("content")[0].childNodes)
  39.         entrada_lida['resumo'] = ' '.join(texto.split()[:10]).replace("<br />", "\n")
  40.  
  41.         entradas_lidas.append(entrada_lida)
  42.  
  43.     return entradas_lidas
  44.  
  45.  
  46. def entry_exists(titulo, cur):
  47.     """Existe unha entrada na base de dados."""
  48.     cur.execute('''SELECT count(*) FROM novas WHERE titulo=?''', (titulo,))
  49.     return cur.fetchone()[0] > 0
  50.  
  51. def add_entry(titulo, cur):
  52.     """Engadir unha entrada a base de dados."""
  53.     cur.execute('''INSERT INTO novas VALUES(?)''', (titulo,))
  54.  
  55. def mail(server, send_from, rcpt_to, subject, data, username, password):
  56.     """Envio dun correo."""
  57.     mailer = smtplib.SMTP(server)
  58.     mailer.starttls()
  59.     mailer.login(username, password)
  60.     mailer.sendmail(send_from, rcpt_to, "Subject: %s\n\n%s" % (subject.encode("utf-8"), data.encode("utf-8")))
  61.     mailer.quit()
  62.  
  63.  
  64. target = "http://hackliza.blogspot.com/feeds/posts/default"
  65. import sqlite3
  66. dbname = "novas.sqlite3"
  67. conn = sqlite3.connect(dbname)
  68.  
  69. # Preparamos o obxecto que xestiona a conexión a base de dados
  70. cur = conn.cursor()
  71. # Creamos a táboa de novas
  72. try:
  73.     cur.execute('''CREATE TABLE novas (titulo varchar)''')
  74. except sqlite3.OperationalError, e:
  75.     pass
  76.  
  77. atom = read_atom(target)
  78. for a in atom:
  79.     if not entry_exists(a['titulo'], cur):
  80.         mail(server=smtp_server,
  81.              send_from=smtp_sender,
  82.              rcpt_to=smtp_rcpt,
  83.              subject=smtp_subject,
  84.              data="Nova entrada en Hackliza: %s\n\t%s" % (a['titulo'], a['resumo']),
  85.              username=smtp_user,
  86.              password=smtp_pass)
  87.         add_entry(a['titulo'], cur)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement