from pysqlite2.dbapi2 import connect
from urllib import urlopen
from BeautifulSoup import BeautifulStoneSoup
from smtplib import SMTP
from email.message import Message
from email.header import Header
dbf = 'sync.db'
dbt = 'sync'
surl = 'http://wikipedie.blogspot.com/feeds/posts/default?alt=rss'
semail = 'noreply@pecina.cz'
temail = 'tompecina.(heslo)@blogger.com'
con = connect(dbf)
cur = con.cursor()
smtp = SMTP('localhost')
soup = BeautifulStoneSoup(urlopen(surl).read())
for item in reversed(soup('item')):
title = item.title.string
link = item.link.string
cur.execute("select * from %s where url='%s'" % (dbt, link) )
if not cur.fetchone():
msg = Message()
msg['Subject'] = Header('<a href="%s">%s</a>' % (link, title), 'utf8')
smtp.sendmail(semail, [temail], msg.as_string())
cur.execute("insert into %s values ( '%s' )" % (dbt, link) )
smtp.quit()
con.commit()
cur.close()
con.close()
Počáteční databasi lze vytvořit např. takto:echo 'create table sync ( url text );' | sqlite3 sync.dbZjevnou nevýhodou tohoto přístupu je, že se vytvoří diskusní posty i pro ty příspěvky na Lucerně, které tam diskusi mají; odstranění problému by vyžadovalo parsing html kódu, což není nijak složité, jen relativně pracné, a prozatím proto budu tyto případné nadbytečné posty mazat ručně.
Dalším drobným nedostatkem je, že skript neumí zachytit změnu titulku postu a diskusi ponechává první titulek, který si přečte ve feedu. Oprava je opět možná ručně.
Poznámka: První den skript patrně ještě nebude fungovat, překročil jsem při testování maximální počet postů za jeden den a blogger.com aktivoval captchu.

Muž mnoha talentů... : )
OdpovědětVymazatPane Petersi: Pokud tento diskusní blog čtete, mohl byste prosím napsat něco malého informativního, ať můžeme otestovat ten skript?
OdpovědětVymazat