středa 27. ledna 2010

Skript spuštěn

Jak jsem sliboval, tak jsem také učinil, a vytvořil jsem velmi primitivní skript v Pythonu, který sleduje vznik nových postů na Lucerně wikipedie a vytváří k nim automaticky diskuse. Spouští se každých 5 minut z mého serveru pecina.cz:
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.db
Zjevnou 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.

2 komentáře:

  1. Pane 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

Kursiva: <i>text</i>
Tučně (když už to musí být…): <b>text</b>
Odkaz: <a href = "http://adresa">název odkazu</a>, tedy <a href = ""></a>

Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.