#!/usr/bin/env python # vim:fileencoding=utf-8 ## # Written: October 2012 (new coding) # Version: 9.0 # Last update: 2018-02-22 ## from __future__ import absolute_import, division, print_function, unicode_literals __license__ = 'GPL v3' __copyright__ = '' ''' Fetch RSS-Feeds spektrum.de ''' def classes(classes): q = frozenset(classes.split(' ')) return dict( attrs={'class': lambda x: x and frozenset(x.split()).intersection(q)} ) from calibre.web.feeds.recipes import BasicNewsRecipe class Spektrum(BasicNewsRecipe): title = u'Spektrum der Wissenschaft' __author__ = 'Armin Geller, Bratzzo, Rainer Zenz, update epubli' description = u'German online portal of Spektrum der Wissenschaft' publisher = 'Spektrum der Wissenschaft Verlagsgesellschaft mbH' category = 'science news, Germany' oldest_article = 7 max_articles_per_feed = 100 no_stylesheets = True remove_javascript = True remove_empty_feeds = True language = 'de' encoding = 'utf8' ignore_duplicate_articles = {'title'} cover_url = 'https://www.spektrum.de/js_css/sde/assets/img/svg/sdw_dark.svg' masthead_url = 'http://www.spektrum.de/fm/861/spektrum.de.png' feeds = [ ( u'Spektrum.de', u'http://www.spektrum.de/alias/rss/spektrum-de-rss-feed/996406' ), # (u'Spektrum der Wissenschaft', u'http://www.spektrum.de/alias/rss/spektrum-der-wissenschaft-rss-feed/982623'), # (u'Gehirn & Geist', u'http://www.spektrum.de/alias/rss/gehirn-geist-rss-feed/982626'), ( u'Sterne und Weltraum', u'http://www.spektrum.de/alias/rss/sterne-und-weltraum-rss-feed/865248' ), # (u'Meistgelesene Artikel',u'http://www.spektrum.de/alias/rss/spektrum-de-meistgelesene-artikel/1224665'), # AGe 2014-08-21 new ] keep_only_tags = [ dict(name='article', attrs={'class': 'content'}), ] remove_tags = [ classes('hide-for-print'), classes('content__meta'), classes('content__author'), classes('content__video'), dict(name='div', attrs={'role': 'navigation'}), dict(name='span', attrs={'class': 'sr-only'}), ] def parse_feeds(self): # Call parent's method. feeds = BasicNewsRecipe.parse_feeds(self) # Loop through all feeds. for feed in feeds: # Loop through all articles in feed. for article in feed.articles[:]: if 'VIDEO' in article.title: feed.articles.remove(article) # Remove articles with 'video','podcast' or 'rezension' in the url. elif 'podcast' in article.url: feed.articles.remove(article) elif 'video' in article.url: feed.articles.remove(article) elif 'rezension' in article.url: feed.articles.remove(article) return feeds def preprocess_html(self, soup, *a): for img in soup.findAll('img', attrs={'data-src': True}): img['src'] = img['data-src'] return soup