Register Guidelines E-Books Today's Posts Search

Go Back   MobileRead Forums > E-Book Software > Calibre > Recipes

Notices

Reply
 
Thread Tools Search this Thread
Old Yesterday, 08:43 PM   #1
giardn
Junior Member
giardn began at the beginning.
 
Posts: 6
Karma: 10
Join Date: Oct 2024
Device: Supernote Manta
Ars Technica Feeds Change - Updated Recipe

Ars changed the feeds today, here's an updated recipe.

Code:
#!/usr/bin/env python
__license__ = 'GPL v3'
__copyright__ = '2008-2012, Darko Miletic <darko.miletic at gmail.com>'
'''
arstechnica.com
'''

import re

from calibre.web.feeds.news import BasicNewsRecipe


def classes(classes):
    q = frozenset(classes.split(' '))
    return dict(attrs={
        'class': lambda x: x and frozenset(x.split()).intersection(q)})


class ArsTechnicaMod(BasicNewsRecipe):
    title = u'Ars Technica Mod'
    language = 'en'
    __author__ = 'Darko Miletic, Sujata Raman, Alexis Rohou, Tom Sparks'
    description = 'Ars Technica: Serving the technologist for 1.2 decades'
    publisher = 'Conde Nast Publications'
    oldest_article = 5
    max_articles_per_feed = 100
    no_stylesheets = True
    encoding = 'utf-8'
    use_embedded_content = False
    remove_empty_feeds = True
    ignore_duplicate_articles = {'url', 'title'}
    masthead_url = 'https://upload.wikimedia.org/wikipedia/commons/5/51/Ars_Technica_logo_%282016%29.svg'
    extra_css             = '''
        body {font-family: Arial,sans-serif}
        .heading{font-family: "Times New Roman",serif}
        .byline{font-weight: bold; line-height: 1em; font-size: 0.625em; text-decoration: none}
        img{display: block}
        .caption-text{font-size:small; font-style:italic}
        .caption-byline{font-size:small; font-style:italic; font-weight:bold}
        .video, .page-numbers, .story-sidebar { display: none }
        .image { display: block }
    '''

    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)

    keep_only_tags = [
        dict(itemprop=['article-header', 'article-body']),
        classes('main post-meta article-guts standalone'),
    ]

    remove_tags = [
        classes('xf_thread_iframe_wrapper topnav-sections nav-previous nav-next ars-gallery-caption-credit'
                ' ars-gallery-caption-text ars-gallery-caption-arrow font-impact sr-only author-mini-bio'
                ' taboola-container comments site-header site-footer video corner-info article-expander'
                ' left-column related-stories article-social text-settings-dropdown-story intro-image'),
        dict(name=['object', 'link', 'embed', 'iframe', 'meta']),
        dict(id=['social-left', 'article-footer-wrap']),
        dict(name='nav', attrs={'class': 'subheading'}),
    ]
    remove_attributes = ['lang', 'style']

    # Feed are found here: http://arstechnica.com/rss-feeds/
    feeds = [
            ('Ars Technica', 'https://feeds.arstechnica.com/arstechnica/index'),
            ('Features', 'https://feeds.arstechnica.com/arstechnica/features'),
            ('Technology Lab', 'https://feeds.arstechnica.com/arstechnica/technology-lab'),
            ('Gear & Gadgets', 'https://feeds.arstechnica.com/arstechnica/gadgets'),
            ('Law & Disorder', 'https://feeds.arstechnica.com/arstechnica/tech-policy'),
            #('Health', 'https://arstechnica.com/health/feed/'),
            #('Policy', 'https://arstechnica.com/tech-policy/feed/'),
            #('Security', 'https://arstechnica.com/security/feed/'),
            ('Infinite Loop', 'https://feeds.arstechnica.com/arstechnica/apple'),
            ('Opposable Thumbs', 'https://feeds.arstechnica.com/arstechnica/gaming'),
            ('Scientific Method', 'https://feeds.arstechnica.com/arstechnica/science'),
            ('Cars Technica', 'https://feeds.arstechnica.com/arstechnica/cars'),
            ('Staff', 'https://feeds.arstechnica.com/arstechnica/staff'),
            #('AI', 'https://arstechnica.com/staff/ai/feed/'),
            #('Space', 'https://arstechnica.com/space/feed/'),
            ('Ars Cardboard', 'https://feeds.arstechnica.com/arstechnica/cardboard'),
    ]

    recursions = 1

    def is_link_wanted(self, url, tag):
        return re.search(r'/[0-9]/$', url) is not None

    def postprocess_html(self, soup, first_fetch):
        if not first_fetch:
            for x in soup.findAll(itemprop=['headline', 'description']):
                x.extract()
            for x in soup.findAll(**classes('post-meta')):
                x.extract()
        return soup


calibre_most_common_ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
giardn is offline   Reply With Quote
Reply


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Ars Technica Recipe giardn Recipes 1 06-12-2025 07:28 AM
Ars Technica Updated Feeds giardn Recipes 2 11-01-2024 09:21 AM
Ars Technica recipe is broken renszarv Recipes 2 09-03-2016 03:24 AM
ars technica recipe tom_a_sparks Recipes 1 05-21-2014 11:22 PM
Updated Ars Technica recipe odie Recipes 2 05-15-2012 01:52 PM


All times are GMT -4. The time now is 09:48 PM.


MobileRead.com is a privately owned, operated and funded community.