Register Guidelines E-Books Today's Posts Search

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

Notices

View Poll Results: Which type of recipes you'd like to have the most?
Ukrainian sources in Ukrainian 1 33.33%
Ukrainian sources in Russian 0 0%
Russian sources in Russian 0 0%
Russian & Ukrainian sources in English 2 66.67%
Multiple Choice Poll. Voters: 3. You may not vote on this poll

Reply
 
Thread Tools Search this Thread
Old 07-29-2022, 12:03 AM   #16
kovidgoyal
creator of calibre
kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.kovidgoyal ought to be getting tired of karma fortunes by now.
 
kovidgoyal's Avatar
 
Posts: 44,650
Karma: 24495948
Join Date: Oct 2006
Location: Mumbai, India
Device: Various
that fix was already done when I added the recipe.
kovidgoyal is offline   Reply With Quote
Old 07-29-2022, 07:38 AM   #17
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
Quote:
Originally Posted by kovidgoyal View Post
that fix was already done when I added the recipe.
Thanks for that.
bugmen00t is offline   Reply With Quote
Old 08-01-2022, 08:08 AM   #18
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 06 of ??)

NEW MULTI-LANGUAGE RECIPE (OF UKRAINIAN SOURCE)


UkrInform: state information and news agency of Ukraine. Favicon replacement. It seems that the values of 'language' variable are overcomplicated as they cause new redundant categories in recipes list; probably should've left single language code.

Ukrainain version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = '\u0423\u043A\u0440\u0456\u043D\u0444\u043E\u0440\u043C'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0435 \u0434\u0435\u0440\u0436\u0430\u0432\u043D\u0435 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E, \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0457 \u043F\u0440\u043E \u043F\u043E\u043B\u0456\u0442\u0438\u0447\u043D\u0435, \u0435\u043A\u043E\u043D\u043E\u043C\u0456\u0447\u043D\u0435, \u0441\u043E\u0446\u0456\u0430\u043B\u044C\u043D\u0435, \u043D\u0430\u0443\u043A\u043E\u0432\u0435, \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u043D\u0435, \u0441\u0443\u0441\u043F\u0456\u043B\u044C\u043D\u0435 \u0436\u0438\u0442\u0442\u044F \u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0456 \u0442\u0430 \u0437\u0430 \u043A\u043E\u0440\u0434\u043E\u043D\u043E\u043C.'
    publisher             = '\u041C\u0456\u043D\u0456\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043E \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u0438 \u0442\u0430 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u043E\u0457 \u043F\u043E\u043B\u0456\u0442\u0438\u043A\u0438 \u0423\u043A\u0440\u0430\u0457\u043D\u0438'
    category              = 'newspaper'
    cover_url = u'https://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Logo_ukr_%281%29.svg/2560px-Logo_ukr_%281%29.svg.png'
    language              = 'uk'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 2
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('\u041E\u0441\u0442\u0430\u043D\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.ukrinform.ua/rss/block-lastnews'),
        ('\u0412\u0456\u0439\u043D\u0430', 'https://www.ukrinform.ua/rss/rubric-ato'),
        ('#UA\u0440\u0430\u0437\u043E\u043C', 'https://www.ukrinform.ua/rss/rubric-uarazom'),
        ('\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430', 'https://www.ukrinform.ua/rss/rubric-polytics'),
        ('\u0415\u043A\u043E\u043D\u043E\u043C\u0456\u043A\u0430', 'https://www.ukrinform.ua/rss/rubric-economy'),
        ('\u0421\u0432\u0456\u0442', 'https://www.ukrinform.ua/rss/rubric-world'),
        ('\u0421\u0443c\u043F\u0456\u043B\u044Cc\u0442\u0432\u043E', 'https://www.ukrinform.ua/rss/rubric-society'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://www.ukrinform.ua/rss/rubric-culture'),
        ('\u0420\u0435\u0433\u0456\u043E\u043D\u0438', 'https://www.ukrinform.ua/rss/rubric-regions'),
        ('\u041A\u0438\u0457\u0432', 'https://www.ukrinform.ua/rss/rubric-kyiv'),
        ('\u041A\u0440\u0438\u043C', 'https://www.ukrinform.ua/rss/rubric-crimea'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://www.ukrinform.ua/rss/rubric-sports'),
        ('\u0414\u0456\u0430c\u043F\u043E\u0440\u0430', 'https://www.ukrinform.ua/rss/rubric-diaspora'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0456\u0457', 'https://www.ukrinform.ua/rss/rubric-technology'),
    ]

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = '\u0423\u043A\u0440\u0438\u043D\u0444\u043E\u0440\u043C'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u0435 \u0433\u043E\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0435 \u043D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E, \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043E \u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0439, \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0439, \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0439, \u043D\u0430\u0443\u0447\u043D\u043E\u0439, \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u043D\u043E\u0439, \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0439 \u0436\u0438\u0437\u043D\u0438 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435 \u0438 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043E\u043C.'
    publisher             = '\u041C\u0438\u043D\u0438\u0441\u0442\u0435\u0440\u0441\u0442\u0432\u043E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0438 \u0423\u043A\u0440\u0430\u0438\u043D\u044B'
    category              = 'newspaper'
    cover_url = u'https://www.ukrinform.ru/img/logo_rus.svg'
    language              = 'ru_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 3
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.ukrinform.ru/rss/block-lastnews'),
        ('\u0412\u043E\u0439\u043D\u0430', 'https://www.ukrinform.ru/rss/rubric-ato'),
        ('#UA\u0440\u0430\u0437\u043E\u043C', 'https://www.ukrinform.ru/rss/rubric-uarazom'),
        ('\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://www.ukrinform.ru/rss/rubric-polytics'),
        ('\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430', 'https://www.ukrinform.ru/rss/rubric-economy'),
        ('\u041C\u0438\u0440', 'https://www.ukrinform.ru/rss/rubric-world'),
        ('\u041E\u0431\u0449\u0435c\u0442\u0432\u043E', 'https://www.ukrinform.ru/rss/rubric-society'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://www.ukrinform.ru/rss/rubric-culture'),
        ('\u0420\u0435\u0433\u0438\u043E\u043D\u044B', 'https://www.ukrinform.ru/rss/rubric-regions'),
        ('\u041A\u0438\u0435\u0432', 'https://www.ukrinform.ru/rss/rubric-kyiv'),
        ('\u041A\u0440\u044B\u043C', 'https://www.ukrinform.ru/rss/rubric-crimea'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://www.ukrinform.ru/rss/rubric-sports'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://www.ukrinform.ru/rss/rubric-technology'),
    ]

English version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = 'UkrInform (English)'
    __author__            = 'bugmen00t'
    description           = 'State information and news agency of Ukraine.'
    publisher             = 'Ministry of Culture and Information Policy of Ukraine'
    category              = 'newspaper'
    cover_url = u'https://static.ukrinform.com/photos/2022_05/thumb_files/630_360_1651819943-560.jpg'
    language              = 'en_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('Latest news', 'https://www.ukrinform.net/rss/block-lastnews'),
        ('War', 'https://www.ukrinform.net/rss/rubric-ato'),
        ('Politics', 'https://www.ukrinform.net/rss/rubric-polytics'),
        ('Economy', 'https://www.ukrinform.net/rss/rubric-economy'),
        ('Defense', 'https://www.ukrinform.net/rss/rubric-defense'),
        ('Society and Culture', 'https://www.ukrinform.net/rss/rubric-society'),
        ('Sports', 'https://www.ukrinform.net/rss/rubric-sports'),
        ('Crime', 'https://www.ukrinform.net/rss/rubric-crime'),
        ('Accidents and Emergencies', 'https://www.ukrinform.net/rss/rubric-emergencies')
    ]

Versión en Español:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = 'UkrInform (Espa\u00F1ol)'
    __author__            = 'bugmen00t'
    description           = 'Agencia de noticias nacional de Ucrania, fuente de informaci\u00F3n sobre la vida pol\u00EDtica, econ\u00F3mica, social, cient\u00EDfica, cultural y p\u00FAblica en Ucrania y en el extranjero.'
    publisher             = 'Ministerio de Cultura y Pol\u00EDtica de Informaci\u00F3n de Ucrania'
    category              = 'newspaper'
    cover_url = u'https://static.ukrinform.com/photos/2022_05/thumb_files/630_360_1651819943-560.jpg'
    language              = 'es_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('\u00DAltimas noticias', 'https://www.ukrinform.es/rss/block-lastnews'),
        ('Guerra', 'https://www.ukrinform.es/rss/rubric-ato'),
        ('Pol\u00EDtica', 'https://www.ukrinform.es/rss/rubric-polytics'),
        ('Econom\u00EDa', 'https://www.ukrinform.es/rss/rubric-economy'),
        ('Defensa', 'https://www.ukrinform.es/rss/rubric-defense'),
        ('Sociedad y Cultura', 'https://www.ukrinform.es/rss/rubric-society'),
        ('Deportes', 'https://www.ukrinform.es/rss/rubric-sports'),
        ('Crimen', 'https://www.ukrinform.es/rss/rubric-crime'),
        ('Desastres y emergencias', 'https://www.ukrinform.es/rss/rubric-emergencies')
    ]

In deutscher Sprache:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = 'UkrInform (Deutsch)'
    __author__            = 'bugmen00t'
    description           = 'Nationale Nachrichtenagentur der Ukraine, eine Informationsquelle \u00FCber das politische, wirtschaftliche, soziale, wissenschaftliche, kulturelle und \u00F6ffentliche Leben in der Ukraine und der Welt.'
    publisher             = 'Ministerium f\u00FCr Kultur und Informationspolitik der Ukraine'
    category              = 'newspaper'
    cover_url = u'https://static.ukrinform.com/photos/2022_05/thumb_files/630_360_1651819943-560.jpg'
    language              = 'de_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('Aktuelle Nachrichten', 'https://www.ukrinform.de/rss/block-lastnews'),
        ('Krieg', 'https://www.ukrinform.de/rss/rubric-ato'),
        ('Politik', 'https://www.ukrinform.de/rss/rubric-polytics'),
        ('Wirtschaft', 'https://www.ukrinform.de/rss/rubric-economy'),
        ('Milit\u00E4r', 'https://www.ukrinform.de/rss/rubric-defense'),
        ('Gesellschaft und Kultur', 'https://www.ukrinform.de/rss/rubric-society'),
        ('Sport', 'https://www.ukrinform.de/rss/rubric-sports'),
        ('Kriminalit\u00E4t', 'https://www.ukrinform.de/rss/rubric-crime'),
        ('Notstand und Notf\u00E4lle', 'https://www.ukrinform.de/rss/rubric-emergencies')
    ]

Version en français:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = 'UkrInform (Fran\u00E7ais)'
    __author__            = 'bugmen00t'
    description           = 'Agence de presse nationale de l\u0027Ukraine. C\u2019est une source d\u0027informations sur la vie politique, \u00E9conomique, scientifique, culturelle et sociale en Ukraine et \u00E0 l\u0027\u00E9tranger.'
    publisher             = 'Minist\u00E8re de la culture et de la politique d\u0027information de l\u0027Ukraine'
    category              = 'newspaper'
    cover_url = u'https://static.ukrinform.com/photos/2022_05/thumb_files/630_360_1651819943-560.jpg'
    language              = 'fr_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('Derni\u00E8res infos', 'https://www.ukrinform.fr/rss/block-lastnews'),
        ('Guerre', 'https://www.ukrinform.fr/rss/rubric-ato'),
        ('Politique', 'https://www.ukrinform.fr/rss/rubric-polytics'),
        ('\u00C9conomie', 'https://www.ukrinform.fr/rss/rubric-economy'),
        ('D\u00E9fense', 'https://www.ukrinform.fr/rss/rubric-defense'),
        ('Soci\u00E9t\u00E9 et culture', 'https://www.ukrinform.fr/rss/rubric-society'),
        ('Sport', 'https://www.ukrinform.fr/rss/rubric-sports'),
        ('Criminalit\u00E9', 'https://www.ukrinform.fr/rss/rubric-crime'),
        ('Accidents', 'https://www.ukrinform.fr/rss/rubric-emergencies')
    ]

日本語:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = '\u30A6\u30AF\u30EB\u30A4\u30F3\u30D5\u30A9\u30EB\u30E0\uFF08UkrInform\uFF09'
    __author__            = 'bugmen00t'
    description           = '\u30A6\u30AF\u30E9\u30A4\u30CA\u3067\u552F\u4E00\u306E\u56FD\u55B6\u901A\u4FE1\u793E\u3067\u3059\u3001\u56FD\u5185\u6700\u5927\u306E\u5730\u65B9\u652F\u90E8\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u3068\u8907\u6570\u306E\u5916\u56FD\u652F\u5C40\u3092\u6709\u3057\u3066\u3044\u307E\u3059\u3002'
    publisher             = '\u30A6\u30AF\u30E9\u30A4\u30CA\u6587\u5316\u30FB\u60C5\u5831\u653F\u7B56\u7701'
    category              = 'newspaper'
    cover_url = u'https://static.ukrinform.com/photos/2022_05/thumb_files/630_360_1651819943-560.jpg'
    language              = 'ja_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('\u65B0\u7740\u30CB\u30E5\u30FC\u30B9', 'https://www.ukrinform.jp/rss/block-lastnews'),
        ('\u6226\u4E89', 'https://www.ukrinform.jp/rss/rubric-ato'),
        ('\u653F\u6CBB', 'https://www.ukrinform.jp/rss/rubric-polytics'),
        ('\u7D4C\u6E08', 'https://www.ukrinform.jp/rss/rubric-economy'),
        ('\u9632\u885B', 'https://www.ukrinform.jp/rss/rubric-defense'),
        ('\u793E\u4F1A\u30FB\u6587\u5316', 'https://www.ukrinform.jp/rss/rubric-society'),
        ('\u30B9\u30DD\u30FC\u30C4', 'https://www.ukrinform.jp/rss/rubric-sports'),
        ('\u72AF\u7F6A', 'https://www.ukrinform.jp/rss/rubric-crime'),
        ('\u4E8B\u6545\u30FB\u7DCA\u6025\u4E8B\u614B', 'https://www.ukrinform.jp/rss/rubric-emergencies')
    ]

Wersja polska:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UkrInform(BasicNewsRecipe):
    title          		  = 'UkrInform (polska)'
    __author__            = 'bugmen00t'
    description           = 'Krajowa agencja informacyjna Ukrainy, \u017Ar\u00F3d\u0142o informacji o \u017Cyciu politycznym, gospodarczym, spo\u0142ecznym, naukowym, kulturalnym i spo\u0142ecznym na Ukrainie i za granic\u0105.'
    publisher             = 'Ministerstwo Kultury i Polityki Informacyjnej Ukrainy'
    category              = 'newspaper'
    cover_url = u'https://static.ukrinform.com/photos/2022_05/thumb_files/630_360_1651819943-560.jpg'
    language              = 'pl_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='aside'),
        dict(name='img', attrs={'class': 'pixel'}),
        dict(name='section', attrs={'class': 'read'}),
        dict(name='div', attrs={'data-name': 'int_hidden'})
        ] 

    feeds = [
        ('Najnowsze wiadomo\u015Bci', 'https://www.ukrinform.pl/rss/block-lastnews'),
        ('Wojna', 'https://www.ukrinform.pl/rss/rubric-ato'),
        ('Polityka', 'https://www.ukrinform.pl/rss/rubric-polytics'),
        ('Gospodarka', 'https://www.ukrinform.pl/rss/rubric-economy'),
        ('Obrona', 'https://www.ukrinform.pl/rss/rubric-defense'),
        ('Spo\u0142ecze\u0144stwo i kultura', 'https://www.ukrinform.pl/rss/rubric-society'),
        ('Sport', 'https://www.ukrinform.pl/rss/rubric-sports'),
        ('Wydarzenia kryminalne', 'https://www.ukrinform.pl/rss/rubric-crime'),
        ('Zdarzenia i bezpiecze\u0144stwo', 'https://www.ukrinform.pl/rss/rubric-emergencies')
    ]
Attached Images
        
Attached Files
File Type: recipe ukrinform_uk.recipe (3.7 KB, 157 views)
File Type: recipe ukrinform_ru.recipe (3.6 KB, 152 views)
File Type: recipe ukrinform_en.recipe (1.8 KB, 156 views)
File Type: recipe ukrinform_es.recipe (2.0 KB, 144 views)
File Type: recipe ukrinform_de.recipe (2.0 KB, 155 views)
File Type: recipe ukrinform_fr.recipe (2.0 KB, 158 views)
File Type: recipe ukrinform_ja.recipe (2.2 KB, 158 views)
File Type: recipe ukrinform_pl.recipe (2.0 KB, 155 views)

Last edited by bugmen00t; 08-01-2022 at 08:13 AM.
bugmen00t is offline   Reply With Quote
Old 08-02-2022, 07:03 AM   #19
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 07 of ??)

Keep on going, this time Ukrainian sources.

NEW MULTI-LANGUAGE RECIPES (OF UKRAINIAN SOURCES)


Освіта.ua: education in Ukraine and abroad. Favicon.
Fixes needed:
  • No images in articles
Ukrainain version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Osvita(BasicNewsRecipe):
    title          		  = '\u041E\u0441\u0432\u0456\u0442\u0430.ua'
    __author__            = 'bugmen00t'
    description           = '\u0423\u0441\u0435 \u043F\u0440\u043E \u043E\u0441\u0432\u0456\u0442\u0443 \u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0456 \u0442\u0430 \u0437\u0430 \u043A\u043E\u0440\u0434\u043E\u043D\u043E\u043C: \u0442\u0435\u043C\u0430\u0442\u0438\u0447\u043D\u0438\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u043F\u0440\u0438\u0441\u0432\u044F\u0447\u0435\u043D\u0438\u0439 \u043E\u0441\u0432\u0456\u0442\u0456 \u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0456 \u0442\u0430 \u0437\u0430 \u0457\u0457 \u043C\u0435\u0436\u0430\u043C\u0438, \u0454 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u0438\u043C \u0434\u0436\u0435\u0440\u0435\u043B\u043E\u043C \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0457 \u0443 \u0446\u0456\u0439 \u0441\u0444\u0435\u0440\u0456.'
    publisher             = '\u041E\u0441\u0432\u0456\u0442\u0430.ua'
    category              = 'blog'
    cover_url = u'http://osvita.ua/doc/i/Contacts-logo.jpg'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='div', attrs={'id': 'body'})
    
    remove_tags_after = dict(name='div', attrs={'id': 'body'})

    remove_tags =   [
# Unable to fetch images, removing them completely
        dict(name='img'),
        dict(name='p', attrs={'class': 'info'})
        ] 


    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://osvita.ua/rss/')
    ]

    def print_version(self, url):
        return url + 'print'

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Osvita(BasicNewsRecipe):
    title          		  = '\u041E\u0441\u0432\u0456\u0442\u0430.ua'
    __author__            = 'bugmen00t'
    description           = '\u0422\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u043F\u043E\u0441\u0432\u044F\u0449\u0451\u043D\u043D\u044B\u0439 \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u044E \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435 \u0438 \u0437\u0430 \u0440\u0443\u0431\u0435\u0436\u043E\u043C.'
    publisher             = '\u041E\u0441\u0432\u0456\u0442\u0430.ua'
    category              = 'blog'
    cover_url = u'http://osvita.ua/doc/i/Contacts-logo.jpg'
    language              = 'ru_uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='div', attrs={'id': 'body'})
    
    remove_tags_after = dict(name='div', attrs={'id': 'body'})

    remove_tags =   [
# Unable to fetch images, removing them completely
        dict(name='img'),
        dict(name='p', attrs={'class': 'info'})
        ] 


    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://ru.osvita.ua/rss/')
    ]

    def print_version(self, url):
        return url + 'print'


ЛІГА.net: business news from Ukraine. Favicon.

Ukrainian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class LigaNet(BasicNewsRecipe):
    title          		  = '\u041B\u0406\u0413\u0410.net (UA)'
    __author__            = 'bugmen00t'
    description           = '\u0414\u0456\u043B\u043E\u0432\u0438\u0439 \u043D\u043E\u0432\u0438\u043D\u043D\u0438\u0439 \u043F\u043E\u0440\u0442\u0430\u043B'
    publisher             = 'Ligamedia'
    category              = 'blog'
    cover_url = u'https://www.liga.net/design/images/logo_liga.png'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='div', attrs={'id': 'news-text'})

    remove_tags =   [
        dict(name='footer'),
        dict(name='div', attrs={'class': 'more-link red'}),
        dict(name='div', attrs={'class': 'read-too'}),
        dict(name='div', attrs={'class': 'to-send-row'}),
        dict(name='div', attrs={'class': 'hint-row'}),
        dict(name='div', attrs={'class': 'chronicle-top-eye'}),
        dict(name='div', attrs={'class': 'chronicle-top-comm comm-btns'}),
        dict(name='div', attrs={'class': 'chronicle-news m-t-30'}),
        dict(name='div', attrs={'class': 'right-inner-content'}),
        dict(name='div', attrs={'class': 'right-part'}),
        dict(name='div', attrs={'class': 'hreflang-link'}),
        dict(name='div', attrs={'class': 'vakansii-block-article'}),
        dict(name='div', attrs={'class': 'col-12 col-md p-side-10 sp-card-paddings'}),
        dict(name='div', attrs={'class': 'social-shares d-flex justify-content-center'}),
        dict(name='div', attrs={'class': 'social-shares d-block'}),
        dict(name='div', attrs={'class': 'social-likes clearfix hidden-1280 '}),
        dict(name='div', attrs={'class': 'soc-item comm-btns'}),
        dict(name='div', attrs={'class': 'soc-buttons'}),
        dict(name='div', attrs={'class': 'warning m-t-20 d-none d-md-none d-lg-block'}),
        dict(name='div', attrs={'id': 'news-list-right'}),
        dict(name='div', attrs={'id': 'premium_mobile'}),
        dict(name='div', attrs={'id': 'premium2_mobile'}),
        dict(name='div', attrs={'class': 'marketing-block'}),
        dict(name='span', attrs={'class': 'social-likes__button'}),
        dict(name='div', attrs={'class': 'marketing-block'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0433\u043E\u043B\u043E\u0432\u043D\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://www.liga.net/newsua/top/rss.xml'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0432\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://www.liga.net/newsua/all/rss.xml')       
    ]

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class LigaNet(BasicNewsRecipe):
    title          		  = '\u041B\u0406\u0413\u0410.net'
    __author__            = 'bugmen00t'
    description           = '\u0414\u0456\u043B\u043E\u0432\u0438\u0439 \u043D\u043E\u0432\u0438\u043D\u043D\u0438\u0439 \u043F\u043E\u0440\u0442\u0430\u043B'
    publisher             = 'Ligamedia'
    category              = 'blog'
    cover_url = u'https://www.liga.net/design/images/logo_liga.png'
    language              = 'ru_UK'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='div', attrs={'id': 'news-text'})

    remove_tags =   [
        dict(name='footer'),
        dict(name='div', attrs={'class': 'more-link red'}),
        dict(name='div', attrs={'class': 'read-too'}),
        dict(name='div', attrs={'class': 'to-send-row'}),
        dict(name='div', attrs={'class': 'hint-row'}),
        dict(name='div', attrs={'class': 'chronicle-top-eye'}),
        dict(name='div', attrs={'class': 'chronicle-top-comm comm-btns'}),
        dict(name='div', attrs={'class': 'chronicle-news m-t-30'}),
        dict(name='div', attrs={'class': 'right-inner-content'}),
        dict(name='div', attrs={'class': 'right-part'}),
        dict(name='div', attrs={'class': 'hreflang-link'}),
        dict(name='div', attrs={'class': 'vakansii-block-article'}),
        dict(name='div', attrs={'class': 'col-12 col-md p-side-10 sp-card-paddings'}),
        dict(name='div', attrs={'class': 'social-shares d-flex justify-content-center'}),
        dict(name='div', attrs={'class': 'social-shares d-block'}),
        dict(name='div', attrs={'class': 'social-likes clearfix hidden-1280 '}),
        dict(name='div', attrs={'class': 'soc-item comm-btns'}),
        dict(name='div', attrs={'class': 'soc-buttons'}),
        dict(name='div', attrs={'class': 'warning m-t-20 d-none d-md-none d-lg-block'}),
        dict(name='div', attrs={'id': 'news-list-right'}),
        dict(name='div', attrs={'id': 'premium_mobile'}),
        dict(name='div', attrs={'id': 'premium2_mobile'}),
        dict(name='div', attrs={'class': 'marketing-block'}),
        dict(name='span', attrs={'class': 'social-likes__button'}),
        dict(name='div', attrs={'class': 'marketing-block'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/news/top/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.liga.net/news/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0441\u0442\u0430\u0442\u044C\u0438', 'https://www.liga.net/news/articles/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0438\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://www.liga.net/news/interview/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u043C\u043D\u0435\u043D\u0438\u044F', 'https://www.liga.net/news/opinion/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0444\u043E\u0442\u043E\u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/news/photo/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://www.liga.net/news/politics/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430', 'https://www.liga.net/news/economics/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u043E', 'https://www.liga.net/news/society/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u043C\u0438\u0440', 'https://www.liga.net/news/world/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0441\u0442\u043E\u043B\u0438\u0446\u0430', 'https://www.liga.net/news/capital/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0441\u043F\u043E\u0440\u0442', 'https://www.liga.net/news/sport/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u0437\u0434\u043E\u0440\u043E\u0432\u044C\u0435', 'https://www.liga.net/news/health/rss.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438: \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://www.liga.net/news/culture/rss.xml'),
        ('\u0412\u0441\u0435 \u043C\u043D\u0435\u043D\u0438\u044F', 'https://www.liga.net/opinion/rss.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441: \u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/biz/top/rss.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441: \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.liga.net/biz/news/rss.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441: \u0441\u0442\u0430\u0442\u044C\u0438', 'https://www.liga.net/biz/articles/rss.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441: \u0438\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://www.liga.net/biz/interview/rss.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441: \u043C\u043D\u0435\u043D\u0438\u044F', 'https://www.liga.net/biz/opinion/rss.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441: \u0444\u043E\u0442\u043E\u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/biz/photo/rss.xml'),
        ('\u0424\u0438\u043D\u0430\u043D\u0441\u044B: \u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/fin/export/top.xml'),
        ('\u0424\u0438\u043D\u0430\u043D\u0441\u044B: \u043C\u043D\u0435\u043D\u0438\u044F', 'https://www.liga.net/fin/opinion/rss.xml'),
        ('\u0424\u0438\u043D\u0430\u043D\u0441\u044B: \u0431\u0430\u043D\u043A\u0438', 'https://www.liga.net/fin/export/bank.xml'),
        ('\u0424\u0438\u043D\u0430\u043D\u0441\u044B: \u0441\u0442\u0440\u0430\u0445\u043E\u0432\u0430\u043D\u0438\u0435', 'https://www.liga.net/fin/export/insurance.xml'),
        ('\u0424\u0438\u043D\u0430\u043D\u0441\u044B: \u043A\u0440\u0438\u043F\u0442\u043E\u044D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430', 'https://www.liga.net/fin/crypto/rss.xml'),
        ('\u0424\u0438\u043D\u0430\u043D\u0441\u044B: \u0444\u043E\u043D\u0434\u044B', 'https://www.liga.net/fin/export/funds.xml'),
        ('Tech: \u0433\u043B\u0430\u0432\u043D\u044B\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/tech/top/rss.xml'),
        ('Tech: \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://www.liga.net/tech/technology/rss.xml'),
        ('Tech: \u0442\u0435\u043B\u0435\u043A\u043E\u043C', 'https://www.liga.net/tech/telecom/rss.xml'),
        ('Tech: \u0433\u0430\u0434\u0436\u0435\u0442\u044B', 'https://www.liga.net/tech/gadgets/rss.xml'),
        ('Tech: \u0441\u0432\u043E\u0439 \u0431\u0438\u0437\u043D\u0435\u0441', 'https://www.liga.net/tech/own-business/rss.xml'),
        ('Tech: \u0431\u0430\u0442\u0442\u043B\u044B', 'https://www.liga.net/tech/battles/rss.xml'),
        ('\u0411\u043B\u043E\u0433\u0438: \u0432\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.liga.net/rss/blog.xml')
    ]


UNN: Ukrainian news agency, with emphasis on politics, social problems and economics. Favicon.

Ukrainian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UNN(BasicNewsRecipe):
    title          	  = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0456 \u041D\u0430\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 \u041D\u043E\u0432\u0438\u043D\u0438'
    __author__            = 'bugmen00t'
    description           = '\u0423\u041D\u041D: \u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0456 \u041D\u0430\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 \u041D\u043E\u0432\u0438\u043D\u0438'
    publisher             = '\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u00AB\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0456 \u041D\u0430\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 \u041D\u043E\u0432\u0438\u043D\u0438\u00BB'
    category              = 'newspaper'
    cover_url = u'https://pechersk.kyivcity.gov.ua/done_img/b/11289.jpg'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 50

    remove_tags_before = dict(name='span', attrs={'itemprop': 'datePublished'})
    
    remove_tags_after = dict(name='div', attrs={'class': 'b-news-full'})

    remove_tags =   [
        dict(name='span', attrs={'class': 'view'}),
        dict(name='div', attrs={'class': 'b-news-tags'}),
        dict(name='div', attrs={'class': 'b-news-source'}),
        dict(name='div', attrs={'class': 'b-news-footer'}),
        dict(name='div', attrs={'class': 'b-notice-msg'})
        ] 

    feeds = [
        ('\u041E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.unn.com.ua/rss/news_uk.xml'),
        ('\u041F\u0443\u0431\u043B\u0456\u043A\u0430\u0446\u0456\u0457', 'https://www.unn.com.ua/rss/publication_uk.xml'),
        ('\u0415\u043A\u0441\u043A\u043B\u044E\u0437\u0438\u0432\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.unn.com.ua/rss/exclusive_uk.xml'),
        ('\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430', 'https://www.unn.com.ua/rss/news_politics_uk.xml'),
        ('\u0415\u043A\u043E\u043D\u043E\u043C\u0456\u043A\u0430', 'https://www.unn.com.ua/rss/news_economics_uk.xml'),
        ('\u0410\u0433\u0440\u043E\u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.unn.com.ua/rss/news_agronews_uk.xml'),
        ('\u041E\u0434\u0435\u0441\u0430', 'https://www.unn.com.ua/rss/news_odesa_uk.xml'),
        ('\u041A\u0438\u0457\u0432', 'https://www.unn.com.ua/rss/news_kiev_uk.xml'),
        ('COVID-19', 'https://www.unn.com.ua/rss/news_covid19_uk.xml'),
        ('\u0421\u0443\u0441\u043F\u0456\u043B\u044C\u0441\u0442\u0432\u043E', 'https://www.unn.com.ua/rss/news_society_uk.xml'),
        ('\u0417\u0434\u043E\u0440\u043E\u0432\u0027\u044F', 'https://www.unn.com.ua/rss/news_health_uk.xml'),
        ('\u0412\u0456\u0439\u043D\u0430', 'https://www.unn.com.ua/rss/news_war_uk.xml'),
        ('\u041A\u0440\u0438\u043C\u0456\u043D\u0430\u043B \u0442\u0430 \u041D\u041F', 'https://www.unn.com.ua/rss/news_criminal_uk.xml'),
        ('\u0423\u041D\u041D Lite', 'https://www.unn.com.ua/rss/news_lite_uk.xml'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438 \u0421\u0432\u0456\u0442\u0443', 'https://www.unn.com.ua/rss/news_world_uk.xml'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0456\u0457', 'https://www.unn.com.ua/rss/news_tech_uk.xml'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://www.unn.com.ua/rss/news_sport_uk.xml'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://www.unn.com.ua/rss/news_culture_uk.xml'),
        ('\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0456\u0430', 'https://www.unn.com.ua/rss/news_media_uk.xml')
    ]
    
    def print_version(self, url):
        return url + '?_part=main&_print=1'

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class UNN(BasicNewsRecipe):
    title          	  = '\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u0435 \u041D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u041D\u043E\u0432\u043E\u0441\u0442\u0438'
    __author__            = 'bugmen00t'
    description           = '\u0423\u041D\u041D: \u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u0435 \u041D\u0430\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 \u041D\u043E\u0432\u043E\u0441\u0442\u0438'
    publisher             = '\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u00AB\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0456 \u041D\u0430\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 \u041D\u043E\u0432\u0438\u043D\u0438\u00BB'
    category              = 'newspaper'
    cover_url = u'https://argentum.ua/uploads/portfolio/2012/c043e0e18fd9f89df5fb421ab28cf609197011c2.png'
    language              = 'ru_UK'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 50

    remove_tags_before = dict(name='span', attrs={'itemprop': 'datePublished'})
    
    remove_tags_after = dict(name='div', attrs={'class': 'b-news-full'})

    remove_tags =   [
        dict(name='span', attrs={'class': 'view'}),
        dict(name='div', attrs={'class': 'b-news-tags'}),
        dict(name='div', attrs={'class': 'b-news-source'}),
        dict(name='div', attrs={'class': 'b-news-footer'}),
        dict(name='div', attrs={'class': 'b-notice-msg'})
        ] 

    feeds = [
        ('\u041E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.unn.com.ua/rss/news_ru.xml'),
        ('\u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438', 'https://www.unn.com.ua/rss/publication_ru.xml'),
        ('\u042D\u043A\u0441\u043A\u043B\u044E\u0437\u0438\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.unn.com.ua/rss/exclusive_ru.xml'),
        ('\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://www.unn.com.ua/rss/news_politics_ru.xml'),
        ('\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430', 'https://www.unn.com.ua/rss/news_economics_ru.xml'),
        ('\u0410\u0433\u0440\u043E\u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.unn.com.ua/rss/news_agronews_ru.xml'),
        ('\u041E\u0434\u0435\u0441\u0441\u0430', 'https://www.unn.com.ua/rss/news_odesa_ru.xml'),
        ('\u041A\u0438\u0435\u0432', 'https://www.unn.com.ua/rss/news_kiev_ru.xml'),
        ('COVID-19', 'https://www.unn.com.ua/rss/news_covid19_ru.xml'),
        ('\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u043E', 'https://www.unn.com.ua/rss/news_society_ru.xml'),
        ('\u0417\u0434\u043E\u0440\u043E\u0432\u044C\u0435', 'https://www.unn.com.ua/rss/news_health_ru.xml'),
        ('\u0412\u043E\u0439\u043D\u0430', 'https://www.unn.com.ua/rss/news_war_ru.xml'),
        ('\u041A\u0440\u0438\u043C\u0438\u043D\u0430\u043B \u0438 \u0427\u041F', 'https://www.unn.com.ua/rss/news_criminal_ru.xml'),
        ('\u0423\u041D\u041D Lite', 'https://www.unn.com.ua/rss/news_lite_ru.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u041C\u0438\u0440\u0430', 'https://www.unn.com.ua/rss/news_world_ru.xml'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://www.unn.com.ua/rss/news_tech_ru.xml'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://www.unn.com.ua/rss/news_sport_ru.xml'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://www.unn.com.ua/rss/news_culture_ru.xml'),
        ('\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0430', 'https://www.unn.com.ua/rss/news_media_ru.xml')
    ]
    
    def print_version(self, url):
        return url + '?_part=main&_print=1'
Attached Images
      
Attached Files
File Type: recipe osvitaua.recipe (1.9 KB, 157 views)
File Type: recipe osvitaua_ru.recipe (1.5 KB, 151 views)
File Type: recipe liganet_ua.recipe (2.9 KB, 162 views)
File Type: recipe liganet_ru.recipe (7.5 KB, 151 views)
File Type: recipe unn_ua.recipe (4.0 KB, 154 views)
File Type: recipe unn_ru.recipe (4.1 KB, 155 views)
bugmen00t is offline   Reply With Quote
Old 08-04-2022, 07:24 AM   #20
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 08 of ??)

NEW RUSSIAN SOURCES

Тайга.инфо: Siberian regional news portal. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Tayga(BasicNewsRecipe):
    title          	  = '\u0422\u0430\u0439\u0433\u0430.\u0438\u043D\u0444\u043E'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u0430\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u043E \u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0438 \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0445 \u0421\u0438\u0431\u0438\u0440\u0441\u043A\u043E\u0433\u043E \u0444\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u043E\u043A\u0440\u0443\u0433\u0430.'
    publisher             = '\u0422\u0430\u0439\u0433\u0430.\u0438\u043D\u0444\u043E'
    category              = 'blog'
    cover_url = u'https://tayga.info/design/logo.svg'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 60

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'news_content'})

    remove_tags =   [
        dict(name='p', attrs={'class': 't_left'})
        ] 

    feeds = [
        ('\u0422\u0430\u0439\u0433\u0430.\u0438\u043D\u0444\u043E', 'https://tayga.info/rss')
        ]

Новая вкладка: blog about life in Russian regions. Favicon.
Fixes needed:
  • Some images are missing in the articles with complex formatting
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class NewTab(BasicNewsRecipe):
    title          	  = '\u041D\u043E\u0432\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430'
    __author__            = 'bugmen00t'
    description           = '\u041F\u043B\u043E\u0449\u0430\u0434\u043A\u0430 \u0434\u043B\u044F \u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438 \u0440\u0435\u043F\u043E\u0440\u0442\u0430\u0436\u0435\u0439 \u0438 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043E \u0442\u043E\u043C, \u043A\u0430\u043A \u043C\u0435\u043D\u044F\u044E\u0442\u0441\u044F \u0440\u0435\u0433\u0438\u043E\u043D\u044B \u0420\u043E\u0441\u0441\u0438\u0438 \u043F\u043E\u0441\u043B\u0435 24 \u0444\u0435\u0432\u0440\u0430\u043B\u044F 2022 \u0433\u043E\u0434\u0430.'
    publisher             = '\u041C\u0438\u0445\u0430\u0438\u043B \u0414\u0430\u043D\u0438\u043B\u043E\u0432\u0438\u0447'
    category              = 'blog'
    cover_url = u'https://static.tildacdn.com/tild3765-3961-4337-b366-323437626331/thenewtab-sn.jpg'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags =   [
        dict(name='div', attrs={'class': 't-popup'}),
        dict(name='div', attrs={'class': 't185'}),
        dict(name='div', attrs={'class': 't403'}),
        dict(name='div', attrs={'class': 't404'}),
        dict(name='div', attrs={'class': 't134'}),
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430', 'https://thenewtab.io/rss.xml')
        ]
        
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-original': True}):
            img['src'] = img['data-original']
        return soup

Сноб: bimonthly magazine about art, culture, science and society. Favicon.
Fixes needed:
  • No lead image in the articles
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Snob(BasicNewsRecipe):
    title          	  = '\u0421\u043D\u043E\u0431'
    __author__            = 'bugmen00t'
    description           = '\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u043E\u043D\u043D\u043E\u0435, \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0435 \u0438 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0434\u043B\u044F \u043B\u044E\u0434\u0435\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0436\u0438\u0432\u0443\u0442 \u0432 \u0440\u0430\u0437\u043D\u044B\u0445 \u0441\u0442\u0440\u0430\u043D\u0430\u0445, \u0433\u043E\u0432\u043E\u0440\u044F\u0442 \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u044F\u0437\u044B\u043A\u0430\u0445, \u043D\u043E \u0434\u0443\u043C\u0430\u044E\u0442 \u043F\u043E-\u0440\u0443\u0441\u0441\u043A\u0438.'
    publisher             = '\u041E\u041E\u041E \u00AB\u0421\u043D\u043E\u0431 \u041C\u0435\u0434\u0438\u0430\u00BB'
    category              = 'magazine'
    cover_url = u'https://snob.ru/indoc/tilda/995317/images/tild3233-6631-4664-b663-353636373235__e3057a5fee932ada1aaf.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 5
    max_articles_per_feed = 50

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'entry__tags'}),
        dict(name='div', attrs={'class': 'entry__likes'})
        ] 

    feeds = [
        ('\u0421\u043D\u043E\u0431', 'https://snob.ru/rss/')
        ]
        
    def get_article_url(self, article):
        link = article.get('link', None)
            return link.split('?utm')[0]

Новый Калининград: regional news of Kaliningrad city and Kaliningrad district. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class NewKaliningrad(BasicNewsRecipe):
    title          	  = '\u041D\u043E\u0432\u044B\u0439 \u041A\u0430\u043B\u0438\u043D\u0438\u043D\u0433\u0440\u0430\u0434'
    __author__            = 'bugmen00t'
    description           = '\u0420\u0435\u0433\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u043F\u043E\u0440\u0442\u0430\u043B \u041A\u0430\u043B\u0438\u043D\u0438\u043D\u0433\u0440\u0430\u0434\u0441\u043A\u043E\u0439 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u0438 \u0433\u043E\u0440\u043E\u0434\u0430 \u041A\u0430\u043B\u0438\u043D\u0438\u043D\u0433\u0440\u0430\u0434\u0430.'
    publisher             = '\u0417\u0410\u041E "\u0422\u0432\u0438\u043A \u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433"'
    category              = 'news'
    cover_url = u'https://www.newkaliningrad.ru/images/logo.gif'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 3
    max_articles_per_feed = 100

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='div', attrs={'class': 'content'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'continue-box'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.newkaliningrad.ru/news/rss.xml')
    ]


NEW UKRAINIAN SOURCES

РБК-Украина: business and finances news agency. Favicon replacemet.
Fixes needed:
  • No images in articles
Ukrainian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class RBCUA(BasicNewsRecipe):
    title          		  = '\u0420\u0411\u041A-\u0423\u043A\u0440\u0430\u0457\u043D\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0435 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E.'
    publisher             = '\u0422\u041E\u0412 \u00AB\u042E\u0431\u0456\u0442\u0456 \u041C\u0435\u0434\u0456\u0430\u00BB'
    category              = 'news'
    cover_url = u'https://www.rbc.ua/static/img/r/b/rbc_pic_best_news_650x410_2_650x410_1_650x410_1_480x270.jpg'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 3
    max_articles_per_feed = 20

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='span', attrs={'class': 'lang-publication'}),
        dict(name='div', attrs={'class': 'share'}),
        dict(name='ins'),
        dict(name='div', attrs={'class': 'read-in-google'}),
        dict(name='div', attrs={'class': 'intext-tags'})
        ] 

    feeds = [
        ('\u0420\u0411\u041A', 'https://www.rbc.ua/static/rss/all.ukr.rss.xml')
    ]

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class RBCUA(BasicNewsRecipe):
    title          		  = '\u0420\u0411\u041A-\u0423\u043A\u0440\u0430\u0438\u043D\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E, \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u044E\u0449\u0435\u0435\u0441\u044F \u043D\u0430 \u0444\u0438\u043D\u0430\u043D\u0441\u043E\u0432\u044B\u0445, \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0438 \u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u0423\u043A\u0440\u0430\u0438\u043D\u044B.'
    publisher             = '\u041E\u041E\u041E \u00AB\u042E\u0431\u0438\u0442\u0438 \u041C\u0435\u0434\u0438\u0430\u00BB'
    category              = 'news'
    cover_url = u'https://www.rbc.ua/static/common/imgs/logo650.jpg'
    language              = 'ru_UK'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 3
    max_articles_per_feed = 20

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='span', attrs={'class': 'lang-publication'}),
        dict(name='div', attrs={'class': 'share'}),
        dict(name='ins'),
        dict(name='div', attrs={'class': 'read-in-google'}),
        dict(name='div', attrs={'class': 'intext-tags'})
        ] 

    feeds = [
        ('\u0420\u0411\u041A', 'https://www.rbc.ua/static/rss/all.rus.rss.xml')
    ]


НВ: information and news resource Favicon.
Fixes needed:
  • Broken layout in articles with complex text formatting
Ukrainian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class NV(BasicNewsRecipe):
    title          	  = '\u041D\u0412 (\u00AB\u041D\u043E\u0432\u0438\u0439 \u0427\u0430\u0441\u00BB)'
    __author__            = 'bugmen00t'
    description           = '\u0429\u043E\u0442\u0438\u0436\u043D\u0435\u0432\u0438\u0439 \u0441\u0443\u0441\u043F\u0456\u043B\u044C\u043D\u043E-\u043F\u043E\u043B\u0456\u0442\u0438\u0447\u043D\u0438\u0439 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u043E-\u043D\u043E\u0432\u0438\u043D\u043D\u0438\u0439 \u0441\u0430\u0439\u0442.'
    publisher             = '\u0422\u041E\u0412 \u00AB\u0412\u0438\u0434\u0430\u0432\u043D\u0438\u0447\u0438\u0439 \u0434\u0456\u043C \u00AB\u041C\u0435\u0434\u0456\u0430-\u0414\u041A\u00BB'
    category              = 'magazine'
    cover_url = u'https://static.nv.ua/shared/system/Article/posters/002/467/576/600x300/272ab80cd01e4022dcb4c691c9073e97.jpg'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 40

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'article__content__footer'}),
        dict(name='div', attrs={'class': 'article__head__additional_views'}),
        dict(name='div', attrs={'class': 'show_two_positions '}),
        dict(name='div', attrs={'class': 'media__also__news'}),
        dict(name='div', attrs={'class': 'media__also__news_link'}),
        dict(name='blockquote', attrs={'class': 'code'}),
        dict(name='section', attrs={'class': 'article-share'}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='footer'),
        dict(name='div', attrs={'class': 'longread_tags'}),
        dict(name='div', attrs={'class': 'col-md-6 col-lg-3'}),
        dict(name='div', attrs={'class': 'copyright'}),
        dict(name='div', attrs={'class': 'media__video'}),
        dict(name='div', attrs={'class': 'media__embed'})
        ] 

    feeds = [
        ('\u0412\u0441\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://nv.ua/ukr/rss/all.xml'),
        ('\u0423\u043A\u0440\u0430\u0457\u043D\u0430', 'https://nv.ua/ukr/rss/2283.xml'),
        ('\u0421\u0432\u0456\u0442', 'https://nv.ua/ukr/rss/2318.xml'),
        ('\u041F\u043E\u0433\u043B\u044F\u0434\u0438', 'https://nv.ua/ukr/rss/2671.xml'),
        ('\u041A\u0438\u0457\u0432', 'https://nv.ua/ukr/rss/108.xml'),
        ('\u0410\u0440\u0442', 'https://nv.ua/ukr/rss/52.xml'),
        ('\u0414\u043E\u0441\u044C\u0454', 'https://nv.ua/ukr/rss/230.xml'),
        ('\u0411\u0456\u0437\u043D\u0435\u0441', 'https://nv.ua/ukr/rss/2292.xml'),
        ('\u041B\u043E\u043D\u0433\u0440\u0456\u0434\u0438', 'https://nv.ua/ukr/rss/2790.xml'),
        ('\u041A\u0430\u0440\u0442\u043A\u0438', 'https://nv.ua/ukr/rss/48.xml'),
        ('\u0422\u0435\u0445\u043D\u043E', 'https://nv.ua/ukr/rss/2346.xml'),
        ('\u0420\u0435\u0433\u0456\u043E\u043D\u0438', 'https://nv.ua/ukr/rss/231.xml'),
        ('\u0410\u0432\u0442\u043E', 'https://nv.ua/ukr/rss/154.xml'),
        ('Life', 'https://nv.ua/ukr/rss/2325.xml'),
        ('\u0417\u0434\u043E\u0440\u043E\u0432\u0027\u044F', 'https://nv.ua/ukr/rss/90.xml'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://nv.ua/ukr/rss/2371.xml'),
        ('\u0410\u0437\u0430\u0440\u0442', 'https://nv.ua/ukr/rss/178.xml'),
        ('\u0428\u043E\u043F\u0456\u043D\u0433', 'https://nv.ua/ukr/rss/131.xml'),
        ('LOL', 'https://nv.ua/ukr/rss/2365.xml'),
        ('\u041F\u0440\u0438\u0445\u043E\u0432\u0430\u043D\u0438\u0439 \u0440\u043E\u0437\u0434\u0456\u043B', 'https://nv.ua/ukr/rss/118.xml'),
        ('\u0424\u041E\u0422\u041E', 'https://nv.ua/ukr/rss/2384.xml'),
        ('\u0420\u0430\u0434\u0456\u043E \u041D\u0412', 'https://nv.ua/ukr/rss/3050.xml'),
        ('BBC', 'https://nv.ua/ukr/rss/2836.xml'),
        ('\u0426\u0438\u0442\u0430\u0442\u0430 \u0434\u043D\u044F', 'https://nv.ua/ukr/rss/2672.xml'),
        ('\u0414\u043D\u0456\u043F\u0440\u043E', 'https://nv.ua/ukr/rss/232.xml'),
        ('\u041A\u0440\u0443\u043F\u043D\u0438\u043C \u043F\u043B\u0430\u043D\u043E\u043C', 'https://nv.ua/ukr/rss/2383.xml'),
        ('\u0411\u043B\u043E\u0433 \u041D\u0412', 'https://nv.ua/ukr/rss/225.xml'),
        ('\u041B\u044C\u0432\u0456\u0432', 'https://nv.ua/ukr/rss/233.xml'),
        ('\u041E\u0434\u0435\u0441\u0430', 'https://nv.ua/ukr/rss/234.xml'),
        ('\u0425\u0430\u0440\u043A\u0456\u0432', 'https://nv.ua/ukr/rss/235.xml'),
        ('\u0410\u043D\u0435\u043A\u0434\u043E\u0442\u0438', 'https://nv.ua/ukr/rss/2765.xml'),
        ('\u0415\u043A\u0441\u043A\u043B\u044E\u0437\u0438\u0432\u0438 \u041D\u0412', 'https://nv.ua/ukr/rss/119.xml')
    ]

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class NV(BasicNewsRecipe):
    title          	  = '\u041D\u0412 (\u00AB\u041D\u043E\u0432\u043E\u0435 \u0432\u0440\u0435\u043C\u044F\u00BB)'
    __author__            = 'bugmen00t'
    description           = '\u0415\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E-\u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u043D\u043E\u0432\u043E\u0441\u0442\u043D\u043E\u0439 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0440\u0435\u0441\u0443\u0440\u0441.'
    publisher             = '\u041E\u041E\u041E \u00AB\u0418\u0437\u0434\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0434\u043E\u043C \u00AB\u041C\u0435\u0434\u0438\u0430-\u0414\u041A\u00BB'
    category              = 'magazine'
    cover_url = u'https://yes-ukraine.org/imglib/_newimage/Yalta-annual-meeting/11th-yalta-annual-meeting/partners/media-partneri/nv_logo.png'
    language              = 'ru_UK'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 40

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'article__content__footer'}),
        dict(name='div', attrs={'class': 'article__head__additional_views'}),
        dict(name='div', attrs={'class': 'show_two_positions '}),
        dict(name='div', attrs={'class': 'media__also__news'}),
        dict(name='div', attrs={'class': 'media__also__news_link'}),
        dict(name='blockquote', attrs={'class': 'code'}),
        dict(name='section', attrs={'class': 'article-share'}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='footer'),
        dict(name='div', attrs={'class': 'longread_tags'}),
        dict(name='div', attrs={'class': 'col-md-6 col-lg-3'}),
        dict(name='div', attrs={'class': 'copyright'}),
        dict(name='div', attrs={'class': 'media__video'}),
        dict(name='div', attrs={'class': 'media__embed'})
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://nv.ua/rss/all.xml'),
        ('\u0423\u043A\u0440\u0430\u0438\u043D\u0430', 'https://nv.ua/rss/2283.xml'),
        ('\u041C\u0438\u0440', 'https://nv.ua/rss/2318.xml'),
        ('\u041C\u043D\u0435\u043D\u0438\u044F', 'https://nv.ua/rss/2671.xml'),
        ('\u041A\u0438\u0435\u0432', 'https://nv.ua/rss/108.xml'),
        ('\u0410\u0440\u0442', 'https://nv.ua/rss/52.xml'),
        ('\u0414\u043E\u0441\u044C\u0435', 'https://nv.ua/rss/230.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441', 'https://nv.ua/rss/2292.xml'),
        ('\u041B\u043E\u043D\u0433\u0440\u0438\u0434\u044B', 'https://nv.ua/rss/2790.xml'),
        ('\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438', 'https://nv.ua/rss/48.xml'),
        ('\u0422\u0435\u0445\u043D\u043E', 'https://nv.ua/rss/2346.xml'),
        ('\u0420\u0435\u0433\u0438\u043E\u043D\u044B', 'https://nv.ua/rss/231.xml'),
        ('\u0410\u0432\u0442\u043E', 'https://nv.ua/rss/154.xml'),
        ('Life', 'https://nv.ua/rss/2325.xml'),
        ('\u0417\u0434\u043E\u0440\u043E\u0432\u044C\u0435', 'https://nv.ua/rss/90.xml'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://nv.ua/rss/2371.xml'),
        ('\u0410\u0437\u0430\u0440\u0442', 'https://nv.ua/rss/178.xml'),
        ('\u0428\u043E\u043F\u043F\u0438\u043D\u0433', 'https://nv.ua/rss/131.xml'),
        ('LOL', 'https://nv.ua/rss/2365.xml'),
        ('\u0421\u043A\u0440\u044B\u0442\u044B\u0439 \u0440\u0430\u0437\u0434\u0435\u043B', 'https://nv.ua/rss/118.xml'),
        ('\u0424\u041E\u0422\u041E', 'https://nv.ua/rss/2384.xml'),
        ('\u0420\u0430\u0434\u0438\u043E \u041D\u0412', 'https://nv.ua/rss/3050.xml'),
        ('BBC', 'https://nv.ua/rss/2836.xml'),
        ('\u0426\u0438\u0442\u0430\u0442\u0430 \u0434\u043D\u044F', 'https://nv.ua/rss/2672.xml'),
        ('\u0414\u043D\u0435\u043F\u0440', 'https://nv.ua/rss/232.xml'),
        ('\u041A\u0440\u0443\u043F\u043D\u044B\u043C \u043F\u043B\u0430\u043D\u043E\u043C', 'https://nv.ua/rss/2383.xml'),
        ('\u0411\u043B\u043E\u0433 \u041D\u0412', 'https://nv.ua/rss/225.xml'),
        ('\u041B\u044C\u0432\u043E\u0432', 'https://nv.ua/rss/233.xml'),
        ('\u041E\u0434\u0435\u0441\u0441\u0430', 'https://nv.ua/rss/234.xml'),
        ('\u0425\u0430\u0440\u044C\u043A\u043E\u0432', 'https://nv.ua/rss/235.xml'),
        ('\u0410\u043D\u0435\u043A\u0434\u043E\u0442\u044B', 'https://nv.ua/rss/2765.xml'),
        ('\u042D\u043A\u0441\u043A\u043B\u044E\u0437\u0438\u0432\u044B \u041D\u0412', 'https://nv.ua/rss/119.xml')
    ]

English version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class NV(BasicNewsRecipe):
    title          		  = 'NV (The New Voice of Ukraine)'
    __author__            = 'bugmen00t'
    description           = 'Independent Ukrainian socio-political magazine and news resource.'
    publisher             = 'Vydavnychyy Dim Media-DK LLC'
    category              = 'magazine'
    cover_url = u'https://static.nv.ua/shared/system/Article/posters/002/439/752/600x300/65730a3918ebad6c86167b53f2b3e98a.jpg'
    language              = 'en'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 40

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'article__content__footer'}),
        dict(name='div', attrs={'class': 'article__head__additional_views'}),
        dict(name='div', attrs={'class': 'show_two_positions '}),
        dict(name='div', attrs={'class': 'media__also__news'}),
        dict(name='div', attrs={'class': 'media__also__news_link'}),
        dict(name='blockquote', attrs={'class': 'code'}),
        dict(name='section', attrs={'class': 'article-share'}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='footer'),
        dict(name='div', attrs={'class': 'longread_tags'}),
        dict(name='div', attrs={'class': 'top_donate'}),
        dict(name='div', attrs={'class': 'col-md-6 col-lg-3'}),
        dict(name='div', attrs={'class': 'copyright'}),
        dict(name='div', attrs={'class': 'media__video'}),
        dict(name='div', attrs={'class': 'media__embed'})
        ] 

    feeds = [
        ('All News', 'https://english.nv.ua/rss/all_english.xml'),
        ('Life', 'https://english.nv.ua/rss/239.xml'),
        ('Business', 'https://english.nv.ua/rss/238.xml'),
        ('Nation', 'https://english.nv.ua/rss/237.xml'),
        ('Opinion', 'https://english.nv.ua/rss/240.xml')
    ]
Attached Images
         
Attached Files
File Type: recipe tayga.recipe (1.7 KB, 151 views)
File Type: recipe newtab.recipe (2.0 KB, 151 views)
File Type: recipe snob.recipe (2.0 KB, 150 views)
File Type: recipe n_kaliningrad.recipe (1.6 KB, 167 views)
File Type: recipe rbcua_ua.recipe (1.5 KB, 151 views)
File Type: recipe rbcua_ru.recipe (1.9 KB, 163 views)
File Type: recipe nv_ua.recipe (4.9 KB, 144 views)
File Type: recipe nv_ru.recipe (4.9 KB, 150 views)
File Type: recipe nv_en.recipe (2.2 KB, 160 views)
bugmen00t is offline   Reply With Quote
Old 08-09-2022, 02:41 PM   #21
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 09 of ??)

More Russian recipes

Люди Байкала: blog about life in rural Siberia. Favicon.
Fixes needed:
  • No lead image, part of lead text is missing
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class BaikalJournal(BasicNewsRecipe):
    title           	  = '\u041B\u044E\u0434\u0438 \u0411\u0430\u0439\u043A\u0430\u043B\u0430'
    __author__            = 'bugmen00t'
    description           = '\u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u044B\u0439 \u0430\u0432\u0442\u043E\u0440\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0436\u0443\u0440\u043D\u0430\u043B \u043E \u0436\u0438\u0437\u043D\u0438 \u0432 \u0421\u0438\u0431\u0438\u0440\u0438 \u0438 \u0432\u043E\u043A\u0440\u0443\u0433 \u0411\u0430\u0439\u043A\u0430\u043B\u0430, \u043E\u043F\u0438\u0441\u044B\u0432\u0430\u044E\u0449\u0438\u0439 \u0436\u0438\u0437\u043D\u044C \u0432 \u0441\u0438\u0431\u0438\u0440\u0441\u043A\u043E\u0439 \u0433\u043B\u0443\u0431\u0438\u043D\u043A\u0435.'
    publisher             = '\u041E\u043B\u044C\u0433\u0430 \u041C\u0443\u0442\u043E\u0432\u0438\u043D\u0430, \u0415\u043B\u0435\u043D\u0430 \u0422\u0440\u0438\u0444\u043E\u043D\u043E\u0432\u0430'
    category              = 'blog'
    cover_url = u'https://baikal-journal.ru/wp-content/themes/baikal/assets/img/logo-full.svg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 10

    remove_tags =   [
        dict(name='div', attrs={'class': 'distance-badge'}),
        dict(name='div', attrs={'class': 'lead-footer__sharing'}),
        dict(name='div', attrs={'class': 'm-block-ctaline'}),
        dict(name='div', attrs={'class': 'm-block-readmore format-inline'}),
        dict(name='footer'),
        dict(name='div', attrs={'class': 'related-block'}),
        dict(name='div', attrs={'class': 'selection-block'}),
        dict(name='div', attrs={'class': 'last-cta'})
        ] 

    feeds = [
        ('\u041B\u044E\u0434\u0438 \u0411\u0430\u0439\u043A\u0430\u043B\u0430', 'https://baikal-journal.ru/feed/')
        ]

Настоящее время: Prague-based Russian-language TV channel founded by RFE/RL & VoA. Favicon.
Fixes needed:
  • In some aticles, all text is conglamerated into a single paragraph
  • Sometimes live online text translations are empty
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class CurrentTime(BasicNewsRecipe):
    title          	  = '\u041D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435 \u0432\u0440\u0435\u043C\u044F'
    __author__            = 'bugmen00t'
    description           = '\u0422\u0435\u043B\u0435\u043A\u0430\u043D\u0430\u043B "\u041D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435 \u0412\u0440\u0435\u043C\u044F" \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043E \u0432\u0430\u0436\u043D\u044B\u0445 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u0438 \u0437\u043B\u043E\u0431\u043E\u0434\u043D\u0435\u0432\u043D\u044B\u0445 \u0442\u0435\u043C\u0430\u0445, \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044F \u0430\u0443\u0434\u0438\u0442\u043E\u0440\u0438\u0438 \u0442\u043E, \u0447\u0442\u043E \u043D\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043C\u043E\u0433\u0443\u0442 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0442\u044C \u043C\u0435\u0441\u0442\u043D\u044B\u0435 \u0421\u041C\u0418: \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u0431\u0435\u0437 \u0446\u0435\u043D\u0437\u0443\u0440\u044B, \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u043E\u0431\u043C\u0435\u043D \u043C\u043D\u0435\u043D\u0438\u044F\u043C\u0438, \u043E\u0442\u043A\u0440\u044B\u0442\u043E\u0435 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C.'
    publisher             = 'RFE/RL ("\u0420\u0430\u0434\u0438\u043E \u0421\u0432\u043E\u0431\u043E\u0434\u043D\u0430\u044F \u0415\u0432\u0440\u043E\u043F\u0430"/"\u0420\u0430\u0434\u0438\u043E \u0421\u0432\u043E\u0431\u043E\u0434\u0430") \u043F\u0440\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0438 VoA ("\u0413\u043E\u043B\u043E\u0441 \u0410\u043C\u0435\u0440\u0438\u043A\u0438")'
    category              = 'newspaper'
    cover_url = u'https://www.currenttime.tv/Content/responsive/RFE/ru-RU-TV/img/top_logo_news.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    remove_empty_feeds = True
    oldest_article = 14
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'body-container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'publishing-details '}),
        dict(name='div', attrs={'class': 'separator'}),
        dict(name='div', attrs={'class': 'links'}),
        dict(name='div', attrs={'class': 'share--box'}),
        dict(name='aside'),
        dict(name='div', attrs={'class': 'media-block also-read'}),
        dict(name='div', attrs={'class': 'media-block-wrap'}),
        dict(name='div', attrs={'class': 'media-download'}),
        dict(name='div', attrs={'class': 'wsw__embed'}),
        dict(name='div', attrs={'class': 'share--box'}),
        dict(name='div', attrs={'class': 'prog-hdr'}),
        dict(name='div', attrs={'class': 'dropdown__holder'}),
        dict(name='div', attrs={'id': 'ymla-section'}),
        dict(name='div', attrs={'id': 'comments'}),
        dict(name='a', attrs={'class': 'back-to-top-link'}),
        dict(name='footer'),
        dict(name='li', attrs={'class': 'socials block-socials'}),
        dict(name='div', attrs={'data-sp_api': 'pangea-video'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.currenttime.tv/api/zgbip_e_tpp_'),
        ('\u0421\u0435\u043C\u044C \u0441\u043E\u0440\u043E\u043A', 'https://www.currenttime.tv/api/ztktpyeimupt'),
        ('\u042D\u043A\u0441\u043A\u043B\u044E\u0437\u0438\u0432', 'https://www.currenttime.tv/api/zpyomoe-rimi'),
        ('\u0412\u044B\u0431\u043E\u0440 \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u0438', 'https://www.currenttime.tv/api/zqk-poekpbpo'),
        ('\u0420\u043E\u0441\u0441\u0438\u044F', 'https://www.currenttime.tv/api/zuvmpvepo_pv'),
        ('\u0423\u043A\u0440\u0430\u0438\u043D\u0430', 'https://www.currenttime.tv/api/zkvmptemo_pt'),
        ('\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C', 'https://www.currenttime.tv/api/zvvmm_eoo_mt'),
        ('\u0410\u0437\u0438\u044F', 'https://www.currenttime.tv/api/zbvtpqetoupq'),
        ('\u0415\u0432\u0440\u043E\u043F\u0430', 'https://www.currenttime.tv/api/z-vmpoevo_pi'),
        ('\u0410\u043C\u0435\u0440\u0438\u043A\u0430', 'https://www.currenttime.tv/api/zbvmpieto_pp'),
        ('\u0411\u043B\u0438\u0436\u043D\u0438\u0439 \u0412\u043E\u0441\u0442\u043E\u043A', 'https://www.currenttime.tv/api/zrvtppeuqupm'),
        ('\u041B\u043E\u043D\u0433\u0440\u0438\u0434\u044B', 'https://www.currenttime.tv/api/zibmmyejv_my'),
        ('\u0420\u0435\u043F\u043E\u0440\u0442\u0430\u0436', 'https://www.currenttime.tv/api/zrpppqeujppo'),
        ('\u0420\u0435\u043F\u043E\u0440\u0442\u0430\u0436\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u0412\u0435\u0447\u0435\u0440', 'https://www.currenttime.tv/api/zvrrmoeourmp'),
        ('\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://www.currenttime.tv/api/zqpppoekjppi'),
        ('\u0418\u043D\u0444\u043E\u0433\u0440\u0430\u0444\u0438\u043A\u0430', 'https://www.currenttime.tv/api/zmqmpyebumpv')
        ]

Фонтанка: Saint Petersburg news portal. Favicon.
Fixes needed:
  • Broken formatting & missing text in articles with complex layout
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Fontanka(BasicNewsRecipe):
    title           	  = '\u0424\u043E\u043D\u0442\u0430\u043D\u043A\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u043E\u0435 \u043F\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0441\u043A\u043E\u0435 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E-\u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u0435\u0442\u0435\u0432\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435.'
    publisher             = '\u0410\u041E "\u0410\u0416\u0423\u0420-\u041C\u0415\u0414\u0418\u0410"'
    category              = 'blog'
    cover_url = u'https://www.fontanka.ru/longreads/69505589/2015/images/tild3834-3362-4166-b239-366134363733____-01.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='section', attrs={'itemprop': 'articleBody'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'ADdj ADc5'}),
        dict(name='div', attrs={'class': 'DLj1'}),
        dict(name='div', attrs={'class': 'DTrp'}),
        dict(name='div', attrs={'class': 'EHed'}),
        dict(name='div', attrs={'class': 'FHwp'}),
        dict(name='div', attrs={'class': 'ENr-'}),
        dict(name='div', attrs={'class': 'ENt7'}),
        dict(name='div', attrs={'class': 't004'}),
        dict(name='div', attrs={'class': 't120'}),
        dict(name='div', attrs={'class': 't123'}),
        dict(name='div', attrs={'class': 't405'}),
        dict(name='div', attrs={'class': 't463'}),
# For articles from https://doctorpiter.ru
        dict(name='div', attrs={'class': 'article__block article__block_type-links'}),
        dict(name='div', attrs={'class': 'feedback-request-form__before'}),
        dict(name='div', attrs={'class': 'related-entities-container'}),
        dict(name='div', attrs={'class': 'tags article-footer__tags'}),
        dict(name='hr', attrs={'class': 'article-footer-divider'})        
        ] 

    feeds = [
        ('Fontanka.ru', 'https://www.fontanka.ru/fontanka.rss')
        ]

The Bell: business news Favicon.
Fixes needed:
  • Minor in-text ads
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TheBell(BasicNewsRecipe):
    title          	  = 'The Bell'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u0431\u044E\u043B\u043B\u0435\u0442\u0435\u043D\u044C, \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u044E\u0449\u0435\u0435\u0441\u044F \u043D\u0430 \u0431\u0438\u0437\u043D\u0435\u0441-\u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445.'
    publisher             = '\u0415\u043B\u0438\u0437\u0430\u0432\u0435\u0442\u0430 \u041E\u0441\u0435\u0442\u0438\u043D\u0441\u043A\u0430\u044F, \u0418\u0440\u0438\u043D\u0430 \u041C\u0430\u043B\u043A\u043E\u0432\u0430'
    category              = 'newspaper'
    cover_url = u'https://thebell.io/wp-content/uploads/2018/03/thebell-cover.png'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'post'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'post_bottom ng-tns-c84-1 ng-star-inserted'}),
        dict(name='div', attrs={'class': 'post_tags ng-tns-c84-1 ng-star-inserted'}),
        dict(name='div', attrs={'class': 'post_subscribe ng-tns-c84-1 ng-star-inserted'}),
        dict(name='div', attrs={'class': 'author__content_image author__content_image_small ng-star-inserted'}),
        dict(name='div', attrs={'class': 'email email_small ng-star-inserted'}),
        dict(name='div', attrs={'class': 'post_share ng-tns-c84-1'}),
        dict(name='div', attrs={'class': 'social_media'})
        ] 

    feeds = [
        ('The Bell', 'https://thebell.io/feed')
        ]




Fixed recipe for Сноб (snob.recipe): URL transformation subroutine lacked the last line
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Snob(BasicNewsRecipe):
    title          	  = '\u0421\u043D\u043E\u0431'
    __author__            = 'bugmen00t'
    description           = '\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u043E\u043D\u043D\u043E\u0435, \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0435 \u0438 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0434\u043B\u044F \u043B\u044E\u0434\u0435\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0436\u0438\u0432\u0443\u0442 \u0432 \u0440\u0430\u0437\u043D\u044B\u0445 \u0441\u0442\u0440\u0430\u043D\u0430\u0445, \u0433\u043E\u0432\u043E\u0440\u044F\u0442 \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u044F\u0437\u044B\u043A\u0430\u0445, \u043D\u043E \u0434\u0443\u043C\u0430\u044E\u0442 \u043F\u043E-\u0440\u0443\u0441\u0441\u043A\u0438.'
    publisher             = '\u041E\u041E\u041E \u00AB\u0421\u043D\u043E\u0431 \u041C\u0435\u0434\u0438\u0430\u00BB'
    category              = 'magazine'
    cover_url = u'https://snob.ru/indoc/tilda/995317/images/tild3233-6631-4664-b663-353636373235__e3057a5fee932ada1aaf.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 5
    max_articles_per_feed = 50

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'entry__tags'}),
        dict(name='div', attrs={'class': 'entry__likes'})
        ] 

    feeds = [
        ('\u0421\u043D\u043E\u0431', 'https://snob.ru/rss/')
        ]
        
    def get_article_url(self, article):
        link = article.get('link', None)
        if 'utm_source' in link:
            return link.split('?utm')[0]
Attached Images
    
Attached Files
File Type: recipe baikaljournal.recipe (2.1 KB, 149 views)
File Type: recipe currenttime.recipe (5.3 KB, 140 views)
File Type: recipe fontanka.recipe (2.4 KB, 143 views)
File Type: recipe thebell.recipe (2.1 KB, 150 views)
File Type: recipe snob.recipe (2.0 KB, 149 views)
bugmen00t is offline   Reply With Quote
Old 08-10-2022, 09:15 AM   #22
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 10 of ??)

Another bunch of Russian recipes, and a few unrelated ones.

Wonderzine: style, beauty, fashion and lifestyle blog. Favicon.
Fixes needed:
  • Partial text in paywalled articles
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Wonderzine(BasicNewsRecipe):
    title           	  = 'Wonderzine'
    __author__            = 'bugmen00t'
    description           = '\u041E\u043D\u043B\u0430\u0439\u043D-\u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0441\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u0436\u0435\u043D\u0449\u0438\u043D \u0438 \u0438\u0445 \u0434\u0440\u0443\u0437\u0435\u0439. \u041C\u044B \u043F\u0438\u0448\u0435\u043C \u043E \u043C\u043E\u0434\u0435 \u0438 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0435, \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445 \u0442\u0435\u043D\u0434\u0435\u043D\u0446\u0438\u044F\u0445 \u0438 \u0440\u0430\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u044F\u0445, \u0437\u0434\u043E\u0440\u043E\u0432\u044C\u0435 \u0438 \u0441\u0435\u043A\u0441\u0435, \u044D\u0442\u0438\u043A\u0435 \u0438 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044F\u0445, \u043E\u0441\u043E\u0437\u043D\u0430\u043D\u043D\u044B\u0445 \u0442\u0440\u0430\u0442\u0430\u0445 \u0438 \u0440\u0430\u0437\u043D\u043E\u043E\u0431\u0440\u0430\u0437\u0438\u0438 \u043A\u0440\u0430\u0441\u043E\u0442\u044B.'
    publisher             = 'Redefine Media holding'
    category              = 'blog'
    cover_url = u'https://lamcdn.net/wonderzine.com/post-og_image/WQRiRGqLlcKyEHsnOS-sUw.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'is_article_end'})

    remove_tags =   [
        dict(name='ul', attrs={'class': 'post-meta'}),
        dict(name='a', attrs={'class': 'flow'}),
        dict(name='a', attrs={'class': 'banner-ad-link'}),
        dict(name='div', attrs={'class': 'share-buttons-bar'}),
        dict(name='div', attrs={'class': 'pseudosidebar'})        
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.wonderzine.com/feeds/posts.atom'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.wonderzine.com/feeds/posts.atom?news=only'),
        ('\u0416\u0438\u0437\u043D\u044C', 'https://www.wonderzine.com/feeds/posts.atom?topic=life'),
        ('\u0417\u0434\u043E\u0440\u043E\u0432\u044C\u0435', 'https://www.wonderzine.com/feeds/posts.atom?topic=health'),
        ('\u041A\u0440\u0430\u0441\u043E\u0442\u0430', 'https://www.wonderzine.com/feeds/posts.atom?topic=beauty'),
        ('\u0420\u0430\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u044F', 'https://www.wonderzine.com/feeds/posts.atom?topic=entertainment'),
        ('\u0421\u0442\u0438\u043B\u044C', 'https://www.wonderzine.com/feeds/posts.atom?topic=style'),
        ('\u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438', 'https://www.wonderzine.com/feeds/posts.atom?topic=opportunities')
        ]

Vedomosit: daily newspaper; non-paywlled content only. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Vedomosti(BasicNewsRecipe):
    title           	  = '\u0412\u0435\u0434\u043E\u043C\u043E\u0441\u0442\u0438'
    __author__            = 'bugmen00t'
    description           = '\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0430\u044F \u0434\u0435\u043B\u043E\u0432\u0430\u044F \u0433\u0430\u0437\u0435\u0442\u0430.'
    publisher             = '\u0410\u041E \u00AB\u0411\u0438\u0437\u043D\u0435\u0441 \u041D\u044C\u044E\u0441 \u041C\u0435\u0434\u0438\u0430\u00BB'
    category              = 'newspaper'
    cover_url = u'https://id.vedomosti.ru/assets/chopick-13077eee55066e639f3a037834ecf11279d3f402e9f5cac7162d13183dfd9d20.jpg'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 200

    remove_tags_before = dict(name='header', attrs={'class': 'article__header'})

    remove_tags_after = dict(name='div', attrs={'class': 'article__main'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'article__tools'}),
        dict(name='div', attrs={'class': 'box-inset-link box-inset-link--card'}),
        dict(name='div', attrs={'class': 'box-inset-link box-inset-link--card box-inset-link--link'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.vedomosti.ru/rss/news')
        ]

Bellingcat: OSINT investigaton and citizen journalism blog. Favicon.

English version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Bellingcat(BasicNewsRecipe):
    title           	  = 'Bellingcat'
    __author__            = 'bugmen00t'
    description           = 'Bellingcat is an independent international collective of researchers, investigators and citizen journalists using open source and social media investigation to probe a variety of subjects – from Mexican drug lords and crimes against humanity, to tracking the use of chemical weapons and conflicts worldwide. With staff and contributors in more than 20 countries around the world, we operate in a unique field where advanced technology, forensic research, journalism, investigations, transparency and accountability come together.'
    publisher             = 'Stichting Bellingcat'
    category              = 'blog'
    cover_url = u'https://www.bellingcat.com/app/uploads/2018/04/bellingcat_HP_logo_black.jpg'
    language              = 'en'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 60
    max_articles_per_feed = 10


    remove_tags_before = dict(name='div', attrs={'class': 'container'})

    remove_tags_after = dict(name='div', attrs={'class': 'container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'social social--share'}),
        dict(name='div', attrs={'class': 'singular__related'})
        ] 

    feeds = [
        ('Bellingcat', 'https://www.bellingcat.com/feed/')
        ]

Russian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Bellingcat(BasicNewsRecipe):
    title           	  = '\u0411\u0435\u043B\u043B\u0438\u043D\u0433\u043A\u044D\u0442 (bell\u00BFngcat)'
    __author__            = 'bugmen00t'
    description           = 'Bellingcat \u2014 \u044D\u0442\u043E \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u0430\u044F \u043C\u0435\u0436\u0434\u0443\u043D\u0430\u0440\u043E\u0434\u043D\u0430\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u0430 \u0440\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u0438 \u0433\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u043A\u0438\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438 \u0438 \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0441\u0435\u0442\u0438 \u0434\u043B\u044F \u0440\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u0439 \u043D\u0430 \u0440\u0430\u0437\u043B\u0438\u0447\u043D\u044B\u0435 \u0442\u0435\u043C\u044B \u2014 \u043E\u0442 \u043C\u0435\u043A\u0441\u0438\u043A\u0430\u043D\u0441\u043A\u0438\u0445 \u043D\u0430\u0440\u043A\u043E\u043A\u0430\u0440\u0442\u0435\u043B\u0435\u0439 \u0438 \u043F\u0440\u0435\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0439 \u043F\u0440\u043E\u0442\u0438\u0432 \u0447\u0435\u043B\u043E\u0432\u0435\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u043E \u043E\u0442\u0441\u043B\u0435\u0436\u0438\u0432\u0430\u043D\u0438\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0445\u0438\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u043E\u0440\u0443\u0436\u0438\u044F \u0438 \u043A\u043E\u043D\u0444\u043B\u0438\u043A\u0442\u043E\u0432 \u043F\u043E \u0432\u0441\u0435\u043C\u0443 \u043C\u0438\u0440\u0443 \u2014 \u0441\u043E\u0447\u0435\u0442\u0430\u044F \u0441\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0435 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438, \u043A\u0440\u0438\u043C\u0438\u043D\u0430\u043B\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u044B, \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0438\u043A\u0443, \u0440\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0438 \u0431\u043E\u0440\u044C\u0431\u0443 \u0437\u0430 \u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0441\u0442\u044C \u0438 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C.'
    publisher             = 'Stichting Bellingcat'
    category              = 'blog'
    cover_url = u'https://www.bellingcat.com/app/uploads/2018/04/bellingcat_HP_logo_black.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 60
    max_articles_per_feed = 10


    remove_tags_before = dict(name='div', attrs={'class': 'container'})

    remove_tags_after = dict(name='div', attrs={'class': 'container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'social social--share'}),
        dict(name='div', attrs={'class': 'singular__related'})
        ] 

    feeds = [
        ('Bellingcat', 'https://ru.bellingcat.com/feed/')
        ]

Ukrainian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Bellingcat(BasicNewsRecipe):
    title           	  = '\u0411\u0435\u043B\u043B\u0456\u043D\u0433\u043A\u0435\u0442 (bell\u00BFngcat)'
    __author__            = 'bugmen00t'
    description           = '\u0411\u0435\u043B\u043B\u0456\u043D\u0433\u043A\u0435\u0442 \u2014 \u043D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u0438\u0439 \u043C\u0456\u0436\u043D\u0430\u0440\u043E\u0434\u043D\u0438\u0439 \u043A\u043E\u043B\u0435\u043A\u0442\u0438\u0432 \u0434\u043E\u0441\u043B\u0456\u0434\u043D\u0438\u043A\u0456\u0432, \u0441\u043B\u0456\u0434\u0447\u0438\u0445 \u0456 \u0433\u0440\u043E\u043C\u0430\u0434\u044F\u043D\u0441\u044C\u043A\u0438\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0456\u0441\u0442\u0456\u0432, \u044F\u043A\u0456 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0456 \u0434\u0436\u0435\u0440\u0435\u043B\u0430 \u0442\u0430 \u0441\u043E\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u043C\u0435\u0440\u0435\u0436\u0456 \u0434\u043B\u044F \u0440\u043E\u0437\u0441\u043B\u0456\u0434\u0443\u0432\u0430\u043D\u043D\u044F \u0440\u0456\u0437\u043D\u043E\u043C\u0430\u043D\u0456\u0442\u043D\u0438\u0445 \u0442\u0435\u043C \u2014 \u0432\u0456\u0434 \u043C\u0435\u043A\u0441\u0438\u043A\u0430\u043D\u0441\u044C\u043A\u0438\u0445 \u043D\u0430\u0440\u043A\u043E\u0431\u0430\u0440\u043E\u043D\u0456\u0432 \u0456 \u0437\u043B\u043E\u0447\u0438\u043D\u0456\u0432 \u043F\u0440\u043E\u0442\u0438 \u043B\u044E\u0434\u0441\u0442\u0432\u0430, \u0434\u043E \u0432\u0456\u0434\u0441\u0442\u0435\u0436\u0435\u043D\u043D\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u0445\u0456\u043C\u0456\u0447\u043D\u043E\u0457 \u0437\u0431\u0440\u043E\u0457 \u0442\u0430 \u043A\u043E\u043D\u0444\u043B\u0456\u043A\u0442\u0456\u0432 \u0443 \u0432\u0441\u044C\u043E\u043C\u0443 \u0441\u0432\u0456\u0442\u0456. \u041C\u0438 \u043F\u0440\u0430\u0446\u044E\u0454\u043C\u043E \u0432 \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0456\u0439 \u0441\u0444\u0435\u0440\u0456, \u0434\u0435 \u043F\u0435\u0440\u0435\u0434\u043E\u0432\u0456 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0456\u0457, \u0441\u0443\u0434\u043E\u0432\u043E-\u043C\u0435\u0434\u0438\u0447\u043D\u0456 \u0434\u043E\u0441\u043B\u0456\u0434\u0436\u0435\u043D\u043D\u044F, \u0436\u0443\u0440\u043D\u0430\u043B\u0456\u0441\u0442\u0438\u043A\u0430, \u0440\u043E\u0437\u0441\u043B\u0456\u0434\u0443\u0432\u0430\u043D\u043D\u044F, \u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u0456 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u043B\u044C\u043D\u0456\u0441\u0442\u044C \u043E\u0431\u2019\u0454\u0434\u043D\u0443\u044E\u0442\u044C\u0441\u044F.'
    publisher             = 'Stichting Bellingcat'
    category              = 'blog'
    cover_url = u'https://www.bellingcat.com/app/uploads/2018/04/bellingcat_HP_logo_black.jpg'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 60
    max_articles_per_feed = 10


    remove_tags_before = dict(name='div', attrs={'class': 'container'})

    remove_tags_after = dict(name='div', attrs={'class': 'container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'social social--share'}),
        dict(name='div', attrs={'class': 'singular__related'})
        ] 

    feeds = [
        ('Bellingcat', 'https://uk.bellingcat.com/feed/')
        ]

Version en français (no updates since 2021):
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Bellingcat(BasicNewsRecipe):
    title           	  = 'Bellingcat'
    __author__            = 'bugmen00t'
    description           = 'Bellingcat est un groupe international ind\u00E9pendant de chercheurs, d\u0027enqu\u00EAteurs et de journalistes citoyens utilisant \u00E0 la fois: enqu\u00EAtes \u0027open source\u0027 et r\u00E9seaux sociaux, pour sonder une vari\u00E9t\u00E9 de sujets - trafiquants de drogue mexicains, crimes contre l\u0027humanit\u00E9, suivi de l\u0027utilisation d\u0027armes chimiques et conflits dans le monde entier. Nous op\u00E9rons dans un domaine unique dans lequel technologie de pointe, recherche m\u00E9dico-l\u00E9gale, journalisme, enqu\u00EAtes, transparence et responsabilit\u00E9 se rencontrent.'
    publisher             = 'Stichting Bellingcat'
    category              = 'blog'
    cover_url = u'https://www.bellingcat.com/app/uploads/2018/04/bellingcat_HP_logo_black.jpg'
    language              = 'fr'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 300
    max_articles_per_feed = 10


    remove_tags_before = dict(name='div', attrs={'class': 'container'})

    remove_tags_after = dict(name='div', attrs={'class': 'container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'social social--share'}),
        dict(name='div', attrs={'class': 'singular__related'})
        ] 

    feeds = [
        ('Bellingcat', 'https://fr.bellingcat.com/feed/')
        ]

Versión en Español (no updates since 2021):
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Bellingcat(BasicNewsRecipe):
    title           	  = 'Bellingcat'
    __author__            = 'bugmen00t'
    description           = 'Bellingcat es un colectivo internacional independiente de investigadores y periodistas ciudadanos que usan informaci\u00F3n de fuente abierta y redes sociales para investigar una gran variedad de temas, desde carteles de droga en M\u00E9xico y cr\u00EDmenes de lesa humanidad hasta el rastreo de armas qu\u00EDmicas en zonas de conflicto alrededor del mundo. Nosotros operamos en un campo \u00FAnico donde la tecnolog\u00EDa avanzada, las investigaciones forenses, el periodismo, y la transparencia y responsabilidad se unen.'
    publisher             = 'Stichting Bellingcat'
    category              = 'blog'
    cover_url = u'https://www.bellingcat.com/app/uploads/2018/04/bellingcat_HP_logo_black.jpg'
    language              = 'es'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 300
    max_articles_per_feed = 10


    remove_tags_before = dict(name='div', attrs={'class': 'container'})

    remove_tags_after = dict(name='div', attrs={'class': 'container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'social social--share'}),
        dict(name='div', attrs={'class': 'singular__related'})
        ] 

    feeds = [
        ('Bellingcat', 'https://es.bellingcat.com/feed/')
        ]

Росбалт: federal news agency with emphasis on Saint Petersburg. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Rosbalt(BasicNewsRecipe):
    title           	  = '\u0420\u043E\u0441\u0431\u0430\u043B\u0442'
    __author__            = 'bugmen00t'
    description           = '\u0424\u0435\u0434\u0435\u0440\u0430\u043B\u044C\u043D\u043E\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u0430\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E. \u041A\u0440\u0443\u0433\u043B\u043E\u0441\u0443\u0442\u043E\u0447\u043D\u043E \u0441\u043B\u0435\u0434\u0438\u043C \u0437\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u043C\u0438 \u0432 \u0441\u0442\u0440\u0430\u043D\u0435 \u0438 \u043C\u0438\u0440\u0435, \u043F\u0443\u0431\u043B\u0438\u043A\u0443\u0435\u043C \u0441\u0430\u043C\u044B\u0435 \u0441\u0432\u0435\u0436\u0438\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438, \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u043E\u0432, \u0430\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0441\u0442\u0430\u0442\u044C\u0438, \u0438\u043D\u0442\u0435\u0440\u0432\u044C\u044E \u0441 \u0432\u0435\u0434\u0443\u0449\u0438\u043C\u0438 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043B\u044F\u043C\u0438 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0433\u043E \u0431\u0438\u0437\u043D\u0435\u0441\u0430 \u0438 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0438.'
    publisher             = '\u0410\u041E \u00AB\u0420\u0421-\u0411\u0430\u043B\u0442\u00BB'
    category              = 'newspaper'
    cover_url = u'https://i.ytimg.com/vi/eeMqJGbjuY0/maxresdefault.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 100


    remove_tags_before = dict(name='div', attrs={'class': 'main-content'})

    remove_tags_after = dict(name='div', attrs={'class': 'newstext'})

    remove_tags =   [
        dict(name='nav'),
        dict(name='aside'),
        dict(name='div', attrs={'class': 'news-left'}),
        dict(name='div', attrs={'class': 'rkngov'}),
        dict(name='div', attrs={'class': 'eye'})
        ] 

    feeds = [
        ('\u0420\u043E\u0441\u0431\u0430\u043B\u0442', 'https://www.rosbalt.ru/feed/')
        ]

Debunking Denialism: blog about pseudoscience in everyday life. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Bellingcat(BasicNewsRecipe):
    title           	  = 'Debunking Denialism'
    __author__            = 'bugmen00t'
    description           = 'Debunking Denialism is a website dedicated to the refutation of pseudoscience and denialism by applying scientific skepticism and defending evidence-based science. Fighting pseudoscience and quackery with reason and evidence.'
    publisher             = 'Debunking Denialism'
    category              = 'blog'
    cover_url = u'https://i0.wp.com/debunkingdenialism.com/wp-content/uploads/2017/06/cropped-newestblavatar.jpg'
    language              = 'en'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 60
    max_articles_per_feed = 10

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'above-entry-meta'}),
        dict(name='time', attrs={'class': 'updated'}),
        dict(name='p', attrs={'class': 'ddtag'}),
        dict(name='div', attrs={'class': 'sharedaddy sd-sharing-enabled'}),
        dict(name='div', attrs={'class': 'sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded'})
        ] 

    feeds = [
        ('Debunking Denialism', 'https://debunkingdenialism.com/feed/')
        ]
        
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-orig-file': True}):
            img['src'] = img['data-orig-file']
        return soup
Attached Images
         
Attached Files
File Type: recipe wonderzine.recipe (3.1 KB, 141 views)
File Type: recipe vedomosti.recipe (1.6 KB, 145 views)
File Type: recipe bellingcat_en.recipe (1.6 KB, 151 views)
File Type: recipe bellingcat_ru.recipe (3.5 KB, 148 views)
File Type: recipe bellingcat_uk.recipe (3.6 KB, 143 views)
File Type: recipe bellingcat_fr.recipe (1.7 KB, 140 views)
File Type: recipe bellingcat_es.recipe (1.6 KB, 136 views)
File Type: recipe rosbalt.recipe (2.6 KB, 143 views)
File Type: recipe debunkingdenialism.recipe (1.7 KB, 152 views)

Last edited by bugmen00t; 08-10-2022 at 09:18 AM.
bugmen00t is offline   Reply With Quote
Old 08-15-2022, 03:20 PM   #23
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 11 of ??)

More Russian and Ukrainian sources.

Cвободное пространство: news aggregator from "Novaya Gazeta" editors team. Favicon replacemet.
Fixes needed:
  • No images in articles (.webp)
  • Poor text formatting
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class NovayaGazeta(BasicNewsRecipe):
    title           	  = '\u0421\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E'
    __author__            = 'bugmen00t'
    description           = '\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440 \u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430, \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0439 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u0435\u0439 \u00AB\u041D\u043E\u0432\u043E\u0439 \u0433\u0430\u0437\u0435\u0442\u044B\u00BB, \u0434\u0435\u0442\u0430\u043B\u0438 \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u043A\u0430\u0436\u0434\u044B\u0439 \u0438\u0437 \u0447\u0438\u0442\u0430\u0442\u0435\u043B\u0435\u0439 \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u043B\u044F \u0441\u0435\u0431\u044F \u0441\u0430\u043C. \u041A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440 \u2014 \u044D\u0442\u043E \u043D\u043E\u0432\u044B\u0439 \u0441\u043F\u043E\u0441\u043E\u0431 \u0447\u0438\u0442\u0430\u0442\u044C \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432 \u00AB\u041D\u043E\u0432\u043E\u0439 \u0433\u0430\u0437\u0435\u0442\u044B\u00BB \u0438 \u0432\u0441\u0435 \u043E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043F\u043E\u0442\u043E\u043A\u0438 \u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430: \u043B\u044E\u0431\u044B\u0435 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u044B, Telegram-\u043A\u0430\u043D\u0430\u043B\u044B, Youtube-\u043A\u0430\u043D\u0430\u043B\u044B.'
    publisher             = '\u0420\u0435\u0434\u0430\u043A\u0446\u0438\u043E\u043D\u043D\u044B\u0439 \u043A\u043E\u043B\u043B\u0435\u043A\u0442\u0438\u0432 \u00AB\u041D\u043E\u0432\u043E\u0439 \u0433\u0430\u0437\u0435\u0442\u044B\u00BB'
    category              = 'newspaper'
    cover_url = u'https://novaya.media/ic_puzzle_footer.svg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 30

    remove_tags_before = dict(name='h1', attrs={'class': 'Header_title__2zxwH'})

    remove_tags_after = dict(name='div', attrs={'class': 'Post_contentInnerWrapper__3GWHl'})

    feeds = [
        ('\u0421\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E', 'https://novaya.media/feed/rss')
        ]
        
    def print_version(self, url):
        return url + '?print=true'



KyivPost: Ukraine’s English-language newspaper. Favicon.
Fixes needed:
  • No lead images
English version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class KyivPost(BasicNewsRecipe):
    title           	  = 'Kyiv Post'
    __author__            = 'bugmen00t'
    description           = 'The Kyiv Post is Ukraine\u2019s English-language newspaper. The newspaper\u2019s first print edition came out on Oct. 18, 1995, and went online in 1997. The newspaper\u2019s motto is \u201CUkraine\u2019s Global Voice,\u201D which in 2018 replaced the previous motto of \u201CIndependence. Community. Trust.\u201D Both slogans reflect the newspaper\u2019s commitment to the highest journalistic and ethical standards.'
    publisher             = 'BIZNESGRUPP TOV'
    category              = 'newspaper'
    cover_url = u'https://www.kyivpost.com/wp-content/themes/kyivpost/assets/img/svg/logo-foot.svg'
    language              = 'en_UK'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 10

    remove_tags_before = dict(name='article', attrs={'class': 'article'})

    remove_tags_after = dict(name='article', attrs={'class': 'article'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'entry-footer hide_post_header'})
        ] 

    feeds = [
        ('News', 'https://www.kyivpost.com/feed')
        ]

Ukrainian version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class KyivPost(BasicNewsRecipe):
    title           	  = 'Kyiv Post'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430 \u0430\u043D\u0433\u043B\u043E\u043C\u043E\u0432\u043D\u0430 \u0433\u0430\u0437\u0435\u0442\u0430, \u043D\u0430\u0433\u043E\u0440\u043E\u0434\u0436\u0435\u043D\u0430 \u0443 2014 \u0440\u043E\u043A\u0443. \u041F\u0435\u0440\u0448\u0438\u0439 \u0434\u0440\u0443\u043A\u043E\u0432\u0430\u043D\u0438\u0439 \u043F\u0440\u0438\u043C\u0456\u0440\u043D\u0438\u043A \u0433\u0430\u0437\u0435\u0442\u0438 \u0432\u0438\u0439\u0448\u043E\u0432 18 \u0436\u043E\u0432\u0442\u043D\u044F 1995 \u0440\u043E\u043A\u0443, \u0430 \u0432 \u0406\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0432\u0430\u0440\u0456\u0430\u043D\u0442\u0456 Kyiv Post \u0437\u2019\u044F\u0432\u0438\u043B\u0430\u0441\u044C \u0432 1997 \u0440\u043E\u0446\u0456. \u0414\u0435\u0432\u0456\u0437 \u0433\u0430\u0437\u0435\u0442\u0438: \u00AB\u0413\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u0438\u0439 \u0433\u043E\u043B\u043E\u0441 \u0423\u043A\u0440\u0430\u0457\u043D\u0438\u00BB, \u044F\u043A\u0438\u0439 \u0443 2018 \u0440\u043E\u0446\u0456 \u0437\u0430\u043C\u0456\u043D\u0438\u0432 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0434\u0435\u0432\u0456\u0437 \u00AB\u041D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u0456\u0441\u0442\u044C. \u0421\u043F\u0456\u043B\u044C\u043D\u043E\u0442\u0430. \u0414\u043E\u0432\u0456\u0440\u0430.\u00BB \u041E\u0431\u0438\u0434\u0432\u0430 \u0433\u0430\u0441\u043B\u0430 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u044E\u0442\u044C \u0442\u0435, \u0449\u043E \u0443 \u0432\u0438\u0434\u0430\u043D\u043D\u0456  \u0434\u043E\u0442\u0440\u0438\u043C\u0443\u044E\u0442\u044C\u0441\u044F \u043D\u0430\u0439\u0432\u0438\u0449\u0438\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0456\u0441\u0442\u0441\u044C\u043A\u0438\u0445 \u0442\u0430 \u0435\u0442\u0438\u0447\u043D\u0438\u0445 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u0456\u0432.'
    publisher             = 'BIZNESGRUPP TOV'
    category              = 'newspaper'
    cover_url = u'https://www.kyivpost.com/wp-content/themes/kyivpost/assets/img/svg/logo-foot.svg'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 10

    remove_tags_before = dict(name='article', attrs={'class': 'article'})

    remove_tags_after = dict(name='article', attrs={'class': 'article'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'entry-footer hide_post_header'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://www.kyivpost.com/uk/feed')
        ]

Arabic version (not sure if output is correct as the text is not RTL):
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class KyivPost(BasicNewsRecipe):
    title           	  = '\u0643\u064A\u064A\u0641 \u0628\u0648\u0633\u062A (Kyiv Post)'
    __author__            = 'bugmen00t'
    description           = '\u0643\u064A\u064A\u0641 \u0628\u0648\u0633\u062A \u0647\u064A \u0635\u062D\u064A\u0641\u0629 \u0623\u0648\u0643\u0631\u0627\u0646\u064A\u0629 \u062A\u0635\u062F\u0631 \u0628\u0627\u0644\u0644\u063A\u0629 \u0627\u0644\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629 \u0648\u0647\u064A \u0641\u0627\u0626\u0632\u0629 \u0628\u0645\u064A\u062F\u0627\u0644\u064A\u0629 Missouri Honor 2014 \u0644\u0644\u062E\u062F\u0645\u0629 \u0627\u0644\u0645\u062A\u0645\u064A\u0632\u0629 \u0641\u064A \u0627\u0644\u0635\u062D\u0627\u0641\u0629. \u0635\u062F\u0631\u062A \u0627\u0644\u0646\u0633\u062E\u0629 \u0627\u0644\u0645\u0637\u0628\u0648\u0639\u0629 \u0627\u0644\u0623\u0648\u0644\u0649 \u0645\u0646 \u0627\u0644\u0635\u062D\u064A\u0641\u0629 \u0641\u064A 18 \u0623\u0643\u062A\u0648\u0628\u0631 1995\u060C \u0648\u062A\u0645 \u0646\u0634\u0631\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A \u0641\u064A \u0639\u0627\u0645 1997. \u0648\u0643\u0627\u0646 \u062C\u0645\u0647\u0648\u0631\u0647\u0627 \u0627\u0644\u0639\u0627\u0644\u0645\u064A \u064A\u0646\u0645\u0648 \u0628\u0627\u0637\u0631\u0627\u062F \u0645\u0646\u0630 \u0630\u0644\u0643 \u0627\u0644\u062D\u064A\u0646 \u060C \u0648\u0628\u0644\u063A \u0630\u0631\u0648\u062A\u0647 \u0628\u0623\u0643\u062B\u0631 \u0645\u0646 65 \u0645\u0644\u064A\u0648\u0646 \u0645\u0634\u0627\u0647\u062F\u0629 \u0644\u0644\u0635\u0641\u062D\u0629 \u0641\u064A \u0639\u0627\u0645 2014. \u0634\u0639\u0627\u0631 \u0627\u0644\u0635\u062D\u064A\u0641\u0629 \u0647\u0648 \u201C\u0635\u0648\u062A \u0623\u0648\u0643\u0631\u0627\u0646\u064A\u0627 \u0644\u0644\u0639\u0627\u0644\u0645\u201D\u060C \u0648\u0627\u0644\u0630\u064A \u062D\u0644 \u0641\u064A \u0639\u0627\u0645 2018 \u0645\u062D\u0644 \u0627\u0644\u0634\u0639\u0627\u0631 \u0627\u0644\u0633\u0627\u0628\u0642 \u201C\u0627\u0644\u0627\u0633\u062A\u0642\u0644\u0627\u0644. \u062A\u0648\u0627\u0635\u0644 \u0627\u062C\u062A\u0645\u0627\u0639\u064A. \u0627\u0644\u062B\u0642\u0629\u201D. \u0643\u0644\u0627 \u0627\u0644\u0634\u0639\u0627\u0631\u064A\u0646 \u064A\u0639\u0643\u0633\u0627\u0646 \u0627\u0644\u062A\u0632\u0627\u0645 \u0627\u0644\u0635\u062D\u064A\u0641\u0629 \u0628\u0623\u0639\u0644\u0649 \u0627\u0644\u0645\u0639\u0627\u064A\u064A\u0631 \u0627\u0644\u0635\u062D\u0641\u064A\u0629 \u0648\u0627\u0644\u0623\u062E\u0644\u0627\u0642\u064A\u0629.'
    publisher             = 'BIZNESGRUPP TOV'
    category              = 'newspaper'
    cover_url = u'https://www.kyivpost.com/wp-content/themes/kyivpost/assets/img/svg/logo-foot.svg'
    language              = 'ar'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 10

    remove_tags_before = dict(name='article', attrs={'class': 'article'})

    remove_tags_after = dict(name='article', attrs={'class': 'article'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'entry-footer hide_post_header'})
        ] 

    feeds = [
        ('\u0627\u0644\u0625\u062E\u0628\u0627\u0631\u064A\u0629', 'https://www.kyivpost.com/ar/feed')
        ]



The Moscow Times: English- and Russian-language online newspaper. Favicon.
Russain version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class MoscowTimes(BasicNewsRecipe):
    title           	  = 'The Moscow Times'
    __author__            = 'bugmen00t'
    description           = '\u0410\u043D\u0433\u043B\u043E\u044F\u0437\u044B\u0447\u043D\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u043E \u0420\u043E\u0441\u0441\u0438\u0438. \u041D\u0430\u0448\u0430 \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u044F \u0434\u0435\u043B\u0438\u0442\u0441\u044F \u0441 \u0447\u0438\u0442\u0430\u0442\u0435\u043B\u044F\u043C\u0438 \u043F\u043E \u0432\u0441\u0435\u043C\u0443 \u043C\u0438\u0440\u0443 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u043C\u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u043C\u0438 \u0438 \u0441\u0430\u043C\u044B\u043C\u0438 \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B\u043C\u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u043C\u0438 \u0441\u0430\u043C\u043E\u0439 \u0431\u043E\u043B\u044C\u0448\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u044B \u043D\u0430 \u0417\u0435\u043C\u043B\u0435.'
    publisher             = '\u041E\u041E\u041E \u0422\u0438\u044D\u043C\u0442\u0438'
    category              = 'newspaper'
    cover_url = u'https://static.themoscowtimes.com/img/share_default.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 50

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='div', attrs={'class': 'article__bottom'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'social'}),
        dict(name='div', attrs={'class': 'related-article__content'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.moscowtimes.ru/rss/news'),
        ('\u041C\u043D\u0435\u043D\u0438\u044F', 'https://www.moscowtimes.ru/rss/opinion'),
        ('\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u044B Financial Times', 'https://www.moscowtimes.ru/rss/ft')
        ]
        
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup

English version:
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class MoscowTimes(BasicNewsRecipe):
    title           	  = 'The Moscow Times'
    __author__            = 'bugmen00t'
    description           = 'The Moscow Times is Russia’s leading, independent English-language media outlet. Our team of Russian and English journalists provide readers across the world with breaking news, engaging stories and balanced reporting about the largest country on Earth.'
    publisher             = 'Tiamti LLC'
    category              = 'newspaper'
    cover_url = u'https://static.themoscowtimes.com/img/share_default.jpg'
    language              = 'en_RU'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 50

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='div', attrs={'class': 'article__tags'})

    remove_tags =   [
        dict(name='aside'),
        dict(name='footer'),
        dict(name='section', attrs={'class': 'cluster'}),
        dict(name='div', attrs={'class': 'article__tags'}),
        dict(name='div', attrs={'class': 'social'}),
        dict(name='div', attrs={'class': 'related-article__content'})
        ] 

    feeds = [
        ('News', 'https://www.themoscowtimes.com/rss/news'),
        ('Opinion', 'https://www.themoscowtimes.com/rss/opinion'),
        ('Arts and Life', 'https://www.themoscowtimes.com/rss/city'),
        ('Meanwhile', 'https://www.themoscowtimes.com/rss/meanwhile')
        ]



Довод: local news from Vladimir city & local regions. Favicon.
Fixes needed:
  • No lead image
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Dovod(BasicNewsRecipe):
    title           	  = '\u0414\u043E\u0432\u043E\u0434'
    __author__            = 'bugmen00t'
    description           = '\u0421\u0430\u0439\u0442 \u00AB\u0414\u043E\u0432\u043E\u0434\u00BB \u043F\u043E\u043B\u0443\u0447\u0438\u043B \u0441\u0432\u043E\u0451 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0432 \u0447\u0435\u0441\u0442\u044C \u0440\u0430\u043D\u0435\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u00AB\u0414\u043E\u0432\u043E\u0434 \u2014 \u0412\u043B\u0430\u0434\u0438\u043C\u0438\u0440\u0441\u043A\u0438\u0435 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0434\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438\u00BB. \u041D\u0430\u0448\u0430 \u0446\u0435\u043B\u044C \u2014 \u043E\u0441\u0432\u0435\u0449\u0435\u043D\u0438\u0435 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0445 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E-\u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0432\u043E\u043F\u0440\u043E\u0441\u043E\u0432 \u0438 \u0438\u0445 \u043E\u0442\u043A\u0440\u043E\u0432\u0435\u043D\u043D\u043E\u0435 \u0438 \u043E\u0441\u043C\u044B\u0441\u043B\u0435\u043D\u043D\u043E\u0435 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435.'
    publisher             = '\u0418\u043B\u044C\u044F \u041A\u043E\u0441\u044B\u0433\u0438\u043D, \u041A\u0438\u0440\u0438\u043B\u043B \u0418\u0448\u0443\u0442\u0438\u043D'
    category              = 'blog'
    cover_url = u'https://pbs.twimg.com/profile_images/1498229545505284099/l9V1l59Z_400x400.jpg'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 10

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='div', attrs={'class': 'entry-content'})

    feeds = [
        ('\u0414\u043E\u0432\u043E\u0434', 'https://www.dovod.online/feed/')
        ]
Attached Images
       
Attached Files
File Type: recipe novaya_media.recipe (2.9 KB, 146 views)
File Type: recipe kyivpost_en.recipe (1.4 KB, 142 views)
File Type: recipe kyivpost_ua.recipe (2.9 KB, 139 views)
File Type: recipe kyivpost_ar.recipe (3.4 KB, 149 views)
File Type: recipe moscowtimes_ru.recipe (2.5 KB, 149 views)
File Type: recipe moscowtimes_en.recipe (1.7 KB, 146 views)
File Type: recipe dovod.recipe (2.2 KB, 144 views)

Last edited by bugmen00t; 08-17-2022 at 10:16 AM.
bugmen00t is offline   Reply With Quote
Old 08-17-2022, 09:02 AM   #24
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 12 of ??)

Another bunch of Russian and Ukrainian sources.

Теплица социальных технологий: IT- & tech building project for non-government organisations. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Teplitsa(BasicNewsRecipe):
    title           	  = '\u0422\u0435\u043F\u043B\u0438\u0446\u0430 \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0439'
    __author__            = 'bugmen00t'
    description           = '\u0422\u0435\u043F\u043B\u0438\u0446\u0430 \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0445 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0439 \u2014 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u044B\u0439 \u043F\u0440\u043E\u0441\u0432\u0435\u0442\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044E\u0449\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442, \u043C\u0438\u0441\u0441\u0438\u044F \u043A\u043E\u0442\u043E\u0440\u043E\u0433\u043E \u2014 \u0443\u0441\u0438\u043B\u0438\u0442\u044C \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0435 \u0433\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u043A\u043E\u0435 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u043E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0439.'
    publisher             = '\u0410\u041D\u041E \u00AB\u0410\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438\u00BB'
    category              = 'blog'
    cover_url = u'https://te-st.ru/wp-content/uploads/2014/05/logo_test.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    remove_empty_feeds = True
    oldest_article = 30
    max_articles_per_feed = 15

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'post-reading-time'}),
        dict(name='div', attrs={'class': 'read-more'}),
        dict(name='p', attrs={'class': 'author-name'}),
        dict(name='p', attrs={'class': 'author-about'}),
        dict(name='footer')
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://te-st.ru/feed'),
        ('\u0416\u0443\u0440\u043D\u0430\u043B', 'https://te-st.ru/section/journal/feed/'),
        ('\u041F\u0440\u0430\u043A\u0442\u0438\u043A\u0430', 'https://te-st.ru/section/practice/feed/'),
        ('\u0412\u0441\u0442\u0440\u0435\u0447\u0438', 'https://te-st.ru/section/events/feed/'),
        ('\u0410\u0440\u0445\u0438\u0432', 'https://te-st.ru/section/archive/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u044C', 'https://te-st.ru/format/news-2/feed/'),
        ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://te-st.ru/format/article/feed/'),
        ('\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://te-st.ru/format/interview/feed/'),
        ('\u041A\u0435\u0439\u0441\u044B', 'https://te-st.ru/format/case/feed/'),
        ('\u0421\u043F\u0438\u0441\u043A\u0438', 'https://te-st.ru/format/list/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://te-st.ru/format/story/feed/'),
        ('\u0418\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u0438', 'https://te-st.ru/format/guide/feed/'),
        ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://te-st.ru/format/overview/feed/'),
        ('\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430', 'https://te-st.ru/tag/analytics/feed'),
        ('\u0410\u043D\u0442\u0438\u0432\u043E\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u043C\u043F\u0430\u043D\u0438\u0438', 'https://te-st.ru/tag/antivoennye-kampanii/feed'),
        ('\u0411\u043B\u043E\u043A\u0447\u0435\u0439\u043D', 'https://te-st.ru/tag/blockchain/feed'),
        ('\u0411\u043E\u0440\u044C\u0431\u0430 \u0441 \u0431\u0435\u0434\u043D\u043E\u0441\u0442\u044C\u044E', 'https://te-st.ru/tag/poverty/feed'),
        ('\u0412\u0430\u043A\u0430\u043D\u0441\u0438\u0438 \u0432 \u041D\u041A\u041E', 'https://te-st.ru/tag/vacancies/feed'),
        ('\u0412\u0438\u0437\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F', 'https://te-st.ru/tag/visualization/feed'),
        ('\u0413\u0435\u043D\u0434\u0435\u0440\u043D\u043E\u0435 \u043D\u0430\u0441\u0438\u043B\u0438\u0435', 'https://te-st.ru/tag/gender-violence/feed'),
        ('\u0413\u0440\u0430\u0436\u0434\u0430\u043D\u0441\u043A\u0438\u0435 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://te-st.ru/tag/civictech/feed'),
        ('\u0418\u043C\u043F\u0430\u043A\u0442-\u0438\u043D\u0432\u0435\u0441\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435', 'https://te-st.ru/tag/impact-investing/feed'),
        ('\u0418\u043D\u043A\u043B\u044E\u0437\u0438\u0432\u043D\u044B\u0439 \u0434\u0438\u0437\u0430\u0439\u043D', 'https://te-st.ru/tag/inclusive-design/feed'),
        ('\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0438 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F', 'https://te-st.ru/tag/tools/feed'),
        ('\u0418\u043D\u0444\u043E\u0431\u0438\u0437\u043D\u0435\u0441', 'https://te-st.ru/tag/infobusiness/feed'),
        ('\u0418\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \u041D\u041A\u041E', 'https://te-st.ru/tag/research/feed'),
        ('\u0418\u0442\u043E\u0433\u0438 \u0433\u043E\u0434\u0430', 'https://te-st.ru/tag/results-of-the-year/feed'),
        ('\u041A\u0430\u043D\u0434\u0438\u043D\u0441\u043A\u0438\u0439', 'https://te-st.ru/tag/kandinsky/feed'),
        ('\u041A\u0430\u0440\u0442\u044B \u0438 \u043A\u0430\u0440\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u044F', 'https://te-st.ru/tag/maps/feed'),
        ('\u041A\u043E\u043C\u043C\u0443\u043D\u0438\u043A\u0430\u0446\u0438\u044F', 'https://te-st.ru/tag/discussion/feed'),
        ('\u041A\u043E\u0440\u043E\u043D\u0430\u0432\u0438\u0440\u0443\u0441', 'https://te-st.ru/tag/coronavirus/feed'),
        ('\u041A\u0440\u0430\u0443\u0434\u0441\u043E\u0440\u0441\u0438\u043D\u0433', 'https://te-st.ru/tag/crowdsourcing/feed'),
        ('\u041A\u0440\u0430\u0443\u0434\u0444\u0430\u043D\u0434\u0438\u043D\u0433', 'https://te-st.ru/tag/crowdfunding/feed'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430 \u0438 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://te-st.ru/tag/tech-culture/feed'),
        ('\u041B\u0430\u0431\u043E\u0440\u0430\u0442\u043E\u0440\u0438\u044F', 'https://te-st.ru/tag/laboratory/feed'),
        ('\u041B\u0438\u0434\u0435\u0440\u0441\u0442\u0432\u043E', 'https://te-st.ru/tag/leadership/feed'),
        ('\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433', 'https://te-st.ru/tag/marketing/feed'),
        ('\u041C\u0430\u0448\u0438\u043D\u043D\u043E\u0435 \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u0435', 'https://te-st.ru/tag/machine-learning/feed'),
        ('\u041C\u0435\u0434\u0438\u0446\u0438\u043D\u0441\u043A\u0438\u0435 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://te-st.ru/tag/medtech/feed'),
        ('\u041C\u0435\u043D\u0435\u0434\u0436\u043C\u0435\u043D\u0442', 'https://te-st.ru/tag/management/feed'),
        ('\u041C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u044B', 'https://te-st.ru/tag/messengers/feed'),
        ('\u041C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u0440\u0435\u0448\u0435\u043D\u0438\u044F', 'https://te-st.ru/tag/mobile/feed'),
        ('\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u043C\u043F\u0430\u043D\u0438\u0438', 'https://te-st.ru/tag/campaigning/feed'),
        ('\u041E\u043D\u043B\u0430\u0439\u043D-\u041B\u0435\u0439\u043A\u0430', 'https://te-st.ru/tag/online-leyka/feed'),
        ('\u041E\u043D\u043B\u0430\u0439\u043D-\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435', 'https://te-st.ru/tag/education-online/feed'),
        ('\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435', 'https://te-st.ru/tag/open-data/feed'),
        ('\u041E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043E\u0434', 'https://te-st.ru/tag/opensource/feed'),
        ('\u041F\u0430\u0441\u0435\u043A\u0430', 'https://te-st.ru/tag/paseka/feed'),
        ('\u041F\u0440\u0430\u0432\u043E\u0432\u0430\u044F \u0431\u0430\u0437\u0430', 'https://te-st.ru/tag/regulations/feed'),
        ('\u041F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435', 'https://te-st.ru/tag/programming/feed'),
        ('\u0420\u0435\u043B\u0438\u0437\u044B \u00AB\u041B\u0435\u0439\u043A\u0438\u00BB', 'https://te-st.ru/tag/leyka-release/feed'),
        ('\u0421\u0435\u043D\u0441\u043E\u0440\u044B', 'https://te-st.ru/tag/sensors/feed'),
        ('\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0432\u0438\u0434\u0435\u043E', 'https://te-st.ru/tag/video/feed'),
        ('\u0421\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u043E-\u043E\u0440\u0438\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0434\u0438\u0437\u0430\u0439\u043D', 'https://te-st.ru/tag/responsible-design/feed'),
        ('\u0421\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0435 \u043F\u0440\u0435\u0434\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u043E', 'https://te-st.ru/tag/social-entrepreneurship/feed'),
        ('\u0421\u0442\u0430\u0440\u0442\u0430\u043F\u044B', 'https://te-st.ru/tag/startups/feed'),
        ('\u0422\u0435\u043F\u043B\u0438\u0446\u0430.\u041A\u0443\u0440\u0441\u044B', 'https://te-st.ru/tag/teplitsa-kursy/feed'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438 \u0432 \u0431\u043E\u0440\u044C\u0431\u0435 \u0441 \u0440\u0430\u043A\u043E\u043C', 'https://te-st.ru/tag/cancer/feed'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438 \u0434\u043B\u044F \u043F\u043E\u0436\u0438\u043B\u044B\u0445', 'https://te-st.ru/tag/itforelderly/feed'),
        ('\u0422\u043E\u043A\u0438\u043E', 'https://te-st.ru/tag/tokio/feed'),
        ('\u0423\u0434\u0430\u043B\u0435\u043D\u043D\u0430\u044F \u0440\u0430\u0431\u043E\u0442\u0430', 'https://te-st.ru/tag/remote-work/feed'),
        ('\u0424\u0430\u043D\u0434\u0440\u0430\u0439\u0437\u0438\u043D\u0433', 'https://te-st.ru/tag/fundraising/feed'),
        ('\u0424\u043E\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438', 'https://te-st.ru/tag/photo/feed'),
        ('\u0426\u0438\u0444\u0440\u043E\u0432\u0430\u044F \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C', 'https://te-st.ru/tag/digital-security/feed'),
        ('\u0426\u0438\u0444\u0440\u043E\u0432\u0430\u044F \u0442\u0440\u0430\u043D\u0441\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F', 'https://te-st.ru/tag/digital-transformation/feed'),
        ('\u0426\u0438\u0444\u0440\u043E\u0432\u044B\u0435 \u043F\u0440\u0430\u0432\u0430', 'https://te-st.ru/tag/digital-rights/feed'),
        ('\u0427\u0430\u0442-\u0431\u043E\u0442\u044B', 'https://te-st.ru/tag/chatbots/feed'),
        ('\u042D\u043A\u043E\u043B\u043E\u0433\u0438\u044F', 'https://te-st.ru/tag/ecology/feed'),
        ('\u042D\u0442\u0438\u043A\u0430 \u0432 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F\u0445', 'https://te-st.ru/tag/ethics/feed'),
        ('IT-\u0432\u043E\u043B\u043E\u043D\u0442\u0435\u0440', 'https://te-st.ru/tag/itv/feed'),
        ('Meet and code', 'https://te-st.ru/tag/meet-and-code/feed'),
        ('PhilTech', 'https://te-st.ru/tag/philtech/feed'),
        ('Scrum', 'https://te-st.ru/tag/scrum/feed'),
        ('TeploDigital', 'https://te-st.ru/tag/teplodigital/feed'),
        ('UX/UI \u0434\u0438\u0437\u0430\u0439\u043D', 'https://te-st.ru/tag/uxui/feed'),
        ('VR/AR \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438', 'https://te-st.ru/tag/arvr/feed'),
        ('WordPress', 'https://te-st.ru/tag/wordpress/feed')
        ]

Такие дела: social journalism & fundraising platform for charitable projects. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TakieDela(BasicNewsRecipe):
    title           	  = '\u0422\u0430\u043A\u0438\u0435 \u0434\u0435\u043B\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0418\u0437\u0434\u0430\u043D\u0438\u0435 \u00AB\u0422\u0430\u043A\u0438\u0435 \u0434\u0435\u043B\u0430\u00BB \u043E\u0441\u0432\u0435\u0449\u0430\u0435\u0442 \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B, \u043F\u0438\u0448\u0435\u0442 \u043E \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u0445 \u043B\u044E\u0434\u0435\u0439 \u0441 \u0440\u0435\u0434\u043A\u0438\u043C\u0438 \u0437\u0430\u0431\u043E\u043B\u0435\u0432\u0430\u043D\u0438\u044F\u043C\u0438 \u0438 \u0438\u043D\u0432\u0430\u043B\u0438\u0434\u043D\u043E\u0441\u0442\u044C\u044E, \u043E \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0438 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0439 \u043C\u0435\u0434\u0438\u0446\u0438\u043D\u044B, \u0430 \u0442\u0430\u043A\u0436\u0435 \u043E \u0431\u043B\u0430\u0433\u043E\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u0438 \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0439 \u043E\u0431\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0435 \u0432 \u0420\u043E\u0441\u0441\u0438\u0438. \u0422\u0430\u043A\u0436\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u0432\u0437\u0430\u0438\u043C\u043E\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043D\u0435\u043A\u043E\u043C\u043C\u0435\u0440\u0447\u0435\u0441\u043A\u0438\u043C\u0438 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u044F\u043C\u0438, \u0441\u043E\u0431\u0438\u0440\u0430\u044F \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u043E \u0431\u043B\u0430\u0433\u043E\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445, \u0438 \u0437\u0430\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u0441\u0431\u043E\u0440\u043E\u043C \u0441\u0440\u0435\u0434\u0441\u0442\u0432 (\u043A\u0440\u0430\u0443\u0434\u0444\u0430\u043D\u0434\u0438\u043D\u0433\u043E\u043C) \u0434\u043B\u044F \u0444\u043E\u043D\u0434\u0430 \u00AB\u041D\u0443\u0436\u043D\u0430 \u043F\u043E\u043C\u043E\u0449\u044C\u00BB.'
    publisher             = '\u0411\u043B\u0430\u0433\u043E\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0444\u043E\u043D\u0434 \u00AB\u041D\u0443\u0436\u043D\u0430 \u041F\u043E\u043C\u043E\u0449\u044C\u00BB'
    category              = 'blog'
    cover_url = u'https://takiedela.ru/wp-content/themes/takiedela/assets/image/share/td.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    remove_empty_feeds = True
    oldest_article = 30
    max_articles_per_feed = 10

    remove_tags_before = dict(name='header')

    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='section', attrs={'class': 'b-post__materials b-line b-line_p-60 b-line_grey b-line_nomb'}),
        dict(name='section', attrs={'class': 'b-post-material__other b-line b-line_p-60 b-line_bg b-line_nomb'}),
        dict(name='div', attrs={'class': 'b-single__case-closed'}),
        dict(name='div', attrs={'class': 'b-line b-total-sum'}),
        dict(name='section', attrs={'class': 'b-post-material__help b-line b-line_p-60 b-line_grey b-line_nomb'}),
        dict(name='section', attrs={'class': 'b-line b-line_p-60 b-line_bg b-line_nopb b-line_nomb '}),
        dict(name='header', attrs={'class': 'np-header js-np-header'}),
        dict(name='div', attrs={'class': 'b-post__head-info__block b-post__head-info__block_views in-tablet'}),
        dict(name='div', attrs={'class': 'np-donate-form__bg np-donate-form__bg_border'}),
        dict(name='div', attrs={'class': 'b-photostory-help i-photostory-help'}),
        dict(name='div', attrs={'class': 'mistape_caption'}),
        dict(name='div', attrs={'class': 'b-photostory__inner'}),
        dict(name='div', attrs={'class': 'b-single__extra i-single__extra'}),
        dict(name='div', attrs={'class': 'b-post__help'}),
        dict(name='div', attrs={'class': 'b-post__other b-post__other_right'}),
        dict(name='div', attrs={'class': 'b-soc i-soc b-soc_blog b-soc_noscroll'}),
        dict(name='div', attrs={'class': 'np-socials np-socials_grid js-np-socials'}),
        dict(name='ul', attrs={'class': 'b-post__head-tags in-tablet-sm'}),
        dict(name='ul', attrs={'class': 'b-single__text__categories'}),
        dict(name='div', attrs={'class': 'b-donate-info js-donate-info'}),
        dict(name='div', attrs={'class': 'b-404__materials b-line b-line_grey'}),
        dict(name='div', attrs={'class': 'b-404__funds b-line'}),
        dict(name='div', attrs={'class': 'overlay'}),
        dict(name='div', attrs={'class': 'b-help-info-sticky'}),
        dict(name='div', attrs={'id': 'mistape_dialog'}),
        dict(name='footer'),
        dict(name='form', attrs={'id': 'help'}),
        dict(name='form', attrs={'id': 'form-3dsecure'})
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://takiedela.ru/feed/'),
        ('\u041F\u043E\u043C\u043E\u0433\u0430\u0435\u043C', 'https://takiedela.ru/topics/feed/'),
        ('\u041A\u043E\u043B\u043E\u043D\u043A\u0438', 'https://takiedela.ru/rubrics/columns/feed/'),
        ('\u041E\u0431\u044A\u044F\u0441\u043D\u0435\u043D\u0438\u044F', 'https://takiedela.ru/rubrics/explanations/feed/'),
        ('\u0424\u043E\u0442\u043E\u0438\u0441\u0442\u043E\u0440\u0438\u0438', 'https://takiedela.ru/rubrics/photo/feed/'),
        ('\u041F\u043E\u0440\u0442\u0440\u0435\u0442\u044B', 'https://takiedela.ru/rubrics/portret/feed/'),
        ('\u0420\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F', 'https://takiedela.ru/rubrics/rassledovaniya/feed/'),
        ('\u0421\u043B\u0443\u0447\u0430\u0438', 'https://takiedela.ru/genre/cases/feed/'),
        ('\u041A\u043E\u043D\u0442\u0435\u043A\u0441\u0442', 'https://takiedela.ru/genre/context/feed/'),
        ('\u0414\u0440\u0430\u043C\u044B', 'https://takiedela.ru/genre/drama/feed/'),
        ('\u0413\u0435\u0440\u043E\u0438', 'https://takiedela.ru/genre/heroes/feed/'),
        ('\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435 \u043D\u0430\u0441\u043B\u0435\u0434\u0438\u044F \u0438 \u0438\u0441\u0442\u043E\u0440\u0438\u0447\u0435\u0441\u043A\u043E\u0439 \u043F\u0430\u043C\u044F\u0442\u0438', 'https://takiedela.ru/category/cultural/feed/'),
        ('\u0414\u0435\u0442\u0441\u0442\u0432\u043E', 'https://takiedela.ru/category/deti/feed/'),
        ('\u0414\u0435\u0442\u0438 \u0441 \u043E\u0441\u043E\u0431\u0435\u043D\u043D\u043E\u0441\u0442\u044F\u043C\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044F', 'https://takiedela.ru/category/deti-s-osobennostyami-razvitiya/feed/'),
        ('\u0414\u0435\u0442\u0441\u043A\u0438\u0439 \u0434\u043E\u043C', 'https://takiedela.ru/category/detskiy-dom/feed/'),
        ('\u041A\u0430\u0442\u0430\u0441\u0442\u0440\u043E\u0444\u044B \u0438 \u0441\u0442\u0438\u0445\u0438\u0439\u043D\u044B\u0435 \u0431\u0435\u0434\u0441\u0442\u0432\u0438\u044F', 'https://takiedela.ru/category/disaster/feed/'),
        ('\u0425\u0440\u043E\u043D\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0438 \u043D\u0435\u0438\u0437\u043B\u0435\u0447\u0438\u043C\u044B\u0435 \u0437\u0430\u0431\u043E\u043B\u0435\u0432\u0430\u043D\u0438\u044F', 'https://takiedela.ru/category/illness/feed/'),
        ('\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u044B \u0438 \u0438\u0441\u043A\u0443\u0441\u0441\u0442\u0432\u0430', 'https://takiedela.ru/category/kultura/feed/'),
        ('\u041C\u0430\u0442\u0435\u0440\u0438 \u0438 \u0434\u0435\u0442\u0438', 'https://takiedela.ru/category/materi-i-deti/feed/'),
        ('\u041C\u0435\u0434\u0438\u0446\u0438\u043D\u0441\u043A\u0430\u044F \u043F\u043E\u043C\u043E\u0449\u044C', 'https://takiedela.ru/category/medical/feed/'),
        ('\u041C\u0435\u0434\u0438\u0446\u0438\u043D\u0430', 'https://takiedela.ru/category/medicina/feed/'),
        ('\u041B\u0413\u0411\u0422+', 'https://takiedela.ru/category/minorities/feed/'),
        ('\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u043E', 'https://takiedela.ru/category/obshhestvo/feed/'),
        ('\u041E\u043D\u043A\u043E\u043B\u043E\u0433\u0438\u044F', 'https://takiedela.ru/category/onkologiya/feed/'),
        ('\u0421\u0438\u0440\u043E\u0442\u0441\u0442\u0432\u043E', 'https://takiedela.ru/category/orphan/feed/'),
        ('\u0414\u0440\u0443\u0433\u043E\u0435', 'https://takiedela.ru/category/other/feed/'),
        ('\u041F\u043E\u043B\u0438\u0446\u0438\u044F', 'https://takiedela.ru/category/policiya/feed/'),
        ('\u041F\u0440\u0430\u0432\u043E\u0437\u0430\u0449\u0438\u0442\u0430', 'https://takiedela.ru/category/pravozashhita/feed/'),
        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', 'https://takiedela.ru/category/psikhologiya/feed/'),
        ('\u0416\u0435\u0440\u0442\u0432\u044B \u043D\u0430\u0441\u0438\u043B\u0438\u044F', 'https://takiedela.ru/category/rape/feed/'),
        ('\u0416\u0435\u0440\u0442\u0432\u044B \u0432\u043E\u0435\u043D\u043D\u044B\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439', 'https://takiedela.ru/category/victims-of-war/feed/'),
        ('\u042D\u043A\u043E\u043B\u043E\u0433\u0438\u044F', 'https://takiedela.ru/category/yekologiya/feed/'),
        ('\u042E\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043A\u0430\u044F \u043F\u043E\u043C\u043E\u0449\u044C', 'https://takiedela.ru/category/yuridicheskaya-pomoshh/feed/'),
        ('\u0416\u0435\u043D\u0449\u0438\u043D\u044B', 'https://takiedela.ru/category/zhenshhiny/feed/'),
        ('\u0416\u0438\u0432\u043E\u0442\u043D\u044B\u0435', 'https://takiedela.ru/category/zhivotnye/feed/')
        ]

Грани.Ру: daily internet newspaper. Favicon.
The website is blocked in Russia, so content is being downloaded from mirror site.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Grani(BasicNewsRecipe):
    title           	  = '\u0413\u0440\u0430\u043D\u0438.\u0420\u0443'
    __author__            = 'bugmen00t'
    description           = '\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u0430\u044F \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0433\u0430\u0437\u0435\u0442\u0430. \u041E\u0431\u0437\u043E\u0440\u044B \u0438 \u0430\u043D\u0430\u043B\u0438\u0437 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u0438\u0445 \u0438 \u043C\u0438\u0440\u043E\u0432\u044B\u0445 \u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439, \u0441\u0442\u0430\u0442\u044C\u0438 \u0438 \u0432\u0438\u0434\u0435\u043E \u043E \u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0437\u0430\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u044B\u0445.'
    publisher             = '\u041E\u041E\u041E "\u0424\u043B\u0430\u0432\u0443\u0441"'
    category              = 'newspaper'
    cover_url = u'https://graniru.org/files/96172.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    remove_empty_feeds = True
    oldest_article = 30
    max_articles_per_feed = 50

    remove_tags_before = dict(name='h3')

    remove_tags_after = dict(name='div', attrs={'class': 'main-text clearfix'}),

# Original feeds
#    feeds = [
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://graniru.org/export/all-atom.xml'),
#        ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://graniru.org/export/articles-atom.xml')
#        ]

        
# Feeds from mirror site
    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://grani2.appspot.com/export/all-atom.xml'),
        ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://grani2.appspot.com/export/articles-atom.xml'),
        ]

# Mirror site feeds transformation
    def print_version(self, url):
        return url.replace('https://graniru.org/', 'https://grani2.appspot.com/')
        ]

Зеркало недели: online Ukrainian analytical newspaper and news website. Favicon.
Russian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Zerkalo(BasicNewsRecipe):
    title           	  = '\u0417\u0435\u0440\u043A\u0430\u043B\u043E \u043D\u0435\u0434\u0435\u043B\u0438. \u0423\u043A\u0440\u0430\u0438\u043D\u0430'
    __author__            = 'bugmen00t'
    description           = '\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E-\u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E-\u0430\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0435\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A.'
    publisher             = '\u00AB\u0417\u0435\u0440\u043A\u0430\u043B\u043E \u043D\u0435\u0434\u0435\u043B\u0438. \u0423\u043A\u0440\u0430\u0438\u043D\u0430\u00BB'
    category              = 'newspaper'
    cover_url = u'https://zn.ua/user/img/zn_no_photo_amp.png'
    language              = 'ru_UK'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    remove_empty_feeds = True
    oldest_article = 7
    max_articles_per_feed = 200

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'article_body'}),

    remove_tags =   [
        dict(name='span', attrs={'class': 'print print-art-js'}),
        dict(name='div', attrs={'class': 'questionnaire '}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='div', attrs={'class': 'telegram'}),
        dict(name='div', attrs={'class': 'mist_block'}),
        dict(name='div', attrs={'class': 'auth_articles_block'}),
        dict(name='div', attrs={'class': 'special_theme_news_block'}),
        dict(name='div', attrs={'class': 'article_attached acenter'}),
        dict(name='div', attrs={'class': 'article_left'}),
        dict(name='div', attrs={'class': 'top_social_holder'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://zn.ua/rus/rss/full.rss'),
 #       ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://zn.ua/rus/rss/articles.rss')
        ]
    
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup

Ukrainian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Zerkalo(BasicNewsRecipe):
    title           	  = '\u0414\u0437\u0435\u0440\u043A\u0430\u043B\u043E \u0442\u0438\u0436\u043D\u044F. \u0423\u043A\u0440\u0430\u0457\u043D\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0435 \u0456\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0432\u0438\u0434\u0430\u043D\u043D\u044F, \u0441\u0443\u0441\u043F\u0456\u043B\u044C\u043D\u043E-\u043F\u043E\u043B\u0456\u0442\u0438\u0447\u043D\u0438\u0439 \u0442\u0438\u0436\u043D\u0435\u0432\u0438\u043A.'
    publisher             = '\u0414\u0437\u0435\u0440\u043A\u0430\u043B\u043E \u0442\u0438\u0436\u043D\u044F. \u0423\u043A\u0440\u0430\u0457\u043D\u0430'
    category              = 'newspaper'
    cover_url = u'https://zn.ua/user/img/zn_no_photo_amp.png'
    language              = 'uk'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    remove_empty_feeds = True
    oldest_article = 7
    max_articles_per_feed = 200

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'article_body'}),

    remove_tags =   [
        dict(name='span', attrs={'class': 'print print-art-js'}),
        dict(name='div', attrs={'class': 'questionnaire '}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='div', attrs={'class': 'telegram'}),
        dict(name='div', attrs={'class': 'mist_block'}),
        dict(name='div', attrs={'class': 'auth_articles_block'}),
        dict(name='div', attrs={'class': 'special_theme_news_block'}),
        dict(name='div', attrs={'class': 'article_attached acenter'}),
        dict(name='div', attrs={'class': 'article_left'}),
        dict(name='div', attrs={'class': 'top_social_holder'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://zn.ua/ukr/rss/full.rss'),
 #       ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://zn.ua/ukr/rss/articles.rss')
        ]
    
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup
Attached Images
     
Attached Files
File Type: recipe tst.recipe (12.0 KB, 152 views)
File Type: recipe takiedela.recipe (10.0 KB, 150 views)
File Type: recipe grani.recipe (2.3 KB, 143 views)
File Type: recipe zn_ru.recipe (2.4 KB, 150 views)
File Type: recipe zn_ua.recipe (2.4 KB, 137 views)
bugmen00t is offline   Reply With Quote
Old 08-26-2022, 09:29 AM   #25
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 13 of ??)

Ukrainian sources.

Радіо Свобода: Prague-based Ukrainian-language TV channel founded by RFE/RL. Favicon.
Fixes needed:
  • In most of the aticles some images are missing
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes


class RadioSvoboda(BasicNewsRecipe):
    title = '\u0420\u0430\u0434\u0456\u043E \u0421\u0432\u043E\u0431\u043E\u0434\u0430'
    __author__ = 'bugmen00t'
    description = '\u0420\u0430\u0434\u0456\u043E\u0441\u0442\u0430\u043D\u0446\u0456\u044F \u0442\u0430 \u0456\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0432\u0438\u0434\u0430\u043D\u043D\u044F, \u044F\u043A\u0430 \u043F\u043E\u0437\u0438\u0446\u0456\u043E\u043D\u0443\u0454 \u0441\u0435\u0431\u0435 \u044F\u043A \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u0438\u0439 \u043D\u0435\u043A\u043E\u043C\u0435\u0440\u0446\u0456\u0439\u043D\u0438\u0439 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u043E-\u043D\u043E\u0432\u0438\u043D\u043D\u0438\u0439 \u0437\u0430\u0441\u0456\u0431 \u043C\u0430\u0441\u043E\u0432\u043E\u0457 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0457.'
    publisher = '\u0420\u0430\u0434\u0456\u043E \u0412\u0456\u043B\u044C\u043D\u0430 \u0404\u0432\u0440\u043E\u043F\u0430/\u0420\u0430\u0434\u0456\u043E \u0421\u0432\u043E\u0431\u043E\u0434\u0430 (\u0420\u0412\u0404/\u0420\u0421)'
    category = 'newspaper'
    cover_url = u'https://www.radiosvoboda.org/Content/responsive/RFE/uk-UA/img/top_logo_news.png'
    language = 'uk'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 7
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'id': 'article-content'})

    remove_tags =   [
        dict(name='p', attrs={'class': 'buttons btn--load-more'}),
        dict(name='div', attrs={'class': 'share--box'}),
        dict(name='div', attrs={'class': 'c-author__btns m-t-md'}),
        dict(name='div', attrs={'class': 'col-xs-12 col-md-4 pull-left live-blog-left'}),
        dict(name='aside'),
        dict(name='div', attrs={'class': 'c-blockquote c-blockquote--has-quote'}),
        dict(name='div', attrs={'class': 'media-block also-read'}),
        dict(name='div', attrs={'class': 'media-block-wrap'}),
        dict(name='div', attrs={'class': 'wsw__embed'}),
        dict(name='div', attrs={'id': 'comments'}),
        ]

    feeds = [
        ('\u0413\u043E\u043B\u043E\u0432\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.radiosvoboda.org/api/zrqiteuuir'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u041A\u043E\u0440\u043E\u043D\u0430\u0432\u0456\u0440\u0443\u0441', 'https://www.radiosvoboda.org/api/zqk_myekpymv'),
        ('\u041C\u0456\u0436\u043D\u0430\u0440\u043E\u0434\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.radiosvoboda.org/api/zipkqejjki'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430', 'https://www.radiosvoboda.org/api/zppkoe-jkp'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0415\u043A\u043E\u043D\u043E\u043C\u0456\u043A\u0430', 'https://www.radiosvoboda.org/api/zvpk_eo-kt'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0421\u0443\u0441\u043F\u0456\u043B\u044C\u0441\u0442\u0432\u043E', 'https://www.radiosvoboda.org/api/zjmkreybko'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u041F\u043E\u0434\u0456\u0457', 'https://www.radiosvoboda.org/api/ztpkyei-kr'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0421\u0432\u043E\u0431\u043E\u0434\u0430 \u0441\u043B\u043E\u0432\u0430', 'https://www.radiosvoboda.org/api/zmrjoebtjo'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u041A\u043E\u0440\u0443\u043F\u0446\u0456\u044F', 'https://www.radiosvoboda.org/api/zbobpoetgbpi'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0412\u0430\u0436\u043B\u0438\u0432\u0456', 'https://www.radiosvoboda.org/api/zmyqmvebromr'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438: \u0421\u043F\u043E\u0440\u0442', 'https://www.radiosvoboda.org/api/ztpmmyei-mmy'),
        ('\u041F\u0443\u0431\u043B\u0456\u043A\u0430\u0446\u0456\u0457', 'https://www.radiosvoboda.org/api/ziibp_ejgbpy'),
        ('\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430', 'https://www.radiosvoboda.org/api/ziqioejuip'),
        ('\u0421\u0443\u0441\u043F\u0456\u043B\u044C\u0441\u0442\u0432\u043E', 'https://www.radiosvoboda.org/api/z_qi_erkiy'),
        ('\u0415\u043A\u043E\u043D\u043E\u043C\u0456\u043A\u0430', 'https://www.radiosvoboda.org/api/zpyp_e-rm_'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://www.radiosvoboda.org/api/zmqipebui_'),
        ('\u0423\u043A\u0440\u0430\u0457\u043D\u0430', 'https://www.radiosvoboda.org/api/zqqirekuiq'),
        ('\u0421\u0432\u0456\u0442', 'https://www.radiosvoboda.org/api/zoqiqeguii'),
        ('\u0412\u0430\u0436\u043B\u0438\u0432\u0435 \u043D\u0430 \u0421\u0432\u043E\u0431\u043E\u0434\u0456', 'https://www.radiosvoboda.org/api/zkk-iqemmbii'),
        ('\u0412\u0456\u0439\u043D\u0430', 'https://www.radiosvoboda.org/api/zijqpqej_opi'),
        ('\u0414\u043E\u043D\u0431\u0430\u0441', 'https://www.radiosvoboda.org/api/z_rppyeruppy'),
        ('\u041A\u0440\u0438\u043C', 'https://www.radiosvoboda.org/api/zbypmietqmmi'),
        ('\u0422\u043E\u0447\u043A\u0430 \u0437\u043E\u0440\u0443', 'https://www.radiosvoboda.org/api/zpqiie-uim'),
        ('\u041A\u043E\u0440\u043E\u043D\u0430\u0432\u0456\u0440\u0443\u0441', 'https://www.radiosvoboda.org/api/zok_mvegpymt'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://www.radiosvoboda.org/api/z-q_mpevk_m_'),
        ('\u041A\u0438\u0442\u0430\u0439: \u0432\u0438\u043A\u043B\u0438\u043A\u0438', 'https://www.radiosvoboda.org/api/zkyymqemqvmo'),
        ('\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0430 \u0432\u0456\u0439\u043D\u0430', 'https://www.radiosvoboda.org/api/zuoppyepgppv'),
        ('\u0420\u0430\u0434\u0456\u043E \u0421\u0432\u043E\u0431\u043E\u0434\u0430 Weekly', 'https://www.radiosvoboda.org/api/zb_rmyetrqmv'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438 \u041F\u0440\u0438\u0430\u0437\u043E\u0432\u2019\u044F', 'https://www.radiosvoboda.org/api/zkkvmyemmtmy'),
        ('\u041F\u043E\u0434\u0456\u0457', 'https://www.radiosvoboda.org/api/z-ppp_ev-ppv'),
        ('\u0421\u0445\u0435\u043C\u0438', 'https://www.radiosvoboda.org/api/z-miprevbipo'),
        ('\u0421\u0445\u0435\u043C\u0438: \u0420\u043E\u0437\u0441\u043B\u0456\u0434\u0443\u0432\u0430\u043D\u043D\u044F', 'https://www.radiosvoboda.org/api/ztvppoeiompo'),
        ('\u0421\u0445\u0435\u043C\u0438: \u041D\u043E\u0432\u0438\u043D\u0438', 'https://www.radiosvoboda.org/api/zyibpreqjbpo')
        ]


Вікна: news program of Ukrainian TV-channel STB. Favicon.
Fixes needed:
  • Some images are missing
Russian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes


class ViknaSTB(BasicNewsRecipe):
    title = '\u0412\u0438\u043A\u043D\u0430-\u043D\u043E\u0432\u043E\u0441\u0442\u0438'
    __author__ = 'bugmen00t'
    description = '\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u0442\u0435\u043B\u0435\u043A\u0430\u043D\u0430\u043B\u0430 \u00AB\u0421\u0422\u0411\u00BB.'
    publisher = '\u041E\u041E\u041E \u201C\u0421\u041B\u041C \u041D\u043E\u0432\u043E\u0441\u0442\u0438\u201D'
    category = 'newspaper'
    cover_url = u'https://yt3.ggpht.com/QZxhLPDcqhjMitCDPWbzk-Zs-ILbGo3ww1iuV9SIE1k0iqjoOIctT2d4BdyEsSAR6yWsbKbGWg=s900-c-k-c0x00ffffff-no-rj'
    language = 'ru_UK'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 3
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'content-wrapper'})

    remove_tags =   [
         dict(name='div', attrs={'class': 'share-content-wrapper flex-wrapper'}),
         dict(name='div', attrs={'class': 'sticky-wrapper'}),
         dict(name='div', attrs={'class': 'promo-wrapper'}),
         dict(name='div', attrs={'class': 'mn-wrapper'}),
         dict(name='div', attrs={'class': 'news-tags border-btm-grey'})
        ]

    feeds = [
        ('\u0412\u0456\u043A\u043D\u0430', 'https://vikna.tv/ru/feed/')
        ]

Ukrainian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes


class ViknaSTB(BasicNewsRecipe):
    title = '\u0412\u0456\u043A\u043D\u0430-\u043D\u043E\u0432\u0438\u043D\u0438'
    __author__ = 'bugmen00t'
    description = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0430 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0430 \u0442\u0435\u043B\u0435\u043A\u0430\u043D\u0430\u043B\u0443 \u00AB\u0421\u0422\u0411\u00BB.'
    publisher = '\u0422\u041E\u0412 \u201C\u0421\u041B\u041C \u041D\u043E\u0432\u0438\u043D\u0438\u201D'
    category = 'newspaper'
    cover_url = u'https://yt3.ggpht.com/QZxhLPDcqhjMitCDPWbzk-Zs-ILbGo3ww1iuV9SIE1k0iqjoOIctT2d4BdyEsSAR6yWsbKbGWg=s900-c-k-c0x00ffffff-no-rj'
    language = 'uk'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 3
    max_articles_per_feed = 20

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'content-wrapper'})

    remove_tags =   [
         dict(name='div', attrs={'class': 'share-content-wrapper flex-wrapper'}),
         dict(name='div', attrs={'class': 'sticky-wrapper'}),
         dict(name='div', attrs={'class': 'promo-wrapper'}),
         dict(name='div', attrs={'class': 'mn-wrapper'}),
         dict(name='div', attrs={'class': 'news-tags border-btm-grey'})
        ]

    feeds = [
        ('\u0412\u0456\u043A\u043D\u0430', 'https://vikna.tv/feed/')
        ]


Gazeta.ua: web-wersion of Ukrainian newspaper covering politics, economics, culture, sport, arts, and other different topics. Favicon.
Fixes needed:
  • Thumbnails instead of full-size images in images set
  • Could not handle Telegram redirects and inlines
  • Minor in-text ads
Russian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes

class GazetaUA(BasicNewsRecipe):
    title = 'Gazeta.ua'
    __author__ = 'bugmen00t'
    description = '\u0412\u0441\u0435\u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0430\u044F \u043E\u043D-\u043B\u0430\u0439\u043D \u0433\u0430\u0437\u0435\u0442\u0430. \u041E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435 \u0438 \u0432 \u043C\u0438\u0440\u0435: \u0441\u043E\u0431\u044B\u0442\u0438\u044F, \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430, \u0441\u043F\u043E\u0440\u0442, \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u0430.'
    publisher = '\u0418\u0437\u0434\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0430\u044F \u0433\u0440\u0443\u043F\u043F\u0430 "\u041D\u043E\u0432\u0430 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F"'
    category = 'newspaper'
    cover_url = u'https://static2.gazeta.ua/img2/cache/preview/1064/1064219_w_450.jpg'
    language = 'ru_UK'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 3
    max_articles_per_feed = 50

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='section', attrs={'class': 'article-content clearfix'})

    remove_tags =   [
         dict(name='div', attrs={'class': 'mt5'}),
         dict(name='p', attrs={'id': 'mce_0'}),
         dict(name='p', attrs={'id': 'mce_1'}),
         dict(name='p', attrs={'id': 'mce_2'}),
         dict(name='p', attrs={'id': 'mce_3'}),
         dict(name='p', attrs={'id': 'mce_4'}),
         dict(name='p', attrs={'id': 'mce_5'}),
         dict(name='p', attrs={'id': 'mce_6'}),
         dict(name='p', attrs={'id': 'mce_7'}),
         dict(name='p', attrs={'id': 'mce_8'}),
         dict(name='p', attrs={'id': 'mce_9'}),
         dict(name='p', attrs={'id': 'mce_10'}),
         dict(name='p', attrs={'id': 'mce_11'}),
         dict(name='p', attrs={'id': 'mce_12'}),
         dict(name='p', attrs={'id': 'mce_13'}),
         dict(name='p', attrs={'id': 'mce_14'}),
         dict(name='p', attrs={'id': 'mce_15'}),
         dict(name='p', attrs={'id': 'mce_16'}),
         dict(name='section', attrs={'class': 'w-marker-photo lg'})
        ]

    feeds = [
        ('Gazeta.ua', 'https://gazeta.ua/ru/rss')
        ]

Ukrainian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes

class GazetaUA(BasicNewsRecipe):
    title = 'Gazeta.ua'
    __author__ = 'bugmen00t'
    description = '\u0412\u0441\u0435\u0443\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430 \u043E\u043D-\u043B\u0430\u0439\u043D \u0433\u0430\u0437\u0435\u0442\u0430. \u041E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438 \u0437 \u0423\u043A\u0440\u0430\u0457\u043D\u0438 \u0456 \u0441\u0432\u0456\u0442\u0443: \u043F\u043E\u0434\u0456\u0457, \u043F\u043E\u043B\u0456\u0442\u0438\u043A\u0430, \u0441\u043F\u043E\u0440\u0442, \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u0430.'
    publisher = '\u0422\u041E\u0412 "\u0412\u0438\u0434\u0430\u0432\u043D\u0438\u0447\u0430 \u043A\u043E\u043C\u043F\u0430\u043D\u0456\u044F "\u041D\u043E\u0432\u0430 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F"'
    category = 'newspaper'
    cover_url = u'https://static2.gazeta.ua/img2/cache/preview/1064/1064219_w_450.jpg'
    language = 'uk'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 3
    max_articles_per_feed = 50

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='section', attrs={'class': 'article-content clearfix'})

    remove_tags =   [
         dict(name='div', attrs={'class': 'mt5'}),
         dict(name='p', attrs={'id': 'mce_0'}),
         dict(name='p', attrs={'id': 'mce_1'}),
         dict(name='p', attrs={'id': 'mce_2'}),
         dict(name='p', attrs={'id': 'mce_3'}),
         dict(name='p', attrs={'id': 'mce_4'}),
         dict(name='p', attrs={'id': 'mce_5'}),
         dict(name='p', attrs={'id': 'mce_6'}),
         dict(name='p', attrs={'id': 'mce_7'}),
         dict(name='p', attrs={'id': 'mce_8'}),
         dict(name='p', attrs={'id': 'mce_9'}),
         dict(name='p', attrs={'id': 'mce_10'}),
         dict(name='p', attrs={'id': 'mce_11'}),
         dict(name='p', attrs={'id': 'mce_12'}),
         dict(name='p', attrs={'id': 'mce_13'}),
         dict(name='p', attrs={'id': 'mce_14'}),
         dict(name='p', attrs={'id': 'mce_15'}),
         dict(name='p', attrs={'id': 'mce_16'}),
         dict(name='section', attrs={'class': 'w-marker-photo lg'})
        ]

    feeds = [
        ('Gazeta.ua', 'https://gazeta.ua/rss')
        ]


Fix for Новая Вкладка (newtab.recipe): updated RSS URL.

Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe


class NewTab(BasicNewsRecipe):
    title = '\u041D\u043E\u0432\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430'
    __author__ = 'bugmen00t'
    description = '\u041F\u043B\u043E\u0449\u0430\u0434\u043A\u0430 \u0434\u043B\u044F \u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438 \u0440\u0435\u043F\u043E\u0440\u0442\u0430\u0436\u0435\u0439 \u0438 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043E \u0442\u043E\u043C, \u043A\u0430\u043A \u043C\u0435\u043D\u044F\u044E\u0442\u0441\u044F \u0440\u0435\u0433\u0438\u043E\u043D\u044B \u0420\u043E\u0441\u0441\u0438\u0438 \u043F\u043E\u0441\u043B\u0435 24 \u0444\u0435\u0432\u0440\u0430\u043B\u044F 2022 \u0433\u043E\u0434\u0430.'
    publisher = '\u041C\u0438\u0445\u0430\u0438\u043B \u0414\u0430\u043D\u0438\u043B\u043E\u0432\u0438\u0447'
    category = 'blog'
    cover_url = u'https://static.tildacdn.com/tild3765-3961-4337-b366-323437626331/thenewtab-sn.jpg'
    language = 'ru'
    no_stylesheets = True
    remove_javascript = False
    auto_cleanup = False
    oldest_article = 30
    max_articles_per_feed = 10

    remove_tags_before = dict(name='h1')

    remove_tags = [
        dict(name='div', attrs={'class': 't-popup'}),
        dict(name='div', attrs={'class': 't185'}),
        dict(name='div', attrs={'class': 't403'}),
        dict(name='div', attrs={'class': 't404'}),
        dict(name='div', attrs={'class': 't134'}),
        dict(name='div', attrs={'class': 'sp-form-fields-wrapper'})
    ]

    feeds = [
        ('\u041D\u043E\u0432\u0430\u044F \u0432\u043A\u043B\u0430\u0434\u043A\u0430','https://thenewtab.io/feed/')
        ]

    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-original': True}):
            img['src'] = img['data-original']
        return soup
Attached Images
     
Attached Files
File Type: recipe radiosvoboda_ua.recipe (6.5 KB, 141 views)
File Type: recipe vikna_ru.recipe (1.6 KB, 139 views)
File Type: recipe vikna_ua.recipe (1.6 KB, 138 views)
File Type: recipe gazetaua_ru.recipe (52 Bytes, 157 views)
File Type: recipe gazetaua_ua.recipe (52 Bytes, 167 views)
File Type: recipe newtab.recipe (1.8 KB, 137 views)
bugmen00t is offline   Reply With Quote
Old 10-02-2022, 04:58 AM   #26
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
Not-so-quick fixes

Fix for Russian and Ukrainian editions of Gazeta.ua (gazetaua_ua.recipe & gazetaua_ru.recipe) as I somehow managed to upload empty files last time.

Fix for English version of Холод (kholod_en.recipe): updated RSS URL.

Language code fix for Dingoo A320. Русский ресурс (dingoo_a320.recipe) and Ria Novosti (rian_eng.recipe). They're dead for many years though.

Language code fix for The Moscow Times by Darko Miletic and Sujata Raman (moscow_times.recipe). There're two different recipes in Calibre now (this one with text-only content and my own with text & images), so I dared to add "(light version)" to the original title of this recipe.
Attached Files
File Type: recipe gazetaua_ru.recipe (2.5 KB, 137 views)
File Type: recipe gazetaua_ua.recipe (2.4 KB, 139 views)
File Type: recipe kholod_en.recipe (1.1 KB, 120 views)
File Type: recipe dingoo_a320.recipe (985 Bytes, 120 views)
File Type: recipe rian_eng.recipe (1.1 KB, 132 views)
File Type: recipe moscow_times.recipe (1.5 KB, 128 views)
bugmen00t is offline   Reply With Quote
Old 08-08-2023, 12:25 PM   #27
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New/fixed Russian and Ukrainian recipes (part 14)

UA-Футбол: soccer news from Ukraine and around the world. Favicon.
Fixes needed:
  • Text artifacts in articles with complex formatting (live feeds etc.)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes

class UAFootball(BasicNewsRecipe):

#Russian version
#    title = 'UA-\u0424\u0443\u0442\u0431\u043E\u043B'
#    description = '\u0410\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0435 \u0442\u0435\u043C\u044B \u0444\u0443\u0442\u0431\u043E\u043B\u044C\u043D\u043E\u0439 \u0436\u0438\u0437\u043D\u0438 \u0423\u043A\u0440\u0430\u0438\u043D\u044B \u0438 \u0432\u0441\u0435\u0433\u043E \u043C\u0438\u0440\u0430.'
#    language = 'ru_UK'
#    feeds = [
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u0444\u0443\u0442\u0431\u043E\u043B\u0430', 'https://www.ua-football.com/rss/all.xml')
#        ]

#Ukrainian version
    title = 'UA-\u0424\u0443\u0442\u0431\u043E\u043B'
    description = '\u0410\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u0456 \u0442\u0435\u043C\u0438 \u0444\u0443\u0442\u0431\u043E\u043B\u044C\u043D\u043E\u0433\u043E \u0436\u0438\u0442\u0442\u044F \u0423\u043A\u0440\u0430\u0457\u043D\u0438 \u0442\u0430 \u0432\u0441\u044C\u043E\u0433\u043E \u0441\u0432\u0456\u0442\u0443.'
    language = 'uk'
    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://www.ua-football.com/ua/rss/all.xml')
        ]

    __author__ = 'bugmen00t'
    publisher = '1766 TEAM EOOD'
    category = 'news'
    cover_url = u'https://yt3.googleusercontent.com/11FSvKeWcjFhzKrO7nXZdc-I__UeZ0mhZwbwyOHtnx_1-q6d0zQ2LbOt2duNCY06JVg2cGXS-g=s900-c-k-c0x00ffffff-no-rj'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 7
    max_articles_per_feed = 200

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'show-post'})

    remove_tags =   [
         dict(name='form'),
         dict(name='iframe'),
         dict(name='div', attrs={'class': 'language'}),
         dict(name='div', attrs={'class': 'article__read-also'}),
         dict(name='div', attrs={'class': 'card-player'}),
         dict(name='div', attrs={'class': 'show-post-socials'})
         ]

# Replacing articles in Ukraininan for RU-feed
#    def print_version(self, url):
#        return url.replace('ua-football.com/ua/', 'ua-football.com/')


Football.ua: soccer news portal from Ukraine. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe, classes

class FootballUA(BasicNewsRecipe):
    title = 'Football.UA'
    __author__ = 'bugmen00t'
    description = '\u0421\u043F\u043E\u0440\u0442\u0438\u0432\u043D\u0438\u0439 \u043F\u043E\u0440\u0442\u0430\u043B \u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0456, \u043F\u0440\u0438\u0441\u0432\u044F\u0447\u0435\u043D\u0438\u0439 \u043B\u0438\u0448\u0435 \u0444\u0443\u0442\u0431\u043E\u043B\u0443.'
    publisher = 'United Media Holding group'
    category = 'news'
    cover_url = u'https://s.ill.in.ua/i/news/570x380/212/212438.jpg'
    language = 'uk'
    no_stylesheets = False
    remove_javascript = False
    auto_cleanup = False
    remove_empty_feeds = True
    oldest_article = 3
    max_articles_per_feed = 20

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='article')

    remove_tags =   [
         dict(name='div', attrs={'class': 'bottom-info'}),
         dict(name='div', attrs={'class': 'social-buttons'})
        ]

    feeds = [
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://football.ua/rss2.ashx'),
        ]


UNIAN.net: Ukrainian Independent News Agency of News, one of the most cited source of news from across Ukraine. Favicon
Russian version (fixed)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe


class Unian(BasicNewsRecipe):
    title = '\u0423\u041D\u0418\u0410\u041D '
    description = 'Украинское Независимое Информационное Агентство Новостей – первое в Украине и самое большое независимое информационное агентство, основанное в 1993 году, лидер среди новостных медиа страны, самый цитируемый источник новостей о событиях в стране.'  # noqa
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 7
    max_articles_per_feed = 100
    language = 'ru_UK'
    cover_url = 'https://www.unian.net/images/unian-512x512.png'
    auto_cleanup = False
    no_stylesheets = True

    remove_tags_before = dict(name='h1')
    remove_tags_after = dict(name='div', attrs={'class': 'article-text'})
    remove_tags = [
        dict(name='span', attrs={'class': 'article__info-item comments'}),
        dict(name='span', attrs={'class': 'article__info-item views'}),
        dict(name='div', attrs={'class': 'read-also-slider'}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'})
    ]

    feeds = [
    (u'\u0423\u041D\u0418\u0410\u041D', u'https://rss.unian.net/site/news_rus.rss')
    ]

    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup

Ukrainian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe


class Unian(BasicNewsRecipe):
    title = '\u0423\u041D\u0406\u0410\u041D'
    description = '\u0423\u041D\u0406\u0410\u041D (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0435 \u041D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u0435 \u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0410\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u041D\u043E\u0432\u0438\u043D) - \u043F\u0435\u0440\u0448\u0435 \u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0456 \u0442\u0430 \u043D\u0430\u0439\u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0435\u0437\u0430\u043B\u0435\u0436\u043D\u0435 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E, \u0437\u0430\u0441\u043D\u043E\u0432\u0430\u043D\u0435 1993 \u0440\u043E\u043A\u0443, \u043B\u0456\u0434\u0435\u0440 \u0441\u0435\u0440\u0435\u0434 \u043D\u043E\u0432\u0438\u043D\u043D\u0438\u0445 \u043C\u0435\u0434\u0456\u0430 \u043A\u0440\u0430\u0457\u043D\u0438, \u043D\u0430\u0439\u0431\u0456\u043B\u044C\u0448 \u0446\u0438\u0442\u043E\u0432\u0430\u043D\u0435 \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u043D\u043E\u0432\u0438\u043D \u043F\u0440\u043E \u043F\u043E\u0434\u0456\u0457 \u0432 \u043A\u0440\u0430\u0457\u043D\u0456.'
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 7
    max_articles_per_feed = 100
    language = 'uk'
    cover_url = 'https://www.unian.ua/images/unian-512x512.png'
    auto_cleanup = False
    no_stylesheets = True

    remove_tags_before = dict(name='h1')
    remove_tags_after = dict(name='div', attrs={'class': 'article-text'})
    remove_tags = [
        dict(name='span', attrs={'class': 'article__info-item comments'}),
        dict(name='span', attrs={'class': 'article__info-item views'}),
        dict(name='div', attrs={'class': 'read-also-slider'}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'})
    ]

    feeds = [
    (u'\u0423\u041D\u0406\u0410\u041D', u'https://rss.unian.net/site/news_ukr.rss')
    ]

    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup

English version (no updates since April 2023)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe

class Unian(BasicNewsRecipe):
    title = 'UNIAN'
    description = 'UNIAN (Ukrainian Independent News Agency of News) is the largest independent news agency, first in Ukraine, founded in 1993, remaining the leader among the country\'s news media, being the most cited source of news from across Ukraine.'
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 30
    max_articles_per_feed = 100
    language = 'en_UK'
    cover_url = 'https://www.unian.info/images/unian-512x512.png'
    auto_cleanup = False
    no_stylesheets = True

    remove_tags_before = dict(name='h1')
    remove_tags_after = dict(name='div', attrs={'class': 'article-text'})
    remove_tags = [
        dict(name='span', attrs={'class': 'article__info-item comments'}),
        dict(name='span', attrs={'class': 'article__info-item views'}),
        dict(name='div', attrs={'class': 'read-also-slider'}),
        dict(name='div', attrs={'class': 'nts-video-wrapper'})
    ]

    feeds = [
    (u'News Agency UNIAN', u'https://rss.unian.net/site/news_eng.rss')
    ]

    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup


ЭХО: reincarnated news portal by former Echo Moskvy journalists. Favicon. Replacememt for older defunct recipe
Fixes needed:
  • No images in articles (webp)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class EchoMsk(BasicNewsRecipe):
    title          	  = '\u042D\u0425\u041E'
    __author__            = 'bugmen00t'
    description           = '\u042D\u0425\u041E - \u043A\u0430\u043A \u043D\u0430 \u0441\u0442\u0430\u0440\u043E\u043C \u0434\u043E\u0431\u0440\u043E\u043C \u0440\u0430\u0434\u0438\u043E'
    publisher             = 'Radio Echo GmbH'
    category              = 'news'
    cover_url = u'https://echofm.online/logo.png'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 50

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='span', attrs={'class': 'sc-7b4cbb79-0 guzUFC'}),
        dict(name='div', attrs={'class': 'sc-f94c4ef5-0 frGiYu'}),
        dict(name='div', attrs={'class': 'sc-f94c4ef5-0 frGiYu'})
        ] 

    feeds = [
        ('\u0413\u043B\u0430\u0432\u043D\u043E\u0435', 'https://echofm.online/feed'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://echofm.online/news/feed'),
        ('\u041C\u043D\u0435\u043D\u0438\u044F', 'https://echofm.online/opinions/feed'),
        ('\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B', 'https://echofm.online/documents/feed')
    ]


Продолжение следует: digital media founded by Novaya Gazeta journalist Dmitry Kanygin. Favicon.
Fixes needed:
  • Some images are missing
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class ProSleduet(BasicNewsRecipe):
    title          	  = '\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442'
    __author__            = 'bugmen00t'
    description           = '\u0414\u0438\u0434\u0436\u0438\u0442\u0430\u043B-\u043F\u0440\u043E\u0435\u043A\u0442 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432 \u00AB\u041D\u043E\u0432\u043E\u0439 \u0433\u0430\u0437\u0435\u0442\u044B\u00BB'
    publisher             = 'Pavel Kanygin, Natalia Zhdanova'
    category              = 'news'
    cover_url = u'https://prosleduet.media/wp-content/themes/prosle/assets/img/logo.svg'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 20

    remove_tags_before = dict(name='div', attrs={'class': 'container'})
    
    remove_tags_after = dict(name='div', attrs={'class': 'container'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'ya-share2 ya-share2_inited'})
        ] 

    feeds = [
#        ('\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442', 'https://prosleduet.media/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://prosleduet.media/category/news/feed/'),
        ('\u041B\u044E\u0434\u0438', 'https://prosleduet.media/category/people/feed/'),
        ('\u0421\u044E\u0436\u0435\u0442\u044B', 'https://prosleduet.media/category/syuzhety/feed/'),
        ('\u041F\u043E\u0434\u043A\u0430\u0441\u0442\u044B', 'https://prosleduet.media/category/podcasts/feed/'),
        ('\u0420\u0430\u0437\u0431\u043E\u0440\u044B', 'https://prosleduet.media/category/details/feed/'),
        ('\u0413\u043B\u0443\u0431\u0438\u043D\u043D\u0430\u044F \u0420\u043E\u0441\u0441\u0438\u044F', 'https://prosleduet.media/category/glubinnaya-rossiya/feed/')
    ]
Attached Images
       
Attached Files
File Type: recipe ua_fooball.recipe (2.3 KB, 83 views)
File Type: recipe footballua.recipe (1.2 KB, 86 views)
File Type: recipe unian_net.recipe (1.6 KB, 74 views)
File Type: recipe unian_net_ua.recipe (2.3 KB, 84 views)
File Type: recipe unian_net_en.recipe (1.3 KB, 84 views)
File Type: recipe echo_moskvy.recipe (1.5 KB, 85 views)
File Type: recipe prosleduet.recipe (2.1 KB, 82 views)
bugmen00t is offline   Reply With Quote
Old 07-31-2024, 09:29 AM   #28
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
Fixed Russian and Ukrainian recipes

Fixed Бумага recipe (paperpaper.recipe): reverted RSS URL back to main site as mirror doesn't work anymore.

Fixed Новая Газета recipe (novaya_gazeta.recipe): updated RSS URL.

Optimised Компьютерра (kompiutierra.recipe) and ЛІГА.net (liganet_ru.recipe & liganet_ua.recipe) recipes: minor layout cleanup.

Optimised Russian & Ukrainian versions of Украинские Национальные Новости (unn_ru.recipe) / Українські Національні Новини (unn_ua.recipe) because resulting files were too big and/or requred too much time for Calibre to process.

Language update (from "ru" to "ru_UK") for Ukrainian sources in Russian: ЛІГА.net (liganet_ru.recipe), НВ («Новое время») (nv_ru.recipe), Освіта.ua (osvitaua_ru.recipe), Украинская правда (pravda_ukraine_ru.recipe), РБК-Украина (rbcua_ru.recipe), Укринформ (ukrinform_ru.recipe), УНИАН (unian_net.recipe), Украинские Национальные Новости (unn_ru.recipe), Викна-новости (vikna_ru.recipe) and Зеркало недели. Украина (zn_ru.recipe).
Attached Files
File Type: recipe paperpaper.recipe (3.6 KB, 42 views)
File Type: recipe novaya_gazeta.recipe (487 Bytes, 37 views)
File Type: recipe kompiutierra.recipe (1.5 KB, 40 views)
File Type: recipe liganet_ru.recipe (8.7 KB, 41 views)
File Type: recipe liganet_ua.recipe (3.1 KB, 37 views)
File Type: recipe unn_ru.recipe (4.4 KB, 37 views)
File Type: recipe unn_ua.recipe (4.3 KB, 38 views)
File Type: recipe nv_ru.recipe (5.0 KB, 40 views)
File Type: recipe osvitaua_ru.recipe (1.3 KB, 37 views)
File Type: recipe pravda_ukraine_ru.recipe (3.2 KB, 36 views)
File Type: recipe rbcua_ru.recipe (1.7 KB, 34 views)
File Type: recipe ukrinform_ru.recipe (3.7 KB, 33 views)
File Type: recipe unian_net.recipe (1.3 KB, 41 views)
File Type: recipe vikna_ru.recipe (1.6 KB, 38 views)
File Type: recipe zn_ru.recipe (2.3 KB, 41 views)
bugmen00t is offline   Reply With Quote
Old 08-13-2024, 06:07 PM   #29
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New recipes (part 14)

Wicomix: comics & manga reviews (in Russain). Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class WiComix(BasicNewsRecipe):
    title          	  = 'Wicomix'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u043E \u043F\u0438\u0448\u0435\u043C \u043F\u0440\u043E \u043A\u043E\u043C\u0438\u043A\u0441\u044B \u0438 \u043C\u0430\u043D\u0433\u0443 \u0432 \u0420\u043E\u0441\u0441\u0438\u0438.'
    publisher             = '\u0421\u0435\u0440\u0433\u0435\u0439 \u041E\u0440\u0435\u0448\u043A\u0438\u043D'
    category              = 'blog'
    cover_url = u'https://wicomix.files.wordpress.com/2016/03/10865972_581683525300298_6873875730458476144_o.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 10

    remove_tags_before = dict(name='article')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
#        dict(name='div', attrs={'class': 'author-meta'}),
        dict(name='div', attrs={'id': 'jp-post-flair'}),
        dict(name='footer', attrs={'class': 'entry-meta'})
        ] 

    feeds = [
        ('\u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438', 'https://wicomix.com/feed/')
#        ('\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438', 'https://wicomix.com/comments/feed/')
    ]


dev.ua: Ukrainian IT and tech news. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class WiComix(BasicNewsRecipe):
    title          	  = 'dev.ua'
    __author__            = 'bugmen00t'
    publisher             = '\u0422\u041E\u0412 \u00AB\u0414\u0435\u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0430\u00BB'
    category              = 'news'
    cover_url = u'https://jobs.dev.ua/storage/images/34/70/82/79/original/af4c5c155ec48ed68e1c77ca26a8f0b0.jpg'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 3
    max_articles_per_feed = 30
    description           = '\u041C\u0435\u0434\u0456\u0430 \u043F\u0440\u043E \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0456\u0457, \u0456\u043D\u043D\u043E\u0432\u0430\u0446\u0456\u0457, \u0432\u0438\u043D\u0430\u0445\u043E\u0434\u0438 \u0432 \u0423\u043A\u0440\u0430\u0457\u043D\u0456 \u0442\u0430 \u0437\u0430 \u0457\u0457 \u043C\u0435\u0436\u0430\u043C\u0438. \u041F\u0440\u043E \u0442\u0435, \u044F\u043A \u0432\u043E\u043D\u0438 \u0432\u043F\u043B\u0438\u0432\u0430\u044E\u0442\u044C \u043D\u0430 \u0436\u0438\u0442\u0442\u044F \u043B\u044E\u0434\u0435\u0439.'
    language              = 'uk'

    remove_tags_before = dict(name='div', attrs={'class': 'article__header'})
    
    remove_tags_after = dict(name='div', attrs={'class': 'article__body'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'article__reference article__reference_header'}),
        dict(name='div', attrs={'class': 'my-lg-5'}),
        dict(name='div', attrs={'class': 'video '}),
        dict(name='figure', attrs={'class': 'incut'}),
        dict(name='figure', attrs={'class': 'global-incut'})
        ] 

    feeds = [
        ('dev.ua', 'https://dev.ua/rss')
    ]


Полигон: independent Russian news site. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class Poligon(BasicNewsRecipe):
    title          	  = '\u041F\u043E\u043B\u0438\u0433\u043E\u043D'
    __author__            = 'bugmen00t'
    description           = '\u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0435 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u0432\u044B\u043F\u0443\u0441\u043A\u0430\u0435\u043C\u043E\u0435 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0430\u043C\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u0438\u0445 \u0438\u0437\u0434\u0430\u043D\u0438\u0439, \u043F\u043E\u0434\u0432\u0435\u0440\u0433\u0448\u0438\u0445\u0441\u044F \u0434\u0430\u0432\u043B\u0435\u043D\u0438\u044E \u0441\u043E \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u0433\u043E\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0430. \u041F\u0438\u0448\u0435\u043C \u043E \u0420\u043E\u0441\u0441\u0438\u0438 \u0438 \u043D\u0435 \u0442\u043E\u043B\u044C\u043A\u043E.'
    publisher             = 'poligon.media'
    category              = 'news'
    cover_url = u'https://www.plgnmedia.io/wp-content/uploads/2022/02/poligon-share.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 10

    remove_tags_after = dict(name='article')

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://poligonmedia.io/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://poligonmedia.io/category/news/feed/'),
        ('\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://poligonmedia.io/category/int/feed/'),
        ('\u0420\u0430\u0441\u043A\u043B\u0430\u0434', 'https://poligonmedia.io/category/rasklad/feed/'),
        ('\u0420\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F', 'https://poligonmedia.io/category/rassled/feed/'),
        ('\u0420\u0435\u043F\u043E\u0440\u0442\u0430\u0436', 'https://poligonmedia.io/category/reportazh/feed/'),
        ('\u041C\u043E\u0436\u0435\u043C \u043E\u0431\u044A\u044F\u0441\u043D\u0438\u0442\u044C', 'https://poligonmedia.io/category/mozhem-obyasnit/feed/'),
        ('\u0418\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F', 'https://poligonmedia.io/category/issledovaniya/feed/'),
        ('English', 'https://poligon.media/category/eng/feed/')
    ]


Before We Go blog: Fantasy, Sci-Fi and Graphic Novel reviews. Favicon.
Spoiler:
Code:
 #!/usr/bin/env python
 # vim:fileencoding=utf-8
 
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe
 
class BeforeWeGo(BasicNewsRecipe):
    title          	  = 'Before We Go'
    __author__            = 'bugmen00t'
    description           = 'Before We Go Blog is a collective of Fantasy, Sci-Fi and Graphic Novel fans from around the world, passionate about providing awesome, enjoyable reviews for anyone who loves a good book!'
    publisher             = 'BEFOREWEGOBLOG'
    category              = 'blog'
#     cover_url = u'https://i0.wp.com/beforewegoblog.com/wp-content/uploads/2021/09/beth-with-long-hair.jpeg'
    cover_url = u'https://i0.wp.com/beforewegoblog.com/wp-content/uploads/2021/01/before-we-go-blog-1.png'
    language              = 'en'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 10
 
    remove_tags_before = dict(name='h1', attrs={'class': 'entry-title'})
     
    remove_tags_after = dict(name='div', attrs={'id': 'author-bio'})
#    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'nectar-scrolling-text font_size_10vh custom_color has-custom-divider'}),
        dict(name='span', attrs={'class': 'meta-comment-count'}),
        dict(name='p', attrs={'id': 'breadcrumbs'})
       ] 
 
    feeds = [
        ('Before We Go', 'https://beforewegoblog.com/feed/')
    ]


T-Invariant: mutimedia project about science and academic community in Russia and outside Russia. Favicon.
Russian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TInvariant(BasicNewsRecipe):
    title          	  = 'T-Invariant'
    __author__            = 'bugmen00t'
    description           = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.'
#    description           = 'T-Invariant is a multimedia project of scientists and science journalists. Our task is to be a bridge between the academic community in Russia and outside Russia. Let’s keep in touch!'
    publisher             = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant'
    category              = 'news'
#    cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png'
    cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png'
    language              = 'ru'
#    language              = 'en_RU'
#    language              = 'uk'
#    language              = 'de'
#    language              = 'he'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 45
    max_articles_per_feed = 15

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'media mg-info-author-block'}),
        dict(name='div', attrs={'class': 'mg-blog-category mb-1'}),
        dict(name='span', attrs={'class': 'newses-tags'}),
        dict(name='div', attrs={'class': 'post-share'}),
        dict(name='h4')
        ] 

    feeds = [
# Russian version 
#
# Direct links
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', ‘https://www.t-invariant.org/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', ‘https://www.t-invariant.org/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', ‘https://www.t-invariant.org/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', ‘https://www.t-invariant.org/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', ‘https://www.t-invariant.org/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', ‘https://www.t-invariant.org/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', ‘https://www.t-invariant.org/category/dissernet/feed/'),
#        ('\u0418\u0418', ‘https://www.t-invariant.org/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', ‘https://www.t-invariant.org/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', ‘https://www.t-invariant.org/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', ‘https://www.t-invariant.org/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', ‘https://www.t-invariant.org/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', ‘https://www.t-invariant.org/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', ‘https://www.t-invariant.org/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', ‘https://www.t-invariant.org/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', ‘https://www.t-invariant.org/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', ‘https://www.t-invariant.org/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', ‘https://www.t-invariant.org/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', ‘https://www.t-invariant.org/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', ‘https://www.t-invariant.org/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', ‘https://www.t-invariant.org/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', ‘https://www.t-invariant.org/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', ‘https://www.t-invariant.org/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', ‘https://www.t-invariant.org/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', ‘https://www.t-invariant.org/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', ‘https://www.t-invariant.org/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', ‘https://www.t-invariant.org/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/ethics/feed/'),
#
# Censorship bypass 
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
        ('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'),
        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'),
        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'),
        ('\u0412\u043E\u0439\u043D\u0430', 'https://tinyurl.com/t-invariant/category/war/feed/'),
        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', 'https://tinyurl.com/t-invariant/category/vsyo-slozhno/feed/'),
        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', 'https://tinyurl.com/t-invariant/category/dva-goda-vojne/feed/'),
        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/dve-storony-odnoj-nauki/feed/'),
        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/discussion/feed/'),
        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', 'https://tinyurl.com/t-invariant/category/dissernet/feed/'),
        ('\u0418\u0418', 'https://tinyurl.com/t-invariant/category/ai/feed/'),
        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/computer-science/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', 'https://tinyurl.com/t-invariant/category/history/feed/'),
        ('\u041A\u043B\u0438\u043C\u0430\u0442', 'https://tinyurl.com/t-invariant/category/climate-ru/feed/'),
        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/kontrevolyutsiya/feed/'),
        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/korruptsiya/feed/'),
        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', 'https://tinyurl.com/t-invariant/category/pseudoscience/feed/'),
        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/mathematics/feed/'),
        ('\u041C\u043E\u0437\u0433', 'https://tinyurl.com/t-invariant/category/brain/feed/'),
        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://tinyurl.com/t-invariant/category/ukrainian-science/feed/'),
        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/science-policy-ru/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://tinyurl.com/t-invariant/category/news/feed/'),
        ('\u041E\u043F\u0440\u043E\u0441', 'https://tinyurl.com/t-invariant/category/survey-ru/feed/'),
        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', 'https://tinyurl.com/t-invariant/category/story/feed/'),
        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/standpiont/feed/'),
        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/political-science/feed/'),
        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/popular-science/feed/'),
        ('\u041F\u0440\u0430\u0432\u043E', 'https://tinyurl.com/t-invariant/category/pravo/feed/'),
        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', 'https://tinyurl.com/t-invariant/category/progress/feed/'),
        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/psihologiya/feed/'),
        ('\u0420\u0410\u041D', 'https://tinyurl.com/t-invariant/category/ras/feed/'),
        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/religion/feed/'),
        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/relocation/feed/'),
        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/repression/feed/'),
        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', 'https://tinyurl.com/t-invariant/category/russian-language/feed/'),
        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', 'https://tinyurl.com/t-invariant/category/sanctions/feed/'),
        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', 'https://tinyurl.com/t-invariant/category/creators/feed/'),
        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/sociology/feed/'),
        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', 'https://tinyurl.com/t-invariant/category/terrorizm/feed/'),
        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', 'https://tinyurl.com/t-invariant/category/universities/feed/'),
        ('\u0424\u0438\u0437\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/physics/feed/'),
        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', 'https://tinyurl.com/t-invariant/category/philosophy/feed/'),
        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', 'https://tinyurl.com/t-invariant/category/timeline/feed/'),
        ('\u0428\u043A\u043E\u043B\u0430', 'https://tinyurl.com/t-invariant/category/shkola/feed/'),
        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'),
        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'),
        ('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'),
#
# English version
#
#        ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'),
#
# Ukrainian version
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
#
# German version
#
#        ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
#
# Hebrew version
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
    ]

English version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TInvariant(BasicNewsRecipe):
    title          	  = 'T-Invariant'
    __author__            = 'bugmen00t'
#    description           = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.'
    description           = 'T-Invariant is a multimedia project of scientists and science journalists. Our task is to be a bridge between the academic community in Russia and outside Russia. Let’s keep in touch!'
    publisher             = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant'
    category              = 'news'
    cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png'
#    cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png'
#    language              = 'ru'
    language              = 'en_RU'
#    language              = 'uk'
#    language              = 'de'
#    language              = 'he'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 45
    max_articles_per_feed = 15

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'media mg-info-author-block'}),
        dict(name='div', attrs={'class': 'mg-blog-category mb-1'}),
        dict(name='span', attrs={'class': 'newses-tags'}),
        dict(name='div', attrs={'class': 'post-share'}),
        dict(name='h4')
        ] 

    feeds = [
# Russian version 
#
# Direct links
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', ‘https://www.t-invariant.org/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', ‘https://www.t-invariant.org/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', ‘https://www.t-invariant.org/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', ‘https://www.t-invariant.org/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', ‘https://www.t-invariant.org/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', ‘https://www.t-invariant.org/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', ‘https://www.t-invariant.org/category/dissernet/feed/'),
#        ('\u0418\u0418', ‘https://www.t-invariant.org/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', ‘https://www.t-invariant.org/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', ‘https://www.t-invariant.org/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', ‘https://www.t-invariant.org/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', ‘https://www.t-invariant.org/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', ‘https://www.t-invariant.org/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', ‘https://www.t-invariant.org/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', ‘https://www.t-invariant.org/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', ‘https://www.t-invariant.org/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', ‘https://www.t-invariant.org/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', ‘https://www.t-invariant.org/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', ‘https://www.t-invariant.org/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', ‘https://www.t-invariant.org/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', ‘https://www.t-invariant.org/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', ‘https://www.t-invariant.org/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', ‘https://www.t-invariant.org/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', ‘https://www.t-invariant.org/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', ‘https://www.t-invariant.org/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', ‘https://www.t-invariant.org/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', ‘https://www.t-invariant.org/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/ethics/feed/'),
#
# Censorship bypass 
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', 'https://tinyurl.com/t-invariant/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', 'https://tinyurl.com/t-invariant/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', 'https://tinyurl.com/t-invariant/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', 'https://tinyurl.com/t-invariant/category/dissernet/feed/'),
#        ('\u0418\u0418', 'https://tinyurl.com/t-invariant/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', 'https://tinyurl.com/t-invariant/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', 'https://tinyurl.com/t-invariant/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', 'https://tinyurl.com/t-invariant/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', 'https://tinyurl.com/t-invariant/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://tinyurl.com/t-invariant/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://tinyurl.com/t-invariant/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', 'https://tinyurl.com/t-invariant/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', 'https://tinyurl.com/t-invariant/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', 'https://tinyurl.com/t-invariant/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', 'https://tinyurl.com/t-invariant/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', 'https://tinyurl.com/t-invariant/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', 'https://tinyurl.com/t-invariant/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', 'https://tinyurl.com/t-invariant/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', 'https://tinyurl.com/t-invariant/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', 'https://tinyurl.com/t-invariant/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', 'https://tinyurl.com/t-invariant/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', 'https://tinyurl.com/t-invariant/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', 'https://tinyurl.com/t-invariant/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', 'https://tinyurl.com/t-invariant/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'),
#
# English version
#
#        ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'),
#
# Censorship bypass 
#
        ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'),
#
# Ukrainian version
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
#
# German version
#
#        ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
#
# Hebrew version
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
    ]

Ukrainian version
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TInvariant(BasicNewsRecipe):
    title          	  = 'T-Invariant'
    __author__            = 'bugmen00t'
#    description           = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.'
    description           = 'T-Invariant is a multimedia project of scientists and science journalists. Our task is to be a bridge between the academic community in Russia and outside Russia. Let’s keep in touch!'
    publisher             = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant'
    category              = 'news'
    cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png'
#    cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png'
#    language              = 'ru'
#    language              = 'en_RU'
    language              = 'uk'
#    language              = 'de'
#    language              = 'he'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 45
    max_articles_per_feed = 15

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'media mg-info-author-block'}),
        dict(name='div', attrs={'class': 'mg-blog-category mb-1'}),
        dict(name='span', attrs={'class': 'newses-tags'}),
        dict(name='div', attrs={'class': 'post-share'}),
        dict(name='h4')
        ] 

    feeds = [
# Russian version 
#
# Direct links
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', ‘https://www.t-invariant.org/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', ‘https://www.t-invariant.org/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', ‘https://www.t-invariant.org/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', ‘https://www.t-invariant.org/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', ‘https://www.t-invariant.org/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', ‘https://www.t-invariant.org/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', ‘https://www.t-invariant.org/category/dissernet/feed/'),
#        ('\u0418\u0418', ‘https://www.t-invariant.org/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', ‘https://www.t-invariant.org/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', ‘https://www.t-invariant.org/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', ‘https://www.t-invariant.org/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', ‘https://www.t-invariant.org/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', ‘https://www.t-invariant.org/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', ‘https://www.t-invariant.org/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', ‘https://www.t-invariant.org/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', ‘https://www.t-invariant.org/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', ‘https://www.t-invariant.org/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', ‘https://www.t-invariant.org/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', ‘https://www.t-invariant.org/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', ‘https://www.t-invariant.org/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', ‘https://www.t-invariant.org/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', ‘https://www.t-invariant.org/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', ‘https://www.t-invariant.org/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', ‘https://www.t-invariant.org/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', ‘https://www.t-invariant.org/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', ‘https://www.t-invariant.org/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', ‘https://www.t-invariant.org/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/ethics/feed/'),
#
# Censorship bypass 
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', 'https://tinyurl.com/t-invariant/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', 'https://tinyurl.com/t-invariant/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', 'https://tinyurl.com/t-invariant/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', 'https://tinyurl.com/t-invariant/category/dissernet/feed/'),
#        ('\u0418\u0418', 'https://tinyurl.com/t-invariant/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', 'https://tinyurl.com/t-invariant/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', 'https://tinyurl.com/t-invariant/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', 'https://tinyurl.com/t-invariant/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', 'https://tinyurl.com/t-invariant/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://tinyurl.com/t-invariant/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://tinyurl.com/t-invariant/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', 'https://tinyurl.com/t-invariant/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', 'https://tinyurl.com/t-invariant/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', 'https://tinyurl.com/t-invariant/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', 'https://tinyurl.com/t-invariant/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', 'https://tinyurl.com/t-invariant/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', 'https://tinyurl.com/t-invariant/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', 'https://tinyurl.com/t-invariant/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', 'https://tinyurl.com/t-invariant/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', 'https://tinyurl.com/t-invariant/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', 'https://tinyurl.com/t-invariant/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', 'https://tinyurl.com/t-invariant/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', 'https://tinyurl.com/t-invariant/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', 'https://tinyurl.com/t-invariant/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'),
#
# English version
#
#        ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'),
#
# Ukrainian version
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'),
#
# Censorship bypass 
#
        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
#
# German version
#
#        ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
#
# Hebrew version
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
    ]

German version (no updates since 2023)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TInvariant(BasicNewsRecipe):
    title          	  = 'T-Invariant'
    __author__            = 'bugmen00t'
#    description           = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.'
    description           = 'T-Invariant is a multimedia project of scientists and science journalists. Our task is to be a bridge between the academic community in Russia and outside Russia. Let’s keep in touch!'
    publisher             = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant'
    category              = 'news'
    cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png'
#    cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png'
#    language              = 'ru'
#    language              = 'en_RU'
#    language              = 'uk'
    language              = 'de'
#    language              = 'he'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 45
    max_articles_per_feed = 15

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'media mg-info-author-block'}),
        dict(name='div', attrs={'class': 'mg-blog-category mb-1'}),
        dict(name='span', attrs={'class': 'newses-tags'}),
        dict(name='div', attrs={'class': 'post-share'}),
        dict(name='h4')
        ] 

    feeds = [
# Russian version 
#
# Direct links
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', ‘https://www.t-invariant.org/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', ‘https://www.t-invariant.org/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', ‘https://www.t-invariant.org/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', ‘https://www.t-invariant.org/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', ‘https://www.t-invariant.org/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', ‘https://www.t-invariant.org/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', ‘https://www.t-invariant.org/category/dissernet/feed/'),
#        ('\u0418\u0418', ‘https://www.t-invariant.org/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', ‘https://www.t-invariant.org/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', ‘https://www.t-invariant.org/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', ‘https://www.t-invariant.org/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', ‘https://www.t-invariant.org/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', ‘https://www.t-invariant.org/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', ‘https://www.t-invariant.org/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', ‘https://www.t-invariant.org/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', ‘https://www.t-invariant.org/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', ‘https://www.t-invariant.org/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', ‘https://www.t-invariant.org/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', ‘https://www.t-invariant.org/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', ‘https://www.t-invariant.org/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', ‘https://www.t-invariant.org/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', ‘https://www.t-invariant.org/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', ‘https://www.t-invariant.org/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', ‘https://www.t-invariant.org/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', ‘https://www.t-invariant.org/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', ‘https://www.t-invariant.org/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', ‘https://www.t-invariant.org/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/ethics/feed/'),
#
# Censorship bypass 
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', 'https://tinyurl.com/t-invariant/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', 'https://tinyurl.com/t-invariant/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', 'https://tinyurl.com/t-invariant/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', 'https://tinyurl.com/t-invariant/category/dissernet/feed/'),
#        ('\u0418\u0418', 'https://tinyurl.com/t-invariant/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', 'https://tinyurl.com/t-invariant/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', 'https://tinyurl.com/t-invariant/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', 'https://tinyurl.com/t-invariant/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', 'https://tinyurl.com/t-invariant/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://tinyurl.com/t-invariant/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://tinyurl.com/t-invariant/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', 'https://tinyurl.com/t-invariant/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', 'https://tinyurl.com/t-invariant/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', 'https://tinyurl.com/t-invariant/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', 'https://tinyurl.com/t-invariant/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', 'https://tinyurl.com/t-invariant/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', 'https://tinyurl.com/t-invariant/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', 'https://tinyurl.com/t-invariant/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', 'https://tinyurl.com/t-invariant/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', 'https://tinyurl.com/t-invariant/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', 'https://tinyurl.com/t-invariant/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', 'https://tinyurl.com/t-invariant/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', 'https://tinyurl.com/t-invariant/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', 'https://tinyurl.com/t-invariant/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'),
#
# English version
#
#        ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'),
#
# Ukrainian version
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
#
# German version
#
#        ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'),
#
# Censorship bypass 
#
        ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
#
# Hebrew version
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
    ]

Hebrew version (no updates since 2023)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TInvariant(BasicNewsRecipe):
    title          	  = 'T-Invariant'
    __author__            = 'bugmen00t'
#    description           = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.'
    description           = 'T-Invariant is a multimedia project of scientists and science journalists. Our task is to be a bridge between the academic community in Russia and outside Russia. Let’s keep in touch!'
    publisher             = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant'
    category              = 'news'
    cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png'
#    cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png'
#    language              = 'ru'
#    language              = 'en_RU'
#    language              = 'uk'
#    language              = 'de'
    language              = 'he'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 45
    max_articles_per_feed = 15

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'media mg-info-author-block'}),
        dict(name='div', attrs={'class': 'mg-blog-category mb-1'}),
        dict(name='span', attrs={'class': 'newses-tags'}),
        dict(name='div', attrs={'class': 'post-share'}),
        dict(name='h4')
        ] 

    feeds = [
# Russian version 
#
# Direct links
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', ‘https://www.t-invariant.org/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', ‘https://www.t-invariant.org/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', ‘https://www.t-invariant.org/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', ‘https://www.t-invariant.org/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', ‘https://www.t-invariant.org/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', ‘https://www.t-invariant.org/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', ‘https://www.t-invariant.org/category/dissernet/feed/'),
#        ('\u0418\u0418', ‘https://www.t-invariant.org/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', ‘https://www.t-invariant.org/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', ‘https://www.t-invariant.org/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', ‘https://www.t-invariant.org/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', ‘https://www.t-invariant.org/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', ‘https://www.t-invariant.org/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', ‘https://www.t-invariant.org/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', ‘https://www.t-invariant.org/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', ‘https://www.t-invariant.org/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', ‘https://www.t-invariant.org/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', ‘https://www.t-invariant.org/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', ‘https://www.t-invariant.org/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', ‘https://www.t-invariant.org/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', ‘https://www.t-invariant.org/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', ‘https://www.t-invariant.org/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', ‘https://www.t-invariant.org/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', ‘https://www.t-invariant.org/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', ‘https://www.t-invariant.org/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', ‘https://www.t-invariant.org/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', ‘https://www.t-invariant.org/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', ‘https://www.t-invariant.org/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', ‘https://www.t-invariant.org/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', ‘https://www.t-invariant.org/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', ‘https://www.t-invariant.org/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', ‘https://www.t-invariant.org/category/ethics/feed/'),
#
# Censorship bypass 
#
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
#        ('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'),
#        ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'),
#        ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'),
#        ('\u0412\u043E\u0439\u043D\u0430', 'https://tinyurl.com/t-invariant/category/war/feed/'),
#        ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', 'https://tinyurl.com/t-invariant/category/vsyo-slozhno/feed/'),
#        ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', 'https://tinyurl.com/t-invariant/category/dva-goda-vojne/feed/'),
#        ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/dve-storony-odnoj-nauki/feed/'),
#        ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/discussion/feed/'),
#        ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', 'https://tinyurl.com/t-invariant/category/dissernet/feed/'),
#        ('\u0418\u0418', 'https://tinyurl.com/t-invariant/category/ai/feed/'),
#        ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/computer-science/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', 'https://tinyurl.com/t-invariant/category/history/feed/'),
#        ('\u041A\u043B\u0438\u043C\u0430\u0442', 'https://tinyurl.com/t-invariant/category/climate-ru/feed/'),
#        ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/kontrevolyutsiya/feed/'),
#        ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/korruptsiya/feed/'),
#        ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', 'https://tinyurl.com/t-invariant/category/pseudoscience/feed/'),
#        ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/mathematics/feed/'),
#        ('\u041C\u043E\u0437\u0433', 'https://tinyurl.com/t-invariant/category/brain/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://tinyurl.com/t-invariant/category/ukrainian-science/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/science-policy-ru/feed/'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://tinyurl.com/t-invariant/category/news/feed/'),
#        ('\u041E\u043F\u0440\u043E\u0441', 'https://tinyurl.com/t-invariant/category/survey-ru/feed/'),
#        ('\u041E\u0442\u0435\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u043A\u0438 \u0438\u0437 \u043F\u043E\u0434\u043F\u043E\u043B\u044C\u044F', 'https://tinyurl.com/t-invariant/category/story/feed/'),
#        ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/standpiont/feed/'),
#        ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/political-science/feed/'),
#        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/popular-science/feed/'),
#        ('\u041F\u0440\u0430\u0432\u043E', 'https://tinyurl.com/t-invariant/category/pravo/feed/'),
#        ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', 'https://tinyurl.com/t-invariant/category/progress/feed/'),
#        ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/psihologiya/feed/'),
#        ('\u0420\u0410\u041D', 'https://tinyurl.com/t-invariant/category/ras/feed/'),
#        ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/religion/feed/'),
#        ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', 'https://tinyurl.com/t-invariant/category/relocation/feed/'),
#        ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', 'https://tinyurl.com/t-invariant/category/repression/feed/'),
#        ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', 'https://tinyurl.com/t-invariant/category/russian-language/feed/'),
#        ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', 'https://tinyurl.com/t-invariant/category/sanctions/feed/'),
#        ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', 'https://tinyurl.com/t-invariant/category/creators/feed/'),
#        ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/sociology/feed/'),
#        ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', 'https://tinyurl.com/t-invariant/category/terrorizm/feed/'),
#        ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', 'https://tinyurl.com/t-invariant/category/universities/feed/'),
#        ('\u0424\u0438\u0437\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/physics/feed/'),
#        ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', 'https://tinyurl.com/t-invariant/category/philosophy/feed/'),
#        ('\u0425\u0440\u043E\u043D\u0438\u043A\u0438 \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0447\u0435\u043D\u044B\u0445', 'https://tinyurl.com/t-invariant/category/timeline/feed/'),
#        ('\u0428\u043A\u043E\u043B\u0430', 'https://tinyurl.com/t-invariant/category/shkola/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'),
#        ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'),
#        ('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'),
#
# English version
#
#        ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'),
#
# Ukrainian version
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
#
# German version
#
#        ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'),
#
# Censorship bypass 
#
#        ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
#
# Hebrew version
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
#
 Censorship bypass 
#
#        ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
    ]
Attached Images
         
Attached Files
File Type: recipe wicomix.recipe (1.5 KB, 25 views)
File Type: recipe dev_ua.recipe (1.9 KB, 26 views)
File Type: recipe poligon.recipe (2.6 KB, 27 views)
File Type: recipe beforewego.recipe (1.5 KB, 37 views)
File Type: recipe tinvariant-ru.recipe (15.2 KB, 26 views)
File Type: recipe tinvariant-en.recipe (15.3 KB, 22 views)
File Type: recipe tinvariant-ua.recipe (15.3 KB, 24 views)
File Type: recipe tinvariant-de.recipe (15.3 KB, 28 views)
File Type: recipe tinvariant-he.recipe (15.3 KB, 27 views)
bugmen00t is offline   Reply With Quote
Old 08-19-2024, 02:46 PM   #30
bugmen00t
Connoisseur
bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!bugmen00t rocks like Gibraltar!
 
bugmen00t's Avatar
 
Posts: 75
Karma: 100000
Join Date: Aug 2015
Device: Kindle Keyboard + Kindle Voyage WiFi + Kindle PW11 Kids
New and fixed recipes (part 14)

Fixed Собеседник recipe (sobesednik.recipe): updated RSS URL.

Агентство: news site, sidekick of Проект.Медиа. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe


class Agents(BasicNewsRecipe):
    title = u'\u00AB\u0410\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E\u00BB'
    description = u'\u041D\u043E\u0432\u043E\u0441\u0442\u043D\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0432\u044B\u0445\u043E\u0434\u0446\u0430\u043C\u0438 \u0438\u0437 \u043A\u043E\u043B\u043B\u0435\u043A\u0442\u0438\u0432\u0430 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u043C\u043E\u0433\u043E \u0438\u0437\u0434\u0430\u043D\u0438\u044F \u00AB\u041F\u0440\u043E\u0435\u043A\u0442\u00BB.'
    __author__ = 'bugmen00t'
    publisher = 'Project Media'
    publication_type = 'news'
    oldest_article = 7
    max_articles_per_feed = 10
    language = 'ru'
    cover_url = 'https://cdn4.cdn-telegram.org/file/EBZ1b-EP9bQkgmu3zbLST2mKWxQ1Gk5yfyG8I09Jf7LSDlVJ2ebptzauijIr4c3QxfWTOxTk9dPjAF-Bg0XZtYOtHM5309L4FjuhH588Mj3Om5MQbT2R7Kc4nM4hVL9DS39UcnIT_k4Gh3JKCDxkNGS2ZlG3hJpkdyAvPoVNcdO9vfXWOuWkyDQAO9N3aoiK5TXAjLj5ViM7zSVX1vRLF_LF_8TBADdyT6TOkqjrzYv_35ARGxld6CtNLDwLh5plVKgnDkEiwlR82PjEabDBHOKRnPRhoF1KViWF-_CswOZtvC-Z2NBDcvwT4mMV-sfCZaEwQXaXaKNUDzyszmViEw.jpg'
    auto_cleanup = False
    no_stylesheets = False

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='article')

    feeds = [(
        u'\u0413\u0430\u0437\u0435\u0442\u0430 "\u0421\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A"',
        'https://www.agents.media/feed/'
    )]


Зеркало: Belarussian news site, successor of shut down TUT.BY portal. Favicon.
As there're no Belarussian recipes yet, I'm not sure which language code should be used for Russian (Belarus): ru_BY, ru_BE or just ru.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe

class Zerkalo(BasicNewsRecipe):
    title = u'\u0417\u0435\u0440\u043A\u0430\u043B\u043E'
    description = u'\u0417\u0435\u0440\u043A\u0430\u043B\u043E, \u043F\u0440\u043E\u0435\u043A\u0442 \u0447\u0430\u0441\u0442\u0438 \u0431\u044B\u0432\u0448\u0435\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B TUT.BY.'
    __author__ = 'bugmen00t'
    publisher = '\u0417\u0435\u0440\u043A\u0430\u043B\u043E (zerkalo.io)'
    publication_type = 'news'
    oldest_article = 7
    max_articles_per_feed = 100
    language = 'ru_BY'
    cover_url = 'https://upload.wikimedia.org/wikipedia/commons/c/c7/Zerkalo.io.png'
    auto_cleanup = False
    no_stylesheets = False

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'id': 'article_body'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'b-addition m-single m-simplify'}),
        dict(name='div', attrs={'class': 'b-addition m-simplify'}),
        dict(name='iframe'),
        ] 

    feeds = [
#
# Original feeds
#
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u0437\u0430 \u0434\u0435\u043D\u044C', 'https://news.zerkalo.io/rss/all.rss'),
#       ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u043D\u0435\u0434\u0435\u043B\u0438', 'https://news.zerkalo.io/rss/index.rss'),
#
# Censorship bypass
#
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u0437\u0430 \u0434\u0435\u043D\u044C', 'https://br0wse-zerkalo.site/news/rss/all.rss'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 \u043D\u0435\u0434\u0435\u043B\u0438', 'https://br0wse-zerkalo.site/news/rss/index.rss'),
    ]


SotaVision: Russian independent news outlet. Favicon.
Fixes needed:
  • No images in some articles (lazyload)
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe

class Sotavision(BasicNewsRecipe):
    title = u'SOTA.Vision'
    description = u'\u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0435 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0435 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E-\u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u043C\u0435\u0434\u0438\u0430, \u0441\u0444\u043E\u043A\u0443\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043D\u0430 \u043E\u0441\u0432\u0435\u0449\u0435\u043D\u0438\u0438 \u043D\u0430\u0440\u0443\u0448\u0435\u043D\u0438\u044F \u043F\u0440\u0430\u0432 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u0438 \u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u043C \u043F\u0440\u0435\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u0438 \u0432 \u0420\u043E\u0441\u0441\u0438\u0438.'
    __author__ = 'bugmen00t'
    publisher = '\u0410\u043B\u0435\u043A\u0441\u0430\u043D\u0434\u0440\u0430 \u0410\u0433\u0435\u0435\u0432\u0430, \u041E\u043B\u0435\u0433 \u0415\u043B\u0430\u043D\u0447\u0438\u043A,  \u0415\u0432\u0433\u0435\u043D\u0438\u0439 \u0414\u043E\u043C\u043E\u0436\u0438\u0440\u043E\u0432'
    publication_type = 'news'
    oldest_article = 7
    max_articles_per_feed = 10
    language = 'ru'
    cover_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/SotaVision.png/600px-SotaVision.png'
    auto_cleanup = False
    no_stylesheets = True

    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='span', attrs={'style': 'border-color:#EBEBEB;border-width:1px;width:100%;'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'td_block_wrap tdb_mobile_menu tdi_7 td-pb-border-top td_block_template_1 tdb-header-align'}),
        dict(name='div', attrs={'class': 'td_block_wrap tdb_single_author tdi_52 td-pb-border-top td_block_template_1 tdb-post-meta'}),
        dict(name='div', attrs={'class': 'td_block_wrap tdb_single_date tdi_53 td-pb-border-top td_block_template_1 tdb-post-meta'}),
        dict(name='div', attrs={'class': 'td_block_wrap tdb_single_post_views tdi_54 td-pb-border-top td_block_template_1 tdb-post-meta'}),
        dict(name='div', attrs={'class': 'td_block_wrap tdb_single_post_share tdi_55  td-pb-border-top td_block_template_1'}),
        dict(name='div', attrs={'class': 'td-post-sharing-visible'}),
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://sotavision.world/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://sotavision.world/category/news/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://sotavision.world/category/stories/feed/'),
        ('\u0412\u0438\u0434\u0435\u043E', 'https://sotavision.world/category/videos/feed/'),
        ('\u0424\u043E\u0442\u043E', 'https://sotavision.world/category/photos/feed/'),
        ('\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438', 'https://sotavision.world/category/projects/feed/'),
        ('\u041C\u043D\u0435\u043D\u0438\u044F', 'https://sotavision.world/category/opinions/feed/'),
    ]


GeekCity: modern culture portal: news, reviews and guides. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

from calibre.web.feeds.news import BasicNewsRecipe

class GeekCity(BasicNewsRecipe):
    title = u'GeekCity'
    description = u'\u041F\u043E\u0440\u0442\u0430\u043B \u043E \u043A\u043E\u043C\u0438\u043A\u0441\u0430\u0445, \u043A\u0438\u043D\u043E, \u0441\u0435\u0440\u0438\u0430\u043B\u0430\u0445, \u0438\u0433\u0440\u0430\u0445, sci-fi \u0438 \u043C\u043D\u043E\u0433\u043E\u043C \u0434\u0440\u0443\u0433\u043E\u043C. \u0417\u0434\u0435\u0441\u044C \u0432\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u043D\u0430\u0439\u0442\u0438 \u0441\u0432\u0435\u0436\u0438\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u043E \u0441\u0430\u043C\u044B\u0445 \u0432\u0430\u0436\u043D\u044B\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0445 \u0432 \u043C\u0438\u0440\u0435 \u0433\u0438\u043A\u043E\u0432, \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0435 \u043E\u0431\u0437\u043E\u0440\u044B, \u0433\u0430\u0439\u0434\u044B, \u0441\u0442\u0430\u0442\u044C\u0438 \u0438 \u043C\u043D\u043E\u0433\u043E\u0435 \u0434\u0440\u0443\u0433\u043E\u0435.'
    __author__ = 'bugmen00t'
    publisher = 'GeekCity.ru'
    publication_type = 'blog'
    oldest_article = 7
    max_articles_per_feed = 10
    language = 'ru'
    cover_url = 'https://geekcity.ru/wp-content/uploads/2021/03/og.jpg'
    auto_cleanup = False
    no_stylesheets = False

    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='div', attrs={'class': 'term-badges floated'}),
        dict(name='div', attrs={'class': 'post-meta single-post-meta'}),
        dict(name='div', attrs={'class': 'post-share single-post-share top-share clearfix style-1'}),
        dict(name='div', attrs={'class': 'post-share single-post-share bottom-share clearfix style-1'}),
        dict(name='div', attrs={'class': 'entry-terms post-tags clearfix'}),
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://geekcity.ru/feed/'),
        ('\u0411\u0435\u0437 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438', 'https://geekcity.ru/category/%D0%B1%D0%B5%D0%B7-%D1%80%D1%83%D0%B1%D1%80%D0%B8%D0%BA%D0%B8/feed/'),
        ('\u0421\u0430\u0439\u0442', 'https://geekcity.ru/category/site/'),
        ('\u0424\u0438\u043B\u044C\u043C\u044B', 'https://geekcity.ru/category/moviespod/feed/'),
        ('\u0421\u0435\u0440\u0438\u0430\u043B\u044B', 'https://geekcity.ru/category/tvshow/feed/'),
        ('\u041A\u043E\u043C\u0438\u043A\u0441\u044B', 'https://geekcity.ru/category/comics-2/feed/'),
        ('\u0418\u0433\u0440\u044B', 'https://geekcity.ru/category/games/feed/'),
        ('\u0422\u0435\u0445\u043D\u043E', 'https://geekcity.ru/category/tech/feed/'),
        ('\u0428\u043C\u043E\u0442', 'https://geekcity.ru/category/shopping/feed/'),
        ('\u0413\u0430\u0439\u0434\u044B', 'https://geekcity.ru/category/guides/feed/'),
    ]
Attached Images
    
Attached Files
File Type: recipe sobesednik.recipe (1.2 KB, 12 views)
File Type: recipe agents.recipe (1.2 KB, 16 views)
File Type: recipe zerkalo.recipe (1.7 KB, 18 views)
File Type: recipe sotavision.recipe (3.2 KB, 10 views)
File Type: recipe geekcity.recipe (3.0 KB, 16 views)
bugmen00t is offline   Reply With Quote
Reply

Tags
fixes, russain, ukraninan


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
New and updated recipes for Ukrainian media rpalyvoda Recipes 2 06-12-2015 05:56 PM
New recipes for a couple of Ukrainian media rpalyvoda Recipes 1 06-11-2015 06:31 PM
looking for built-in recipes Bobus Recipes 4 09-26-2011 04:31 PM
customizing built in recipes jrasmussen Calibre 2 02-16-2010 12:26 AM


All times are GMT -4. The time now is 08:26 PM.


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