čtvrtek 18. listopadu 2010

Vytvoření šablony pro stahování zpráv v Calibre

Protože v mém oblíbeném programu Calibre zcela chybí stahování zpráv z českých zpravodajských serverů, rozhodl jsem se přidat si jeden server a napsat návod, jak se to dělá. Vybral jsem si nejsledovanější “bulvární” zpravodajský server iDnes.cz.

Mým prvním krokem bylo vyhledání nějakého vhodného příkladu, který bych mohl vykrást. Jak říkal Bill Gates v Pirátech ze Sillicon Valley, chytrý člověk kopíruje, génius krade ;) Moje volba padla na BBC Fast a San Francisco Chronicle. Soubory *.recipe najdete v Program Files/Calibre2/resources/. Prohlédneme-li si strukturu, zjistíme, že soubor se skládá z hlavičky s popisem kódování, jazyka, počtu stahovaných příspěvků a následných transformací. Takže hlavička:

class Idnes(BasicNewsRecipe):
    title                 = 'iDnes.cz - fast'
    __author__            = 'ufonek‘
    description           = 'News from Czech Republic'
    oldest_article        = 7
    max_articles_per_feed = 20
    no_stylesheets        = True
    use_embedded_content  = False
    encoding              = 'windows-1250'
    publisher             = 'MAFRA a.s.'
    category              = 'news, politics, sport, economic, Czech Republic'
    language              = 'cs'   
    publication_type      = 'newsportal'   

Pomocí volby extra_css říkáme, jak má vypadat tato stránka po konverzi z hlediska velikosti písma atd. Preprocess_regexps umožňuje nějaké pokročilé transformace za pomoci lambda výrazů – trochu tápu, nepotřeboval jsem.

Zajímavá volba je keep_only_tags, kterou říkáme, jaké HTML tagy mají být zahrnuty do exportu. Nás zajímají články, tedy hlavní sloupec. Pro iDnes tedy:

  • keep_only_tags = [  dict(name='div'  , attrs={'class':['col-a' ]}) ]

Vhodné je pro správné nalezení CSS oblastí použít šikovný plugin Web Developer, který je dostupný jak pro Firefox, tak pro Chrome. Pěkně červeným rámečkem zobrazí aktivní oblast.

Další volba je remove_tags, kterou vyházíme ze vznikajícího exportu HTML tagy. Např. tedy:

remove_tags = [
                     dict(name='div'  , attrs={'class':['counters','adline','pnl','infotext','col-b' ]})
                    ,dict(name='div'  , attrs={'id'   :['hlavniz','portal','foot','clink','manager-bar','related2','comunity-webs','moot2','zooming']})
                    ,dict(name='p'    , attrs={'class':['marker','infotext'               ]})
                    ,dict(name='meta' , attrs={'name' :'description'                       })
                    ,dict(name='a'    , attrs={'rel'  :'tag'                               })
                    ,dict(name=['img','link','base','meta','iframe','object','embed'])
                  ]

Dále remove_attributes odstraňuje nepotřebné CSS atributy a remove_javascript nám odstraní JS skripty.

Teď už zbývá jen nadefinovat feedy, které chceme stahovat, opět příklad z idnes.cz:

feeds          = [   
                     (u'Zprávy'        , u'http://servis.idnes.cz/rss.asp?c=zpravodaj'              )
                     ,(u'Sport'        , u'http://servis.idnes.cz/rss.asp?c=sport'              )
                     ,(u'Finance'      , u'http://servis.idnes.cz/rss.asp?c=fincentrum'              )
                    ]

Když si vytvoříme svůj vlastní recipe soubor, je nám to zřejmě nanic, nebo jsem zatím nepřišel na to, jak ho mohu přidat. Pokud se jen vytvoří v adresáři, Calibre ho nenajde. Takže musíme jinak, přes velkou oranžovou ikonu Stáhnout zprávy a Přidat vlastní zdroj zpráv:

calibre1

Objeví se následující okno, kde kliknutím na tlačítko Přepnout do pokročilého zobrazení dostaneme jednoduchý editor.calibre2Do něj zkopírujeme obsah vytvořeného souboru a klepneme na tlačítko Přídat-aktualizovat. Pokud se neobjeví hlášení o chybě, máme vyhráno.calibre3

Pokud chceme pravidelně stahovat zprávy, klepneme opět na tlačítko Stáhnout zprávy a následně na Nastavit pravidelné stahování zpráv. Tam pod záložkou uživatelské nalezneme naši novou úlohu a nastavíme stahování. Toto vše lze také naskriptovat přes příkazovou řádku na nějakém linux serveru, který se pak bude automaticky starat o zasílání zpráv do Vašeho miláčka, aniž byste museli mít puštěný počítač. To ale bude předmětem dalšího článku.

P.S. Až budu mít trochu času, soubor pro iDnes doladím a pošlu autorovi se žádostí o přidání do oficiální distribuce. Věřím, že si uživatele v ČR najde.

Žádné komentáře: