#!/usr/bin/env python # vim:fileencoding=utf-8 ''' Fetch sueddeutsche.de ''' from calibre.web.feeds.news import BasicNewsRecipe class Sueddeutsche(BasicNewsRecipe): title = 'Süddeutsche Zeitung' __author__ = 'unkn0wn' oldest_article = 1.2 masthead_url = 'https://upload.wikimedia.org/wikipedia/commons/4/42/S%C3%BCddeutsche_Zeitung_Logo.svg' description = 'Deutschlands führende Nachrichtenseite. Alles Wichtige aus Politik, Wirtschaft, Sport, Kultur, Wissenschaft, Technik und mehr.' encoding = 'utf-8' language = 'de' remove_attributes = ['style', 'height', 'width'] ignore_duplicate_articles = {'url'} resolve_internal_links = True remove_empty_feeds = True no_javascript = True no_stylesheets = True recipe_specific_options = { 'days': { 'short': 'Oldest article to download from this news source. In days ', 'long': 'For example, 0.5, gives you articles from the past 12 hours', 'default': str(oldest_article) } } def __init__(self, *args, **kwargs): BasicNewsRecipe.__init__(self, *args, **kwargs) d = self.recipe_specific_options.get('days') if d and isinstance(d, str): self.oldest_article = float(d) extra_css = ''' [data-manual="overline"] { font-size:small; color: #404040; } [data-manual="date"], [data-manual^="headerImageCaption"], [data-manual="author"] { font-size:small; } [data-manual="teaserText"] { font-style:italic; color:#202020; } blockquote, em { color: #202020; } ''' def get_cover_url(self): soup = self.index_to_soup('https://www.frontpages.com/suddeutsche-zeitung/') return 'https://www.frontpages.com' + soup.find('img', attrs={'id':'giornale-img'})['src'] keep_only_tags = [ dict(attrs={'data-manual':['overline', 'title', 'date', 'headerImage', 'teaserText', 'author', 'body']}), ] remove_tags = [ dict(name=['svg', 'button', 'meta']), dict(attrs={'data-manual-remove':'true'}) ] # https://www.sueddeutsche.de/service/updates-mit-rss-uebersicht-aller-rss-feeds-fuer-sz-de-sz-magazin-und-jetzt-de-1.393950 feeds = [ (u'Politik', u'http://rss.sueddeutsche.de/rss/Politik'), (u'Wirtschaft', u'http://rss.sueddeutsche.de/rss/Wirtschaft'), (u'Geld', u'http://rss.sueddeutsche.de/rss/Geld'), (u'Kultur', u'http://rss.sueddeutsche.de/rss/Kultur'), (u'Sport', u'http://rss.sueddeutsche.de/rss/Sport'), (u'Leben', u'http://rss.sueddeutsche.de/rss/Leben'), (u'Karriere', u'http://rss.sueddeutsche.de/rss/Karriere'), (u'Bildung', u'http://rss.sueddeutsche.de/rss/Bildung'), (u'Gesundheit', u'http://rss.sueddeutsche.de/rss/gesundheit'), (u'Stil', u'http://rss.sueddeutsche.de/rss/stil'), (u'München & Region', u'http://rss.sueddeutsche.de/rss/muenchen'), (u'Bayern', u'http://rss.sueddeutsche.de/rss/Bayern'), (u'Medien', u'http://rss.sueddeutsche.de/rss/Medien'), (u'Digital', u'http://rss.sueddeutsche.de/rss/Digital'), (u'Auto', u'http://rss.sueddeutsche.de/rss/Auto'), (u'Wissen', u'http://rss.sueddeutsche.de/rss/Wissen'), (u'Panorama', u'http://rss.sueddeutsche.de/rss/Panorama'), (u'Reise', u'http://rss.sueddeutsche.de/rss/Reise'), (u'Alles', u'https://rss.sueddeutsche.de/alles') ] def get_article_url(self, article): url = BasicNewsRecipe.get_article_url(self, article) url = url.split('?')[0] if 'sz-magazin.sueddeutsche.de/' not in url and 'artikel' not in url: return url def preprocess_html(self, soup): sub = soup.find(attrs={'data-manual':['overline', 'date']}) if sub: sub.name = 'div' h1 = soup.find(attrs={'data-manual':'title'}) if h1: h1.name = 'h1' for img in soup.findAll('img', attrs={'data-src':True}): img['src'] = img['data-src'] return soup def print_version(self, url): return 'https://och.to/unlock/' + url