#!/usr/bin/env python # vim:fileencoding=utf-8 from calibre.web.feeds.news import BasicNewsRecipe class LWNFree(BasicNewsRecipe): title = 'LWN Linux Weekly News (Free)' language = 'en' __author__ = 'yodha8' description = "LWN is published every Thursday. This recipe skips current week's articles (subscriber-only) and pulls free articles from previous week." oldest_article = 28 # So we can grab previous week articles. max_articles_per_feed = 100 extra_css = '.FeatureByline { font-size:small; }' keep_only_tags = [dict(name='div', attrs={'class':['ArticleText', 'PageHeadline']})] remove_tags = [dict(name='blockquote', attrs={'class':'ad'}), dict(name='form')] feeds = [ ('LWN Articles', 'https://lwn.net/headlines/Features'), ] def parse_feeds(self): '''Remove paid articles and articles older than a week.''' prev_feeds = super().parse_feeds() remove_articles = [] weekly_count = 0 for article in prev_feeds[0]: # Paid article if '[$]' in article.title: remove_articles.append(article) continue # Count how many free weekly edition we passed if 'Weekly Edition' in article.title: weekly_count += 1 remove_articles.append(article) # Remove all articles starting from 2nd free weekly edition if weekly_count > 1: remove_articles.append(article) # Remove everything but prev week's free articles for pa in remove_articles: prev_feeds[0].remove_article(pa) return prev_feeds