A URL sobre a que faremos as probas é a de este blogue, http://hackliza.blogspot.com/feeds/posts/default.
Ímos enton a comezar polo principio, a descargar ese arquivo é descompoñelo.
A primeira parte é ben sinxela, só temos que usar urllib.urlopen e pista :P
import urllib atom = urllib.urlopen("http://hackliza.blogspot.com/feeds/posts/default").read()
Feito isto xa temos os datos en `atom`, agora falta descompoñelos, pero como xa dixemos está baseado en XML, así que podemos usa-lo parser da librería estándar.
from xml.dom.minidom import parseString atom = parseString(atom)
Agora só queda buscar a información interesante, que neste casos serían as entradas, contidas nas etiquetas `entry`.
entradas = atom.getElementsByTagName("entry")
Se fixeramos `len(entradas)` atoparíamonos co número de entradas do blogue (ou probablemente un número máximo entre 20 e 30).
Veña, que casi está, agora imos extraer o título e o texto de resumo... (a función getText podedes atopala no exemplo da documentación.)
def getText(nodelist): rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc) # 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]) entradas_lidas.append(entrada_lida)
E agora todo xunto:
target = "http://hackliza.blogspot.com/feeds/posts/default" import urllib from xml.dom.minidom import parseString # Ler o texto nunha etiqueta XML def getText(nodelist): rc = [] for node in nodelist: if node.nodeType == node.TEXT_NODE: rc.append(node.data) return ''.join(rc) # Ler os títulos e resumo de un ATOM def read_atom(target): 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]) entradas_lidas.append(entrada_lida) return entradas_lidas atom = read_atom(target) for a in atom: print "%s - %s..." % (a['titulo'], a['resumo'])
No seguinte post veremos como levar as contas dos que xa avisamos e coma enviar as novas usando unha conta de correo ;)
No hay comentarios:
Publicar un comentario