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