#!/usr/pkg/bin/python3.13
# 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
