calibre/recipes/sueddeutsche.recipe
2024-08-15 09:58:33 +05:30

100 lines
4.0 KiB
Python

#!/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