mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-09-29 15:31:08 -04:00
100 lines
4.0 KiB
Python
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
|