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-28-2022, 11:03 PM   #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: 43,860
Karma: 22666666
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, 06: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: 65
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
Advert
Old 08-01-2022, 07: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: 65
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, 105 views)
File Type: recipe ukrinform_ru.recipe (3.6 KB, 103 views)
File Type: recipe ukrinform_en.recipe (1.8 KB, 102 views)
File Type: recipe ukrinform_es.recipe (2.0 KB, 104 views)
File Type: recipe ukrinform_de.recipe (2.0 KB, 103 views)
File Type: recipe ukrinform_fr.recipe (2.0 KB, 107 views)
File Type: recipe ukrinform_ja.recipe (2.2 KB, 109 views)
File Type: recipe ukrinform_pl.recipe (2.0 KB, 103 views)

Last edited by bugmen00t; 08-01-2022 at 07:13 AM.
bugmen00t is offline   Reply With Quote
Old 08-02-2022, 06: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: 65
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, 110 views)
File Type: recipe osvitaua_ru.recipe (1.5 KB, 108 views)
File Type: recipe liganet_ua.recipe (2.9 KB, 110 views)
File Type: recipe liganet_ru.recipe (7.5 KB, 106 views)
File Type: recipe unn_ua.recipe (4.0 KB, 105 views)
File Type: recipe unn_ru.recipe (4.1 KB, 107 views)
bugmen00t is offline   Reply With Quote
Old 08-04-2022, 06: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: 65
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, 100 views)
File Type: recipe newtab.recipe (2.0 KB, 103 views)
File Type: recipe snob.recipe (2.0 KB, 106 views)
File Type: recipe n_kaliningrad.recipe (1.6 KB, 110 views)
File Type: recipe rbcua_ua.recipe (1.5 KB, 104 views)
File Type: recipe rbcua_ru.recipe (1.9 KB, 110 views)
File Type: recipe nv_ua.recipe (4.9 KB, 99 views)
File Type: recipe nv_ru.recipe (4.9 KB, 104 views)
File Type: recipe nv_en.recipe (2.2 KB, 110 views)
bugmen00t is offline   Reply With Quote
Advert
Old 08-09-2022, 01: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: 65
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, 105 views)
File Type: recipe currenttime.recipe (5.3 KB, 103 views)
File Type: recipe fontanka.recipe (2.4 KB, 99 views)
File Type: recipe thebell.recipe (2.1 KB, 103 views)
File Type: recipe snob.recipe (2.0 KB, 102 views)
bugmen00t is offline   Reply With Quote
Old 08-10-2022, 08: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: 65
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, 101 views)
File Type: recipe vedomosti.recipe (1.6 KB, 97 views)
File Type: recipe bellingcat_en.recipe (1.6 KB, 107 views)
File Type: recipe bellingcat_ru.recipe (3.5 KB, 100 views)
File Type: recipe bellingcat_uk.recipe (3.6 KB, 101 views)
File Type: recipe bellingcat_fr.recipe (1.7 KB, 95 views)
File Type: recipe bellingcat_es.recipe (1.6 KB, 97 views)
File Type: recipe rosbalt.recipe (2.6 KB, 94 views)
File Type: recipe debunkingdenialism.recipe (1.7 KB, 100 views)

Last edited by bugmen00t; 08-10-2022 at 08:18 AM.
bugmen00t is offline   Reply With Quote
Old 08-15-2022, 02: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: 65
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, 95 views)
File Type: recipe kyivpost_en.recipe (1.4 KB, 99 views)
File Type: recipe kyivpost_ua.recipe (2.9 KB, 97 views)
File Type: recipe kyivpost_ar.recipe (3.4 KB, 101 views)
File Type: recipe moscowtimes_ru.recipe (2.5 KB, 99 views)
File Type: recipe moscowtimes_en.recipe (1.7 KB, 97 views)
File Type: recipe dovod.recipe (2.2 KB, 98 views)

Last edited by bugmen00t; 08-17-2022 at 09:16 AM.
bugmen00t is offline   Reply With Quote
Old 08-17-2022, 08: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: 65
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, 100 views)
File Type: recipe takiedela.recipe (10.0 KB, 104 views)
File Type: recipe grani.recipe (2.3 KB, 98 views)
File Type: recipe zn_ru.recipe (2.4 KB, 97 views)
File Type: recipe zn_ua.recipe (2.4 KB, 93 views)
bugmen00t is offline   Reply With Quote
Old 08-26-2022, 08: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: 65
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, 94 views)
File Type: recipe vikna_ru.recipe (1.6 KB, 95 views)
File Type: recipe vikna_ua.recipe (1.6 KB, 90 views)
File Type: recipe gazetaua_ru.recipe (52 Bytes, 102 views)
File Type: recipe gazetaua_ua.recipe (52 Bytes, 111 views)
File Type: recipe newtab.recipe (1.8 KB, 89 views)
bugmen00t is offline   Reply With Quote
Old 10-02-2022, 03: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: 65
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, 84 views)
File Type: recipe gazetaua_ua.recipe (2.4 KB, 86 views)
File Type: recipe kholod_en.recipe (1.1 KB, 75 views)
File Type: recipe dingoo_a320.recipe (985 Bytes, 76 views)
File Type: recipe rian_eng.recipe (1.1 KB, 83 views)
File Type: recipe moscow_times.recipe (1.5 KB, 77 views)
bugmen00t is offline   Reply With Quote
Old 08-08-2023, 11:25 AM   #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: 65
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, 34 views)
File Type: recipe footballua.recipe (1.2 KB, 33 views)
File Type: recipe unian_net.recipe (1.6 KB, 30 views)
File Type: recipe unian_net_ua.recipe (2.3 KB, 35 views)
File Type: recipe unian_net_en.recipe (1.3 KB, 35 views)
File Type: recipe echo_moskvy.recipe (1.5 KB, 36 views)
File Type: recipe prosleduet.recipe (2.1 KB, 34 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 04:56 PM
New recipes for a couple of Ukrainian media rpalyvoda Recipes 1 06-11-2015 05:31 PM
looking for built-in recipes Bobus Recipes 4 09-26-2011 03:31 PM
customizing built in recipes jrasmussen Calibre 2 02-15-2010 11:26 PM


All times are GMT -4. The time now is 06:04 PM.


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