Successivo

News

Farsi la propria rivista con Calibre

Michele Costabile | 15 Dicembre 2010

Se siamo in possesso di un lettore di ebook non siamo obbligati a contare solamente sui libri e le riviste […]

Se siamo in possesso di un lettore di ebook non siamo obbligati a contare solamente sui libri e le riviste in vendita: possiamo anche fabbricarci la nostra rivista personale aggregando feed Rss e altre fonti con uno strumento duttile al massimo grado, tanto da lasciarci usare Python per specificare i dettagli di una trasformazione.

Il risultato dell'importazione di un feed Rss in Calibre

Occorrente: un computer con Windows, MacOS e Linux, una connessione interenet e un ebook reader. Usiamo questo tono perché dobbiamo parlare di ricette, le ricette di Calibre per la conversione automatizzata di documenti.

Abbiamo già  parlato di Calibre a proposito del Kindle, ma senza metterlo in particolare luce. Calibre, invece, è un compagno indispensabile per ogni possessore di iPad o lettore di ebook per la varietà  e la duttilità  degli strumenti che mette a disposizione, in primo luogo l’archiviazione di una libreria elettronica, la catalogazione e l’editing dei metadati, proprio come siamo abituati a fare con una collezione di file musicali mp3. In secondo luogo la conversione di formato, che ci permette, per esempio, di portare su un Kindle documenti reperiti nel più diffuso formato mobi o pdf. Infine, un ampio ventagli di strumenti per raccogliere contenuto sul web e impacchettarlo in un formato agevole per un lettore i ebook.

Il ricchissimo indice di Le Scienze visto sul Kindle.

Vogliamo mostrare questa volta la creazione di un ebook a partire da un feed Rss.

Il modo più comodo e interattivo è sfruttare l’interfaccia di Calibre. Con un clic sull’icona News, una N in una palla rossa e una freccia discendente apriamo una finestra di dialogo che mostra diverse sorgenti di contenuto catalogate per lingua. Il menu Italiano ha una ricca scelta di fonti dati. Fra i giornali troviamo Il Corriere della Sera, La Repubblica, La Stampa, l’Osservatore Romano, Il Fatto Quotidiano, il Giornale. Fra le riviste troviamo una splendida Le Scienze, con una quantità  di articoli davvero notevole.

[/caption]Naturalmente non siamo costretti a limitarci a quello che possiamo trovare di già  fatto: possiamo creare le nostre ricette di importazione, creando dei file con estensione .recipe, che contengono un vero e proprio programma Python per l’importazione.

Ecco come lanciare una recipe da riga di comando:

"C:\Program Files (x86)\Calibre2\ebook-convert.exe" thetaoofmac.recipe
    thetaoofmac.mobi --output-profile=kindle

Ed ecco il contenuto di una ricetta che importa il feed di Taoofmac, un sito sempre divertente e stimolante, per i patiti della mela, ma anche per capire che aria tira nel mondo delle telecomunicazioni.

class AdvancedUserRecipe1288655187(BasicNewsRecipe): title = u'The Tao of Mac' oldest_article = 10 max_articles_per_feed = 100 no_stylesheets = True feeds = [(u'The Tao of Mac', u'https://feeds.feedburner.com/taoofmac/full')]

Si noti che la ricetta è in effetti una classe Python, quindi si può sfruttare a piacere il linguaggio di programmazione per complicare le cose. Per esempio si può usare un po’ di logica per saltare la versione su più pagine e scaricare la versione completa pronta per la stampa di un articolo. Questi casi sono descritti nella documentazione di Calibre. Ecco un esempio di ricetta più consistente, spiegata nel manuale

__license__   = 'GPL v3'
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
'''
news.bbc.co.uk
'''
import re
from calibre.web.feeds.recipes import BasicNewsRecipe

class BBC(BasicNewsRecipe):
    title                  = 'BBC News'
    __author__             = 'Darko Miletic, Starson17'
    description            = 'News from UK. '
    oldest_article         = 2
    max_articles_per_feed  = 100
    no_stylesheets         = True
    #delay                  = 1
    use_embedded_content   = False
    encoding               = 'utf8'
    publisher              = 'BBC'
    category               = 'news, UK, world'
    language               = 'en_GB'
    publication_type       = 'newsportal'
    extra_css              = ' body{ font-family: Verdana,Helvetica,Arial,sans-serif } .introduction{font-weight: bold} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} '
    preprocess_regexps     = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
    conversion_options = {
                             'comments'        : description
                            ,'tags'            : category
                            ,'language'        : language
                            ,'publisher'       : publisher
                            ,'linearize_tables': True
                         }

    keep_only_tags    = [
                       dict(name='div', attrs={'class':['layout-block-a layout-block']})
                       ,dict(attrs={'class':['story-body','storybody']})
                        ]

    remove_tags = [
                       dict(name='div', attrs={'class':['story-feature related narrow', 'share-help', 'embedded-hyper', \
                       'story-feature wide ', 'story-feature narrow']})
                        ]

    remove_attributes = ['width','height']

    feeds          = [
                      ('News Front Page', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml'),
                      ('Science/Nature', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml'),
                      ('Technology', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml'),
                      ('Entertainment', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/entertainment/rss.xml'),
                      ('Magazine', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/uk_news/magazine/rss.xml'),
                      ('Business', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/business/rss.xml'),
                      ('Health', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/health/rss.xml'),
                      ('Americas', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/americas/rss.xml'),
                      ('Europe', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/europe/rss.xml'),
                      ('South Asia', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/south_asia/rss.xml'),
                      ('UK', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/uk_news/rss.xml'),
                      ('Asia-Pacific', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/asia-pacific/rss.xml'),
                      ('Africa', 'https://newsrss.bbc.co.uk/rss/newsonline_world_edition/africa/rss.xml'),
                    ]

Una volta che la nostra ricetta è rifinita in modo soddisfacente la possiamo importare nel ricettario standard del programma, eventualmente possiamo anche considerare di spedirla agli autori di Calibre per un’eventuale inclusione in release. Studiando la finestr di dialogo di importazione si vede come sia facile creare un aggregazione di feed ragionevolmente complessa anche senza programmazione.

La finestra di dialogo per creare e importare ricette di importazione di feed

La documentazione di Calibre mostra come realizzare ricette di importazione più complesse di questo semplice esempio, archiviando più di una fonte dati e importando da fonti dati più ostiche di un feed Rss.

Agigungiamo che Calibre contiene anche un comando, calibre-smtp, che permette di spedire documenti per posta elettronica. Se abbiamo un kindle registrato a tizio, l’invio di mail a [email protected] con un documento in allegato farà  arrivare gratuitamente sul Kindle di Tizio il  documento allegato, se il formato è compatibile e il Kindle si trova sotto copertura WiFi. Questa può essere un’opzione interessante per schedulare la creazione e la consegna della reading list del giorno un’ora prima di afferrare il Kindle e prendere l’autobus verso casa.