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-19-2022, 04:29 PM   #1
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
(mostly) Russian and Ukrainian sources: state of built-in recipes, fixes, new recipes

Hi there!

Among one and a half thousand recipes currently available in Calibre, Russian and Ukrainian sources are very scarce, their total share is less than 2% total. Moreover a lot of the recipes are already hopelessly outdated and no longer work, and since Russian-Ukrainian war started many Russian websites and newspapers were shut down under the state censorship pressure.

So I set myself the goal of checking which of the built-in Russian & Ukrainian recipes are still work at all and which ones can be fixed or updated. Another (more ambitious) goal is to add a couple of dozen new recipes for both popular & frequently quoted and niche thematic Internet resources from Russia & Ukraine in different languages (mostly in Russian & Ukrainian, occasionally in English if international version is available).

I hardly know the Python language, so my recipes are very primitive. Being sometimes unable to deal with fairly simple things (fixing missing images, etc.), I will still try not to cross the line of "quantity over quality" and make recipes as polished as my competence allows. I will be glad for any and suggestion from the forum members.

Well, let's get started.
bugmen00t is offline   Reply With Quote
Old 07-19-2022, 04:33 PM   #2
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
Built-in Ukrainian recipes

CURRENT STATE OF UKRAINIAN RECIPES

  • Champion.com.ua (champion.recipe) by rpalyvoda: OK
  • Zaxid.net (zaxid_net.recipe) by rpalyvoda: fixable
    Spoiler:
    Need to replace http:// with https:// and update/expand RSS feeds from https://zaxid.net/home/showRss.do
  • Експрес (iekspries.recipe) by rpalyvoda: not working
    Spoiler:
    Domain name changed to https://expres.online/, no more RSS support
  • Львівська газета (l_vivs_ghazieta.recipe) by rpalyvoda: not working
    Spoiler:
    Closed in 2016
  • dup Львівська газета (lvivs_ks_ghazieta.recipe) by rpalyvoda: not working
    Spoiler:
    Closed in 2016
  • Український Тиждень (ukraiyns_kii_tizhdien.recipe) by rpalyvoda: fixable
    Spoiler:
    Need to replace http:// with https:// and replace all RSS feeds with single feed https://tyzhden.ua/RSS/All/
  • dup Український Тиждень (ukraiyns_tizhdien.recipe) by rpalyvoda: fixable
    Spoiler:
    Need to replace http:// with https:// and replace all RSS feeds with single feed https://tyzhden.ua/RSS/All/


Total: 7 entries (5 unique recipes):
  • 1 is OK
  • 2 needs fixing
  • 2 are dead
bugmen00t is offline   Reply With Quote
Advert
Old 07-19-2022, 04:36 PM   #3
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
Built-in Ukrainian recipes

FIXED UKRAINIAN RECIPES

Fixed built-in Zaxid.net recipe (zaxid_net.recipe): HTTPS, new logo/cover URL, revised RSS feeds.
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 Zaxid(BasicNewsRecipe):
    title = 'Zaxid.net'
    __author__ = 'rpalyvoda (with fixes by bugmen00t)'
    oldest_article = 14
    max_articles_per_feed = 100
    language = 'uk'
    cover_url = 'https://zaxid.net/images/logo.png'
    masthead_url = 'https://zaxid.net/images/logo.png'
    auto_cleanup = True

    feeds = [
        ('\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0438\u0439 RSS', 'http://zaxid.net/rss/all.xml'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://zaxid.net/rss/1.xml'),
        ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://zaxid.net/rss/2.xml'),
        ('\u0411\u043B\u043E\u0433\u0438', 'https://zaxid.net/rss/3.xml'),
        ('\u0421\u0443\u0441\u043F\u0456\u043B\u044C\u0441\u0442\u0432\u043E', 'https://zaxid.net/rss/4.xml'),
        ('\u0415\u043A\u043E\u043D\u043E\u043C\u0456\u043A\u0430', 'https://zaxid.net/rss/5.xml'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430', 'https://zaxid.net/rss/6.xml'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://zaxid.net/rss/7.xml'),
        ('\u0421\u0432\u0456\u0442', 'https://zaxid.net/rss/8.xml'),
        ('IQ', 'https://zaxid.net/rss/9.xml'),
        ('\u0410\u043D\u043E\u043D\u0441\u0438', 'https://zaxid.net/rss/13.xml'),
        ('ZAXID.NET TV', 'https://zaxid.net/rss/zaxid_tv.xml'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438 \u041B\u044C\u0432\u043E\u0432\u0430', 'https://zaxid.net/rss/lviv_news.xml'),
        ('\u0424\u043E\u0442\u043E', 'https://zaxid.net/rss/19.xml'),
        ('\u0414\u0456\u043C', 'https://zaxid.net/rss/26.xml'),        
        ('\u0417\u0434\u043E\u0440\u043E\u0432\u0027\u044F', 'https://zaxid.net/rss/28.xml'),
        ('\u0410\u0432\u0442\u043E', 'https://zaxid.net/rss/29.xml'),        
        ('\u041B\u044C\u0432\u0456\u0432', 'https://zaxid.net/rss/16.xml'),
        ('\u041F\u0440\u0438\u043A\u0430\u0440\u043F\u0430\u0442\u0442\u044F', 'https://zaxid.net/rss/59.xml'),        
        ('\u0422\u0435\u0440\u043D\u043E\u043F\u0456\u043B\u044C', 'https://zaxid.net/rss/60.xml'),
        ('\u0412\u043E\u043B\u0438\u043D\u044C', 'https://zaxid.net/rss/61.xml'),        
        ('\u0417\u0430\u043A\u0430\u0440\u043F\u0430\u0442\u0442\u044F', 'https://zaxid.net/rss/62.xml'),
        ('\u0427\u0435\u0440\u043D\u0456\u0432\u0446\u0456', 'https://zaxid.net/rss/63.xml'),        
        ('\u0420\u0456\u0432\u043D\u0435', 'https://zaxid.net/rss/65.xml'),
        ('\u0425\u043C\u0435\u043B\u044C\u043D\u0438\u0446\u044C\u043A\u0438\u0439', 'https://zaxid.net/rss/68.xml'),        
        ('\u041D\u0435\u0440\u0443\u0445\u043E\u043C\u0456\u0441\u0442\u044C', 'https://zaxid.net/rss/37.xml'),
        ('\u0427\u0435\u0440\u0432\u043E\u043D\u043E\u0433\u0440\u0430\u0434', 'https://zaxid.net/rss/40.xml'),        
        ('\u0421\u0442\u0440\u0438\u0439', 'https://zaxid.net/rss/41.xml'),
        ('\u0414\u0440\u043E\u0433\u043E\u0431\u0438\u0447', 'https://zaxid.net/rss/42.xml'),        
        ('\u0412\u0456\u043D\u043D\u0438\u0446\u044F', 'https://zaxid.net/rss/44.xml'),
        ('\u041F\u043E\u0434\u043E\u0440\u043E\u0436\u0456', 'https://zaxid.net/rss/46.xml'),        
        ('\u0414\u0456\u0442\u0438', 'https://zaxid.net/rss/53.xml'),
        ('\u0413\u0440\u043E\u043C\u0430\u0434\u0441\u044C\u043A\u0438\u0439\u0020\u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442', 'https://zaxid.net/rss/54.xml'),        
        ('\u0420\u0435\u0446\u0435\u043F\u0442\u0438', 'https://zaxid.net/rss/55.xml'),
        ('\u0421\u043F\u043E\u0440\u0442', 'https://zaxid.net/rss/56.xml'),        
        ('\u041A\u0443\u0440\u0439\u043E\u0437\u0438', 'https://zaxid.net/rss/57.xml'),
        ('\u0414\u043E\u0437\u0432\u0456\u043B\u043B\u044F', 'https://zaxid.net/rss/58.xml')
    ]


Fixed built-in Український Тиждень recipe (ukraiyns_kii_tizhdien.recipe & ukraiyns_tizhdien.recipe): HTTPS, new logo, revised RSS feeds. Bonus: 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 UATizhden(BasicNewsRecipe):
    title = u'\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0438\u0439 \u0422\u0438\u0436\u0434\u0435\u043d\u044c'
    __author__ = 'rpalyvoda (with fixes by bugmen00t)'
    oldest_article = 7
    max_articles_per_feed = 100
    language = 'uk'
    cover_url = 'https://tyzhden.ua/sharing_image.jpg'
    auto_cleanup = True

    feeds = [
    (u'\u041D\u043E\u0432\u0438\u043D\u0438', u'https://tyzhden.ua/RSS/All/')
    ]

Last edited by bugmen00t; 07-19-2022 at 04:43 PM.
bugmen00t is offline   Reply With Quote
Old 07-19-2022, 04:40 PM   #4
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
Built-in Russian recipes

CURRENT STATE OF RUSSIAN RECIPES

  • 3DNews: Daily Digital Digest (3dnews.recipe) by bugmen00t: OK
    Spoiler:
    Outdated RSS feeds
  • 7x7 (7x7.recipe) by bugmen00t: OK
    Spoiler:
    No images in articles
  • Breaking Mad (breaking_mad.recipe) by bugmen00t: OK
  • Colta.ru (colta.recipe) by bug_me_not: no updates
    Spoiler:
    Temporary on hold since March 2022
  • Izvestia (izvestia.recipe) by Darko Miletic: fixable
    Spoiler:
  • Kommersant (kommersant.recipe) by Darko Miletic: fixable
  • Lenta.ru - Новости (lenta_ru.recipe) by MrBeef12: OK
    Spoiler:
    No images in articles
  • Novaya Gazeta (novaya_gazeta.recipe) by muwa: not working
    Spoiler:
    Temporary on hold since March 2022
  • RBC.ru (rbc_ru.recipe) by A. Chewi: fixable
    Spoiler:
    Need to replace http:// with https://, add autocleanup, remove old RSS feeds & add RSS feeds from https://rssexport.rbc.ru/rbcnews/news/30/full.rss and http://static.feed.rbc.ru/rbc/intern...bc.ru/news.rss
  • RIA Novosti - Russian (ria_ru.recipe) by Darko Miletic: fixable.
    • N.B.: English (rian_eng.recipe) and Spanis editions (rian_spa.recipe) by Darko Miletic are not working
      Spoiler:
      Non-Russian versions were replaced by https://Sputnik.com since December 2014
  • RT на русском (rt.recipe) by Vuizur: OK
  • TJournal (tjournal.recipe) by bug_me_not: OK
    Spoiler:
    Fragments of JSON garbage and comments in the articles, no images due to WEBP
  • The Insider (the_insider.recipe) by bugmen00t: fixable
    Spoiler:
    Need to replace http:// with https:// and replace all RSS feeds with single feed https://theins.ru/feed
  • iXBT.com (ixbt.recipe) by bugmen00t: OK
    Spoiler:
    Outdated RSS feeds
  • Алексей Навальный (navalny.recipe) by bugmen00t: OK
  • Аргументы и Факты - aif.ru (aif_ru.recipe) by MrBeef12: OK
  • Задолба!ли (zadolba_li.recipe) by bugmen00t: not working
    Spoiler:
    Permanently shot down on 24/02/2022
  • Идеальный пиксель (id_pixel.recipe) by bugmen00t: OK
    Spoiler:
    Need to replace http:// with https://, need to fix garbage in the articles
  • ИноПресса (inopressa.recipe) by bug_me_not: not working
    Spoiler:
    On hold since December 2021
  • Компьютерра (kompiutierra.recipe) by lcd1232:fixable
    Spoiler:
    No images in articles, need to replace RSS feed with https://www.computerra.ru/feed/
  • МедиаЗона (media_zone.recipe) by bugmen00t: fixable
    Spoiler:
    Fix garbage in articles, update favicon to https://zona.media/s/favicon/mz/favicon-196x196.png, update RSS feed to https://zona.media/rss, add new RSS feeds from https://mediazona.by/rss and https://mediazona.ca/rss
  • ОВД-Инфо (oba.recipe) by bugmen00t: OK
  • Правда (pravda_ru.recipe) by Darko Miletic: fixable
    Spoiler:
    Empty articles, need to replace http:// with https://
  • Троицкий вариант (trv.recipe) by Vadim Dyadkin: OK
    Spoiler:
    Need to clean garbage in articles, remove comments section, replace http:// with https://
  • Эхо Москвы (echo_moskvy.recipe) by bug_me_not: not working
    Spoiler:
    Permanently shot down on 04/03/2022

Total: 25 entries (25 unique recipes):
  • 12 are OK
  • 8 needs fixing
  • 5 are dead
bugmen00t is offline   Reply With Quote
Old 07-19-2022, 04:41 PM   #5
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
Built-in Russian recipes

FIXED RUSSAIN RECIPES


Improved built-in 3DNews: Daily Digital Digest recipe (3dnews.recipe): HTTPS, revised RSS feeds.
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 News(BasicNewsRecipe):
    title = '3DNews: Daily Digital Digest'
    __author__ = 'bugmen00t'
    description = '\u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0435 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u043E\u0435 \u043E\u043D\u043B\u0430\u0439\u043D-\u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u043F\u043E\u0441\u0432\u044F\u0449\u0435\u043D\u043D\u043E\u0435 \u0446\u0438\u0444\u0440\u043E\u0432\u044B\u043C \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F\u043C'
    publisher = '3DNews'
    category = 'news'
    cover_url = u'http://www.3dnews.ru/assets/images/logo.png'
    language = 'ru'
    auto_cleanup = True

    oldest_article = 15
    max_articles_per_feed = 60

    feeds = [
        ('\u0412\u0430\u0436\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438','https://3dnews.ru/breaking/rss/'),
        ('\u0412\u0441\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438','https://3dnews.ru/news/rss/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 - \u0445\u0430\u0440\u0434','https://3dnews.ru/hardware-news/rss'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 - \u0433\u0430\u0434\u0436\u0435\u0442\u044B','https://3dnews.ru/gadgets/rss/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 - \u0441\u043E\u0444\u0442','https://3dnews.ru/software-news/rss/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438 - \u0438\u0433\u0440\u044B','https://3dnews.ru/games/rss/'),
        ('\u0423\u043C\u043D\u044B\u0435 \u0412\u0435\u0449\u0438','https://3dnews.ru/smart-things/rss/'),
        ('\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430','https://3dnews.ru/editorial/rss/'),
        ('\u041F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u044B \u0438 \u043F\u0430\u043C\u044F\u0442\u044C','https://3dnews.ru/cpu/rss/'),
        ('\u041C\u0430\u0442\u0435\u0440\u0438\u043D\u0441\u043A\u0438\u0435 \u043F\u043B\u0430\u0442\u044B','https://3dnews.ru/motherboard/rss/'),
        ('\u041A\u043E\u0440\u043F\u0443\u0441\u0430, \u0411\u041F \u0438 \u043E\u0445\u043B\u0430\u0436\u0434\u0435\u043D\u0438\u0435','https://3dnews.ru/cooling/rss/'),
        ('\u0412\u0438\u0434\u0435\u043E\u043A\u0430\u0440\u0442\u044B','https://3dnews.ru/video/rss/'),
        ('\u041C\u043E\u043D\u0438\u0442\u043E\u0440\u044B \u0438 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0440\u044B','https://3dnews.ru/display/rss/'),
        ('\u041D\u0430\u043A\u043E\u043F\u0438\u0442\u0435\u043B\u0438','https://3dnews.ru/storage/rss/'),
        ('\u0426\u0438\u0444\u0440\u043E\u0432\u043E\u0439 \u0430\u0432\u0442\u043E\u043C\u043E\u0431\u0438\u043B\u044C','https://3dnews.ru/auto/rss/'),
        ('\u0421\u043E\u0442\u043E\u0432\u0430\u044F \u0441\u0432\u044F\u0437\u044C','https://3dnews.ru/phone/rss/'),
        ('\u041F\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044F','https://3dnews.ru/peripheral/rss/'),
        ('\u041D\u043E\u0443\u0442\u0431\u0443\u043A\u0438 \u0438 \u041F\u041A','https://3dnews.ru/mobile/rss/'),
        ('\u041F\u043B\u0430\u043D\u0448\u0435\u0442\u044B','https://3dnews.ru/tablets/rss/'),
        ('\u0417\u0432\u0443\u043A \u0438 \u0430\u043A\u0443\u0441\u0442\u0438\u043A\u0430','https://3dnews.ru/multimedia/rss/'),
        ('\u0426\u0438\u0444\u0440\u043E\u0432\u043E\u0435 \u0444\u043E\u0442\u043E \u0438 \u0432\u0438\u0434\u0435\u043E','https://3dnews.ru/digital/rss/'),
        ('\u0421\u0435\u0442\u0438 \u0438 \u043A\u043E\u043C\u043C\u0443\u043D\u0438\u043A\u0430\u0446\u0438\u0438','https://3dnews.ru/communication/rss/'),
        ('\u041F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043D\u043E\u0435 \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u0438\u0435','https://3dnews.ru/software/rss/'),
        ('Off-\u0441\u044F\u043D\u043A\u0430','https://3dnews.ru/offsyanka/rss/'),
        ('\u041C\u0430\u0441\u0442\u0435\u0440\u0441\u043A\u0430\u044F','https://3dnews.ru/workshop/rss/'),
        ('ServerNews - \u0441\u0442\u0430\u0442\u044C\u0438','https://servernews.ru/rss'),
        ('ServerNews - \u043D\u043E\u0432\u043E\u0441\u0442\u0438','https://servernews.ru/news/rss')
    ]

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


Improved built-in 7x7 recipe (7x7.recipe): new domain, revised RSS feeds. Unable to fetch lazyloaded images, so text-only output for now Bonus: 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 News(BasicNewsRecipe):
    title = '7x7'
    __author__ = 'bugmen00t'
    description = '7x7 - \u043C\u0435\u0436\u0440\u0435\u0433\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0436\u0443\u0440\u043D\u0430\u043B'
    publisher = '7x7-journal.ru'
    category = 'news'
    cover_url = u'https://semnasem.org/site-specific/7x7-journal.ru/images/frontend/logo/logo-header.svg'
    language = 'ru'
    no_stylesheets = True
    remove_javascript = True
    auto_cleanup = False

    oldest_article = 14
    max_articles_per_feed = 30

    feeds = [
        ('7x7', 'https://semnasem.org/rss/default.xml'),
    ]

    remove_tags_before = dict(name='article',attrs={'class': 'article'})
    
    remove_tags_after = dict(name='div', attrs={'class': 'article__footer-wrap'})
    
    remove_tags = [
        dict(name='div', attrs={'class': 'article__footer-wrap'}),
        dict(name='div', attrs={'class': 'promolink-widget'})
    ]


Fixed built-in Izvestia recipe (izvestia.recipe): HTTPS, revised RSS feeds.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

__license__ = 'GPL v3'
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
'''
izvestia.ru
'''

from calibre.web.feeds.news import BasicNewsRecipe

class Izvestia(BasicNewsRecipe):
    title = 'Izvestia'
    __author__ = 'Darko Miletic (with fixes by bugmen00t)'
    description = 'News from Russia'
    publisher = 'Izvestia'
    category = 'news, politics, Russia'
    oldest_article = 5
    max_articles_per_feed = 100
    auto_cleanup = False
    no_stylesheets = True
    use_embedded_content = False
    language = 'ru'
    publication_type = 'newspaper'
    cover_url = u'https://cdn.iz.ru/profiles/portal/themes/purple/images/favicons/apple-icon-180x180.png'

    remove_tags_before = dict(name='div', attrs={'role': 'article'})
  
    remove_tags_after = dict(name='div', attrs={'role': 'article'})
    
    remove_tags = [
        dict(name='div', attrs={'class': 'article_page__left__top__views'}),
        dict(name='div', attrs={'class': 'hash_tags'}),
        dict(name='div', attrs={'class': 'get_yandex_subscription_links'}),
        dict(name='div', attrs={'class': 'article_buttons_block'}),
        dict(name='div', attrs={'class': 'rubrics_btn'}),
        dict(name='div', attrs={'class': 'hidden'}),
        dict(name='div', attrs={'class': 'share_bottom2'}),                        
        dict(name='div', attrs={'class': 'recommendation-block'}),                        
        dict(name='div', attrs={'class': 'plug-text'}),                                     
        dict(name='div', attrs={'class': 'get_news_link'}),                        
        dict(name='div', attrs={'itemprop': 'address'})
        ]

    feeds = [
        (u'Новости', u'https://iz.ru/xml/rss/all.xml')]

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


Fixed built-in Kommersant recipe (kommersant.recipe): HTTPS, revised RSS feeds. Couldn't figure out how to keep images though, will be grateful if anyone could
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

__license__ = 'GPL v3'
__copyright__ = '2010-2013, Darko Miletic <darko.miletic at gmail.com>'
'''
www.kommersant.ru
'''

from calibre.web.feeds.news import BasicNewsRecipe


class Kommersant_ru(BasicNewsRecipe):
    title = 'Kommersant'
    __author__ = 'Darko Miletic (with fixes by bugmen00t)'
    description = 'News from Russia'
    publisher = 'Kommersant'
    category = 'news, politics, Russia'
    oldest_article = 7
    max_articles_per_feed = 50
    no_stylesheets = True
    use_embedded_content = False
    language = 'ru'
    publication_type = 'newspaper'
    cover_url = 'https://iv.kommersant.ru/ContentFlex/images/logo.png'

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

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

    remove_tags = [
        dict(name='ul', attrs={'class': 'crumbs'}),
        dict(name='div', attrs={'class': 'hide_desktop'}),
        dict(name='div', attrs={'class': 'incut incut--right'}),
        dict(name='div', attrs={'class': 'incut incut--left'}),
        dict(name='div', attrs={'class': 'incut incut--center'}),
        dict(name='div', attrs={'class': 'ba'}),
        dict(name='div', attrs={'id': 'lenta'}),        
        dict(name='div', attrs={'class': 'layout basement_news__body'}),
        dict(name='footer', attrs={'class': 'footer'}),
        dict(name='div', attrs={'class': 'ui-modal'}),
        dict(name='section', attrs={'class': 'potd'}),
        dict(name='footer', attrs={'class': 'doc_footer'}),
        dict(name='div', attrs={'class': 'adv_interscroll hide_desktop'})
        ]

    feeds = [
        ('\u0413\u043B\u0430\u0432\u043D\u043E\u0435','https://www.kommersant.ru/rss/main.xml'),
        ('\u0413\u0430\u0437\u0435\u0442\u0430 "\u041A\u043E\u043C\u043C\u0435\u0440\u0441\u0430\u043D\u0442"','https://www.kommersant.ru/rss/daily.xml'),
        ('\u041B\u0435\u043D\u0442\u0430 \u043D\u043E\u0432\u043E\u0441\u0442\u0435\u0439','https://www.kommersant.ru/RSS/news.xml'),
        ('\u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B \u0441 \u0441\u0430\u0439\u0442\u0430','https://www.kommersant.ru/RSS/corp.xml'),
        ('\u0420\u0430\u0434\u0438\u043E \u041A\u043E\u043C\u043C\u0435\u0440\u0441\u0430\u043D\u0442\u044A-FM','https://www.kommersant.ru/RSS/radio.xml'),
        ('\u0422\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F','https://www.kommersant.ru/RSS/tema.xml'),
        ('\u0416\u0443\u0440\u043D\u0430\u043B \u00AB\u041E\u0413\u041E\u041D\u0401\u041A\u00BB','https://www.kommersant.ru/RSS/ogoniok.xml'),
        ('\u0416\u0443\u0440\u043D\u0430\u043B \u00AB\u041A\u043E\u043C\u043C\u0435\u0440\u0441\u0430\u043D\u0442\u044A WEEKEND\u00BB','https://www.kommersant.ru/RSS/weekend.xml'),
        ('\u0416\u0443\u0440\u043D\u0430\u043B \u00AB\u041A\u043E\u043C\u043C\u0435\u0440\u0441\u0430\u043D\u0442\u044A \u0410\u0412\u0422\u041E\u041F\u0418\u041B\u041E\u0422\u00BB','https://www.kommersant.ru/RSS/auto.xml'),
        ('\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430','https://www.kommersant.ru/rss/section-politics.xml'),
        ('\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430','https://www.kommersant.ru/RSS/section-economics.xml'),
        ('\u0411\u0438\u0437\u043D\u0435\u0441','https://www.kommersant.ru/rss/section-business.xml'),
        ('\u0412 \u043C\u0438\u0440\u0435','https://www.kommersant.ru/rss/section-world.xml'),
        ('\u041F\u0440\u043E\u0438\u0441\u0448\u0435\u0441\u0442\u0432\u0438\u044F','https://www.kommersant.ru/rss/section-accidents.xml'),
        ('\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u043E','https://www.kommersant.ru/rss/section-society.xml'),
        ('\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430','https://www.kommersant.ru/rss/section-culture.xml'),
        ('\u0421\u043F\u043E\u0440\u0442','https://www.kommersant.ru/rss/section-sport.xml'),
        ('Hi-Tech','https://www.kommersant.ru/RSS/section-hitech.xml'),
        ('\u0410\u0432\u0442\u043E','https://www.kommersant.ru/RSS/Autopilot_on.xml'),
        ('\u0421\u0442\u0438\u043B\u044C','https://www.kommersant.ru/RSS/section-style.xml'),
        ('\u0421\u0430\u043D\u043A\u0442-\u041F\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433','https://www.kommersant.ru/rss/regions/piter_all.xml'),
        ('\u0412\u043E\u0440\u043E\u043D\u0435\u0436','https://www.kommersant.ru/rss/regions/vrn_all.xml'),
        ('\u0415\u043A\u0430\u0442\u0435\u0440\u0438\u043D\u0431\u0443\u0440\u0433','https://www.kommersant.ru/rss/regions/ekaterinburg_all.xml'),
        ('\u0418\u0436\u0435\u0432\u0441\u043A','https://www.kommersant.ru/rss/regions/izhevsk_all.xml'),
        ('\u041A\u0430\u0437\u0430\u043D\u044C','https://www.kommersant.ru/rss/regions/kazan_all.xml'),
        ('\u041A\u0440\u0430\u0441\u043D\u043E\u0434\u0430\u0440','https://www.kommersant.ru/rss/regions/krasnodar_all.xml'),
        ('\u041A\u0440\u0430\u0441\u043D\u043E\u044F\u0440\u0441\u043A','https://www.kommersant.ru/rss/regions/krasnoyarsk_all.xml'),
        ('\u041D\u0438\u0436\u043D\u0438\u0439 \u041D\u043E\u0432\u0433\u043E\u0440\u043E\u0434','https://www.kommersant.ru/rss/regions/nnov_all.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0438\u0431\u0438\u0440\u0441\u043A','https://www.kommersant.ru/rss/regions/novosibirsk_all.xml'),
        ('\u041F\u0435\u0440\u043C\u044C','https://www.kommersant.ru/rss/regions/perm_all.xml'),
        ('\u0420\u043E\u0441\u0442\u043E\u0432-\u043D\u0430-\u0414\u043E\u043D\u0443','https://www.kommersant.ru/rss/regions/rostov_all.xml'),
        ('\u0421\u0430\u043C\u0430\u0440\u0430','https://www.kommersant.ru/rss/regions/samara_all.xml'),
        ('\u0421\u0430\u0440\u0430\u0442\u043E\u0432','https://www.kommersant.ru/rss/regions/saratov_all.xml'),
        ('\u0423\u0444\u0430','https://www.kommersant.ru/rss/regions/ufa_all.xml'),
        ('\u0427\u0435\u043B\u044F\u0431\u0438\u043D\u0441\u043A','https://www.kommersant.ru/rss/regions/chelyabinsk_all.xml')
    ]


Fixed built-in RBC.ru recipe (rbc_ru.recipe): HTTPS, page cleanup, revised RSS feeds.
Spoiler:
Code:
from calibre.web.feeds.news import BasicNewsRecipe


class RBC_ru(BasicNewsRecipe):
    title = u'RBC.ru'
    __author__ = 'A. Chewi (with fixes by bugmen00t)'
    description = u'\u0420\u043E\u0441\u0441\u0438\u0439\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 \u00AB\u0420\u043E\u0441\u0411\u0438\u0437\u043D\u0435\u0441\u041A\u043E\u043D\u0441\u0430\u043B\u0442\u0438\u043D\u0433\u00BB (\u0420\u0411\u041A) - \u043B\u0435\u043D\u0442\u044B \u043D\u043E\u0432\u043E\u0441\u0442\u0435\u0439 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0438, \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0438 \u0438 \u0444\u0438\u043D\u0430\u043D\u0441\u043E\u0432, \u0430\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B, \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u0438 \u043F\u0440\u043E\u0433\u043D\u043E\u0437\u044B, \u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0441\u0442\u0430\u0442\u044C\u0438'  # noqa
    needs_subscription = False
    cover_url = 'https://pics.rbc.ru/img/fp_v4/skin/img/logo.gif'
    cover_margins = (80, 160, '#ffffff')
    oldest_article = 20
    max_articles_per_feed = 50
    summary_length = 200
    remove_empty_feeds = True
    no_stylesheets = True
    remove_javascript = True
    use_embedded_content = False
    conversion_options = {'linearize_tables': True}
    auto_cleanup = True
    language = 'ru'
    timefmt = ' [%a, %d %b, %Y]'

    feeds = [(u'RSS \u043D\u043E\u0432\u043E\u0441\u0442\u0438', u'https://rssexport.rbc.ru/rbcnews/news/30/full.rss'),
             (u'\u0413\u043B\u0430\u0432\u043D\u044B\u0435\u0020\u043D\u043E\u0432\u043E\u0441\u0442\u0438', u'http://static.feed.rbc.ru/rbc/internal/rss.rbc.ru/rbc.ru/news.rss'),
             ]


Fixed built-in RIA Novosti - Russian recipe (ria_ru.recipe): HTTPS, revised RSS feeds.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

__license__ = 'GPL v3'
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
'''
www.ria.ru
'''

from calibre.web.feeds.news import BasicNewsRecipe


class RIANovosti(BasicNewsRecipe):
    title = 'RIA Novosti - Russian'
    __author__ = 'Darko Miletic (with fixes by bugmen00t)'
    description = 'News from Russia'
    publisher = '\u041C\u0418\u0410 \u00AB\u0420\u043E\u0441\u0441\u0438\u044F \u0441\u0435\u0433\u043E\u0434\u043D\u044F\u00BB\u2028 (MIA Russia Today)'
    category = 'news, politics, Russia'
    oldest_article = 7
    max_articles_per_feed = 100
    no_stylesheets = True
    use_embedded_content = False
    encoding = 'utf8'
    language = 'ru'
    publication_type = 'newsportal'
    cover_url = 'https://oldimg.ria.ru/i/ria_social.png'

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

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

    remove_tags = [
        dict(name='div', attrs={'class': 'article__userbar'}),
        dict(name='div', attrs={'class': 'article__title'}),
        dict(name='div', attrs={'class': 'article__aggr'}),
        dict(name='div', attrs={'class': 'article__article-info'})
        ]

    feeds = [
    (u'\u041B\u0435\u043D\u0442\u0430 \u043D\u043E\u0432\u043E\u0441\u0442\u0435\u0439', u'https://ria.ru/export/rss2/archive/index.xml')
    ]


Improved built-in TJournal recipe (tjournal.recipe): articles cleanup, revised RSS feeds. Still ugly placeholders instead of cool in-article images, that's a shame Bonus: updated favicon
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8


class TJournal(BasicNewsRecipe):
    title = u'TJournal'
    __author__ = 'bug_me_not (with fixes by bugmen00t)'
    description = 'TJournal: \u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u043E \u043C\u0435\u0434\u0438\u0430, \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F\u0445 \u0438 \u0442\u0440\u0435\u043D\u0434\u0430\u0445'
    publisher = 'tjournal.ru'
    category = 'news'
    language = 'ru'
    no_stylesheets = False
    remove_javascript = True
    oldest_article = 30
    max_articles_per_feed = 100
    cover_url = 'https://tjournal.ru/static/build/tjournal.ru/images/search_logo.png'

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

    remove_tags_after = dict(
        name='div', attrs={'class': 'content-footer content-footer--full l-island-a'})

    remove_tags = [
        dict(name='div', attrs={'class': 'content-footer content-footer--full l-island-a'}),
        dict(name='div', attrs={'air-module': 'module.distributionFloating'}),
        dict(name='span', attrs={'class': 'content-editorial-tick'}),
        dict(name='vue'),
        dict(name='div', attrs={'class': 'comments'}),
        dict(name='div', attrs={'class': 'propaganda'}),
        dict(name='div', attrs={'class': 'propaganda propaganda--with-footer'}),
        dict(name='div', attrs={'air-module': 'module.gallery'}),
        dict(name='div', attrs={'class': 'content-container'}),
        dict(name='div', attrs={'class': 'content-header__item content-header-number'}),
        dict(name='span', attrs={'class': 'views__value'}),
        dict(name='span', attrs={'class': 'views__label'})
    ]

    feeds = [
        ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u043D\u043E\u0435','https://tjournal.ru/rss'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438','https://tjournal.ru/rss/news'),
        ('\u0421\u0432\u0435\u0436\u0435\u0435','https://tjournal.ru/rss/new'),
        ('\u0422\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438','https://tjournal.ru/rss/tech'),
        ('\u0420\u0430\u0437\u0431\u043E\u0440\u044B','https://tjournal.ru/rss/analysis'),
        ('\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442','https://tjournal.ru/rss/internet')
        ]

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


Fixed built-in The Insider recipe (the_insider.recipe): HTTPS, revised RSS feeds. Bonus: favicon
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
from calibre.web.feeds.news import BasicNewsRecipe

class TheInsider(BasicNewsRecipe):
    title                 = u'The Insider'
    cover_url             = u'https://s3-us-west-2.amazonaws.com/anchor-generated-image-bank/production/podcast_uploaded_nologo400/10331708/10331708-1604408816914-d03520fb339d5.jpg'
    __author__            = 'bugmen00t'
    description           = '\u0420\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F \u0420\u0435\u043F\u043E\u0440\u0442\u0430\u0436\u0438 \u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430'
    publisher             = 'theins.ru'
    category              = 'news'
    language              = 'ru'
    no_stylesheets        = True
    remove_javascript     = True
    oldest_article        = 300
    max_articles_per_feed = 100

    remove_tags_before    = dict(name='div', attrs={'id':'wrapper'})
    remove_tags_after     = dict(name='p', attrs={'style':' color: #999999;'})
    remove_tags           = [
                            dict(name='div',attrs={'class':'post-share'}),
                            dict(name='div', attrs={'class':'post-share fixed-likes'}),
                            dict(name='div', attrs={'class':'topads'}),
                            dict(name='div', attrs={'class':'pre-content-line'}),
                            dict(name='div', attrs={'class':'author-opinions'}),
                            dict(name='div', attrs={'class':'content-banner'}),
                            dict(name='div', attrs={'id':'sidebar'})
                            ]
      

    feeds                 = [
                            (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', u'https://theins.ru/feed')
                            ]


Improved built-in iXBT.com recipe (ixbt.recipe): revised RSS feeds.
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8

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

class Ixbt(BasicNewsRecipe):
    title = 'iXBT.com'
    __author__ = 'bugmen00t'
    description = '\u0421\u043F\u0435\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0440\u043E\u0441\u0441\u0438\u0439\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 \u0441\u0435\u0440\u0432\u0435\u0440, \u043E\u0441\u0432\u0435\u0449\u0430\u044E\u0449\u0438\u0439 \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u0430\u043F\u043F\u0430\u0440\u0430\u0442\u043D\u043E\u0433\u043E \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u0438\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043E\u0432, \u043A\u043E\u043C\u043C\u0443\u043D\u0438\u043A\u0430\u0446\u0438\u0439 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u0432, 3D-\u0433\u0440\u0430\u0444\u0438\u043A\u0438 \u0438 \u0437\u0432\u0443\u043A\u0430, \u0446\u0438\u0444\u0440\u043E\u0432\u043E\u0433\u043E \u0444\u043E\u0442\u043E \u0438 \u0432\u0438\u0434\u0435\u043E, Hi-Fi \u0430\u043F\u043F\u0430\u0440\u0430\u0442\u0443\u0440\u044B \u0438 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0440\u043E\u0432, \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0439 \u0441\u0432\u044F\u0437\u0438 \u0438 \u043F\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438, \u0438\u0433\u0440\u043E\u0432\u044B\u0445 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0439 \u0438 \u043C\u043D\u043E\u0433\u043E\u0433\u043E \u0434\u0440\u0443\u0433\u043E\u0433\u043E.'
    publisher = 'www.ixbt.com'
    category = 'news'
    cover_url = u'https://www.ixbt.com/images/ixbt-logo-new.jpg'
    language = 'ru'
    auto_cleanup = True

    oldest_article = 30
    max_articles_per_feed = 100

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

    remove_tags_after = dict(name='ul', attrs={'id': 'soc_ShareBlock'})

    feeds = [
        (u'\u0421\u0442\u0430\u0442\u044C\u0438', 'http://www.ixbt.com/export/articles.rss'),
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'http://www.ixbt.com/export/news.rss'),
        (u'\u0421\u0432\u0435\u0436\u0438\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 DVD \u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0438\u0445 \u043A\u0438\u043D\u043E\u0442\u0435\u0430\u0442\u0440\u043E\u0432', 'http://www.ixbt.com/export/dvdnews.rss'),
        (u'\u0421\u0432\u0435\u0436\u0438\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u0438\u0437 \u043C\u0438\u0440\u0430 Apple', 'http://www.ixbt.com/export/applenews.rss'),
        (u'\u041F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u044B', 'http://www.ixbt.com/export/sec_cpu.rss'),
        (u'\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0435 \u043F\u043B\u0430\u0442\u044B, \u043F\u0430\u043C\u044F\u0442\u044C \u0438 \u0447\u0438\u043F\u0441\u0435\u0442\u044B', 'http://www.ixbt.com/export/sec_mainboard.rss'),
        (u'D-\u0412\u0438\u0434\u0435\u043E \u0438 TV-\u0442\u044E\u043D\u0435\u0440\u044B', 'http://www.ixbt.com/export/sec_video.rss'),
        (u'\u0421\u0435\u0442\u0438 \u0438 \u0421\u0435\u0440\u0432\u0435\u0440\u044B', 'http://www.ixbt.com/export/sec_comm.rss'),
        (u'\u041E\u043F\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043F\u0440\u0438\u0432\u043E\u0434\u044B \u0438 \u043D\u043E\u0441\u0438\u0442\u0435\u043B\u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438', 'http://www.ixbt.com/export/sec_optical.rss'),
        (u'\u041F\u0440\u0438\u043D\u0442\u0435\u0440\u044B \u0438 \u041C\u0424\u0423', 'http://www.ixbt.com/export/sec_printer.rss'),
        (u'\u041C\u043E\u043D\u0438\u0442\u043E\u0440\u044B', 'http://www.ixbt.com/export/sec_monitor.rss'),
        (u'\u041D\u043E\u0441\u0438\u0442\u0435\u043B\u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438', 'http://www.ixbt.com/export/sec_storage.rss'),
        (u'\u0426\u0438\u0444\u0440\u043E\u0432\u043E\u0439 \u0437\u0432\u0443\u043A', 'http://www.ixbt.com/export/sec_multimedia.rss'),
        (u'ProAudio', 'http://www.ixbt.com/export/sec_proaudio.rss'),
        (u'\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0432 \u0447\u0438\u0441\u043B\u0430\u0445', 'http://www.ixbt.com/export/sec_digimage.rss'),
        (u'\u041F\u0440\u043E\u0435\u043A\u0442\u043E\u0440\u044B, \u043A\u0438\u043D\u043E \u0438 \u0434\u043E\u043C\u0430\u0448\u043D\u0438\u0435 \u043A\u0438\u043D\u043E\u0442\u0435\u0430\u0442\u0440\u044B', 'http://www.ixbt.com/export/sec_dvd.rss'),
        (u'\u0426\u0438\u0444\u0440\u043E\u0432\u043E\u0435 \u0432\u0438\u0434\u0435\u043E', 'http://www.ixbt.com/export/sec_divideo.rss'),
        (u'\u041C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u041F\u041A', 'http://www.ixbt.com/export/sec_portopc.rss'),
        (u'\u041C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430', 'http://www.ixbt.com/export/sec_pda.rss'),
        (u'\u0412\u0441\u0435\u0433\u0434\u0430 \u043D\u0430 \u0441\u0432\u044F\u0437\u0438', 'http://www.ixbt.com/export/sec_mobile.rss'),
        (u'\u041A\u043E\u0440\u043F\u0443\u0441\u0430, \u0441\u0438\u0441\u0442\u0435\u043C\u044B \u043F\u0438\u0442\u0430\u043D\u0438\u044F \u0438 \u043E\u0445\u043B\u0430\u0436\u0434\u0435\u043D\u0438\u044F', 'http://www.ixbt.com/export/sec_power.rss'),
        (u'\u041A\u043E\u043B\u043E\u043D\u043A\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430', 'http://www.ixbt.com/export/sec_editorial.rss'),
        (u'iXBT Live', 'https://www.ixbt.com/live/rss/index/')
        ]


Improved built-in Идеальный пиксель recipe (id_pixel.recipe): HTTPS, articles cleanup. Bonus: favicon
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8

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

class IdPixel(BasicNewsRecipe):
    title          = '\u0418\u0434\u0435\u0430\u043B\u044C\u043D\u044B\u0439 \u043F\u0438\u043A\u0441\u0435\u043B\u044C'
    cover_url = u'https://idpixel.ru/i/logo2x.png'
    description           = '\u041D\u043E\u0432\u043E\u0441\u0442\u043D\u043E\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u043E \u0440\u0435\u0442\u0440\u043E-\u0438\u0433\u0440\u0430\u0445 \u0438 \u0440\u0435\u0442\u0440\u043E-\u0442\u0435\u0445\u043D\u0438\u043A\u0435. \u0412\u043E\u0441\u044C\u043C\u0438\u0431\u0438\u0442\u043D\u044B\u0435 \u0438\u0433\u0440\u044B, \u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0438\u0431\u0438\u0442\u043D\u044B\u0435 \u043A\u043E\u043D\u0441\u043E\u043B\u0438, \u0434\u043E\u043C\u0430\u0448\u043D\u0438\u0435 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u044B \u0441 \u0438\u0433\u0440\u0430\u043C\u0438 \u043D\u0430 \u043A\u0430\u0441\u0441\u0435\u0442\u0430\u0445 \u0438 \u0442\u0430\u043A \u0434\u0430\u043B\u0435\u0435. \u041C\u044B \u0438\u0449\u0435\u043C \u0440\u0435\u0442\u0440\u043E-\u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u043F\u043E \u0432\u0441\u0435\u043C\u0443 \u0441\u0432\u0435\u0442\u0443 \u0438 \u0434\u043E\u043D\u043E\u0441\u0438\u043C \u0438\u0445 \u0434\u043E \u0432\u0430\u0441.'  # noqa
    publisher             = '\u041C\u0438\u0445\u0430\u0438\u043B \u0421\u0443\u0434\u0430\u043A\u043E\u0432'
    category              = 'news'
    __author__            = 'bugmen00t'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup = True
    oldest_article = 100
    max_articles_per_feed = 50

    remove_tags_before = dict(name='div', attrs={'class':'blog-post'})
    remove_tags_after  = dict(name='div', attrs={'style':'margin: 20px 0 0 2px;font-size: 16px;'})
    remove_tags     = [dict(name='div',attrs={'class':' likely__widget likely__widget_vkontakte'}),
                        dict(name='div', attrs={'class':' likely__widget likely__widget_twitter'}),
                         dict(name='div', attrs={'class':' likely__widget likely__widget_facebook'}),
                         dict(name='div', attrs={'class':' likely__widget likely__widget_telegram'}),
                         dict(name='div', attrs={'class':' likely__widget likely__widget_odnoklassniki'}),
                         dict(name='div', attrs={'class':'comments_input_disabled'}),
                         dict(name='div', attrs={'id':'comments'})
                         ]

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


Fixed built-in Компьютерра recipe (kompiutierra.recipe): HTTPS, revised RSS feeds. Bonus: updated favicon
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8

__license__ = 'GPL v3'
__copyright__ = '2015, lcd1232, malexey1984@gmail.com'
__author__ = 'lcd1232'

from calibre.web.feeds.news import BasicNewsRecipe


class Computerra(BasicNewsRecipe):
    title = u'\u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0440\u0430'
    __author__ = 'lcd1232 (with fixes by bugmen00t)'
    description = u'\u041A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0440\u0430: \u0432\u0441\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u043F\u0440\u043E \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u044B, \u0436\u0435\u043B\u0435\u0437\u043E, \u043D\u043E\u0432\u044B\u0435 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438, \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0435 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u0438'
    cover_url = 'https://yt3.ggpht.com/ytc/AKedOLRCMA71rKaP4HfL2W26A-VdvsBj9BcOo7S6poTR=s900-c-k-c0x00ffffff-no-rj'
    language = 'ru'
    oldest_article = 100
    max_articles_per_feed = 50
    use_embedded_content = False
    remove_javascript = True
    no_stylesheets = False
    conversion_options = {'linearize_tables': True}
    simultaneous_downloads = 5

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

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

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

    feeds = [(u'\u041A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0440\u0430', 'https://www.computerra.ru/feed/')]


Fixed built-in МедиаЗона recipe (media_zone.recipe): revised RSS feeds. Bonus: favicon
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8

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

class MediaZona(BasicNewsRecipe):
    title = '\u041c\u0435\u0434\u0438\u0430\u0417\u043e\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\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u0441\u0434\u0435\u043B\u0430\u0432\u0448\u0435\u0435 \u0430\u043A\u0446\u0435\u043D\u0442 \u043D\u0430 \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u0437\u0430\u043A\u043E\u043D\u0430 \u0432 \u0420\u043E\u0441\u0441\u0438\u0438. \u041F\u043E \u043C\u043D\u0435\u043D\u0438\u044E \u0430\u0432\u0442\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u044B\u0445 \u043C\u0435\u0434\u0438\u0430\u044D\u043A\u0441\u043F\u0435\u0440\u0442\u043E\u0432, \u043F\u043E \u0446\u0438\u0442\u0438\u0440\u0443\u0435\u043C\u043E\u0441\u0442\u0438 \u0438 \u043F\u043E\u0441\u0435\u0449\u0430\u0435\u043C\u043E\u0441\u0442\u0438 \u0444\u043E\u0440\u043C\u0430\u0442 \u00AB\u041C\u0435\u0434\u0438\u0430\u0437\u043E\u043D\u044B\u00BB \u043E\u043A\u0430\u0437\u0430\u043B\u0441\u044F \u0432\u0435\u0434\u0443\u0449\u0438\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u043E\u043C \u043D\u043E\u0432\u043E\u0441\u0442\u043D\u043E\u0433\u043E \u0438\u0437\u0434\u0430\u043D\u0438\u044F \u0432 \u0420\u043E\u0441\u0441\u0438\u0438 2015 \u0433\u043E\u0434\u0430. \u00AB\u041C\u0435\u0434\u0438\u0430\u0437\u043E\u043D\u0430\u00BB \u043F\u0438\u0448\u0435\u0442 \u043E \u0440\u0435\u0430\u043B\u044C\u043D\u043E \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u044F\u0449\u0435\u043C \u0432 \u0420\u043E\u0441\u0441\u0438\u0438, \u043F\u0435\u0440\u0432\u043E\u0439 \u0443\u043B\u0430\u0432\u043B\u0438\u0432\u0430\u044F \u0432\u0435\u043A\u0442\u043E\u0440\u044B \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044F \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0430.'  # noqa
    publisher = 'zona.media'
    category = 'news'
    cover_url = u'https://zona.media/s/share/default_mz.png'
    language = 'ru'
    no_stylesheets = False
    remove_javascript = True
    auto_cleanup = True

    oldest_article = 30
    max_articles_per_feed = 100

    remove_tags_before = dict(name='section', attrs={'class': 'mz-layout-content__row pt0 clearfix'})

    remove_tags_after = dict(name='div', attrs={'class': 'mz-publish__wrapper'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'mz-agent-banner'}),
        dict(name='section', attrs={'data-share-id': 'post'})
        ]


    feeds = [
        ('\u041C\u0435\u0434\u0438\u0430\u0437\u043E\u043D\u0430 ', 'https://zona.media/rss'),
        ('\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C', 'https://mediazona.by/rss'),
        ('\u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0430\u044F \u0410\u0437\u0438\u044F', 'https://mediazona.ca/rss'),
        ]


Fixed built-in Правда.RU recipe (pravda_ru.recipe): HTTPS, revised RSS feeds. N.B.: it seems that site is geo-restricted and recipe probably won't work for non-Russian IPs. Bonus: updated favicon
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8

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

__license__ = 'GPL v3'
__copyright__ = '2012, Darko Miletic <darko.miletic at gmail.com>'
'''
www.pravda.ru
'''

from calibre.web.feeds.news import BasicNewsRecipe


class Pravda_ru(BasicNewsRecipe):
    title = u'\u041F\u0440\u0430\u0432\u0434\u0430'
    __author__ = 'Darko Miletic (with fixes by bugmen00t)'
    description = u'\u041F\u0440\u0430\u0432\u0434\u0430.\u0420\u0443: \u0410\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u0438'
    publisher = 'PRAVDA.Ru'
    category = 'news, politics, Russia'
    language = 'ru'
    publication_type = 'newspaper'
    cover_url = 'http://www.pravda.ru/pix/logo.gif'
    oldest_article = 7
    max_articles_per_feed = 50
    auto_cleanup = True
    
    remove_tags_before = dict(name='div', attrs={'class': 'full article full-article'})

    remove_tags_after = dict(name='div', attrs={'class': 'authors-block'})

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

    feeds = [
        (u'\u041F\u0440\u0430\u0432\u0434\u0430.RU', 'https://www.pravda.ru/export.xml'),
        (u'\u0421\u0442\u0430\u0442\u044C\u0438', 'https://www.pravda.ru/export-articles.xml'),
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.pravda.ru/export-news.xml')
        ]


Improved built-in Троицкий вариант recipe (trv.recipe): HTTPS, articles cleanup. Decided to keep the comments as they're often more interesting than the articles itself; could be completely disabled by uncommenting one line in remove_tags section.
Spoiler:
Code:
#!/usr/bin/env python2
# vim:fileencoding=utf-8

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

class TrvScience(BasicNewsRecipe):

    title = u'\u0422\u0440\u043e\u0438\u0446\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442'
    language = 'ru'
    __author__ = 'Vadim Dyadkin (with fixes by bugmen00t)'
    oldest_article = 30
    max_articles_per_feed = 100
    recursion = 4
    no_stylesheets = True
    simultaneous_downloads = 1
#    cover_url = 'https://i0.wp.com/trv-science.ru/uploads/logo_trv2-e1573805568596-1.png'
    cover_url = 'https://i0.wp.com/trv-science.ru/uploads/cropped-trv_neur-1024.png'
    
    remove_tags_before = dict(name='main', attrs={'id': 'main'})

    remove_tags_after = dict(name='div', attrs={'class': 'wpdiscuz-comment-pagination'})

    remove_tags =   [
        dict(name='span', attrs={'class': 'fa fa-user'}),
        dict(name='h4'),
        dict(name='svg'),
        dict(name='ul', attrs={'class': 'st-related-posts'}),
        dict(name='footer', attrs={'class': 'entry-meta'}),
#        dict(name='div', attrs={'id': 'comments'}),
        dict(name='div', attrs={'class': 'wpd-vote'}),
        dict(name='div', attrs={'class': 'mistape_caption'}),
        dict(name='div', attrs={'class': 'wpd-comment-share wpd-hidden wpd-tooltip wpd-top'}),
        dict(name='div', attrs={'class': 'wpd-comment-left '}),
        dict(name='div', attrs={'class': 'wpd-space'}),
        dict(name='div', attrs={'class': 'wpd-reply-button'}),
        dict(name='div', attrs={'class': 'wpd-comment-link wpd-hidden'}),
        dict(name='div', attrs={'class': 'wpd-comment-last-edited'}),
        dict(name='div', attrs={'class': 'wpd-comment-date'}),
        dict(name='div', attrs={'class': 'wpd-comment-info-bar'}),
        dict(name='div', attrs={'class': 'wpd-form-wrap'})
        ]

    feeds = [(u'\u0422\u0440\u043e\u0438\u0446\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442',
              u'https://trv-science.ru/feed/')]

Last edited by bugmen00t; 07-23-2022 at 02:54 AM. Reason: Медиазона and Троицкий Вариант recipe small fix
bugmen00t is offline   Reply With Quote
Advert
Old 07-20-2022, 02:30 AM   #6
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
Thanks updated and I fixed the images in kommersant for you.
kovidgoyal is offline   Reply With Quote
Old 07-20-2022, 06:51 AM   #7
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
Thanks updated and I fixed the images in kommersant for you.
Thank you very much for fixing Kommersant recipe & new/updated favicons.

There're two identical Український Тиждень recipes now (ukraiyns_kii_tizhdien.recipe and ukraiyns_tizhdien.recipe), maybe you could remove any of them to keep the only one?
bugmen00t is offline   Reply With Quote
Old 07-21-2022, 04:08 PM   #8
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 Russian Recipes (part 01 of ??)

A couple new recipes. Not sure how to correctly specify the language for those recipes that are being downloaded in Russian but their originating source is outside Russia. To avoid fragmentation, it probably would be easier to change language from "ru_UK", "ru_DE", "ru_GB" back to just "ru".

UNIAN.net (Russian version): Ukrainian Independent News Agency of News, one of the most cited source of news from across Ukraine. 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, classes

class Unian(BasicNewsRecipe):
    title = u'\u0423\u041D\u0418\u0410\u041D '
    description = u'\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u043E\u0435 \u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0435 \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0435 \u0410\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u041D\u043E\u0432\u043E\u0441\u0442\u0435\u0439 \u2013 \u043F\u0435\u0440\u0432\u043E\u0435 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435 \u0438 \u0441\u0430\u043C\u043E\u0435 \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\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, \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0432 1993 \u0433\u043E\u0434\u0443, \u043B\u0438\u0434\u0435\u0440 \u0441\u0440\u0435\u0434\u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u043D\u044B\u0445 \u043C\u0435\u0434\u0438\u0430 \u0441\u0442\u0440\u0430\u043D\u044B, \u0441\u0430\u043C\u044B\u0439 \u0446\u0438\u0442\u0438\u0440\u0443\u0435\u043C\u044B\u0439 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u043D\u043E\u0432\u043E\u0441\u0442\u0435\u0439 \u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0445 \u0432 \u0441\u0442\u0440\u0430\u043D\u0435.'
    __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'})
    ]

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


Old-Games.ru: community project devoted to preservation of old computer games. Favicon

Fixes needed:
  • Replace list elements with <div> tags
  • Find less brutal way of removing attribute style='display:none ' from all <div> tags rather than just nuking all styles
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, classes


class OGRU(BasicNewsRecipe):
    title = u'Old-Games.RU'
    __author__ = 'bugmen00t'
    description = u'Old-Games.RU \u2014 \u043A\u0440\u0443\u043F\u043D\u0435\u0439\u0448\u0438\u0439 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u0438\u0439 \u0430\u0440\u0445\u0438\u0432 \u0441\u0442\u0430\u0440\u044B\u0445 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u043D\u044B\u0445 \u0438\u0433\u0440. \u041C\u044B \u043D\u0435 \u0441\u0442\u0430\u0432\u0438\u043C \u043F\u0435\u0440\u0435\u0434 \u0441\u043E\u0431\u043E\u0439 \u0446\u0435\u043B\u0438 \u0441\u043E\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 \u0438\u0433\u0440\u044B, \u0447\u0442\u043E \u0435\u0441\u0442\u044C \u0432 \u043C\u0438\u0440\u0435, \u043D\u043E \u043C\u044B \u0441\u0442\u0430\u0440\u0430\u0435\u043C\u0441\u044F, \u0447\u0442\u043E\u0431\u044B \u043D\u0430 \u0441\u0430\u0439\u0442\u0435 \u0431\u044B\u043B\u043E \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E \u0431\u043E\u043B\u044C\u0448\u0438\u043D\u0441\u0442\u0432\u043E \u0448\u0435\u0434\u0435\u0432\u0440\u043E\u0432, \u0440\u0435\u0434\u043A\u043E\u0441\u0442\u0435\u0439 \u0438 \u043F\u0440\u043E\u0441\u0442\u043E \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0432 \u043F\u0440\u043E\u0448\u043B\u044B\u0445 \u043B\u0435\u0442. \u0421 \u0442\u0435\u0447\u0435\u043D\u0438\u0435\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0438 \u0437\u0432\u0443\u043A\u043E\u0432\u043E\u0435 \u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435 \u0438\u0433\u0440 \u043D\u0430\u0448\u0435\u0433\u043E \u0430\u0440\u0445\u0438\u0432\u0430 \u0437\u0430\u043C\u0435\u0442\u043D\u043E \u0443\u0441\u0442\u0430\u0440\u0435\u043B\u043E, \u043D\u043E \u0438\u0433\u0440\u043E\u0432\u043E\u0439 \u043F\u0440\u043E\u0446\u0435\u0441\u0441 \u043E\u0441\u0442\u0430\u043B\u0441\u044F \u043F\u0440\u0435\u0436\u043D\u0438\u043C, \u0438 \u043F\u043E\u0440\u043E\u0439 \u043E\u043D \u0433\u043E\u0440\u0430\u0437\u0434\u043E \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u0435\u0435, \u0447\u0435\u043C \u0432\u043E \u043C\u043D\u043E\u0433\u0438\u0445 \u0441\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445 \u00AB\u0445\u0438\u0442\u0430\u0445\u00BB.'
    publisher = 'Old-Games.RU'
    publication_type = 'blog'
    category = 'news, games, retro'
    language = 'ru'
    cover_url = 'https://www.old-games.ru/forum/styles/default/old-games/logo.og.png'
    oldest_article = 50
    max_articles_per_feed = 50
    no_stylesheets = True
    auto_cleanup = False
    
    remove_tags_before = dict(name='article')

    remove_tags_after = dict(name='article')

    remove_attributes = ['style']

    remove_tags =   [
        dict(name='p', attrs={'id': 'pageDescription'}),
        dict(name='div', attrs={'class': 'pageNavLinkGroup'}),
        dict(name='div', attrs={'class': 'tagBlock TagContainer'}),
        dict(name='div', attrs={'class': 'NoAutoHeader PollContainer'}),
        dict(name='div', attrs={'class': 'likesSummary secondaryContent'}),
        dict(name='div', attrs={'class': 'editDate'}),
        dict(name='div', attrs={'class': 'attachedFiles'}),
        dict(name='div', attrs={'class': 'item muted postNumber hashPermalink OverlayTrigger'}),
        dict(name='div', attrs={'class': 'messageUserInfo'})
        ]

    feeds = [
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://feeds.feedburner.com/Old-games-ru-news'),
        (u'\u0421\u0442\u0430\u0442\u044C\u0438', 'https://feeds.feedburner.com/Old-games-ru-articles')
        ]


Новая Газета. Европа (Russian version): European re-incarnation of Новая Газета newspaper. Favicon

Fixes needed:
  • No images in articles (webp format)
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, classes

class NovayaGazetaEurope(BasicNewsRecipe):
    title = u'\u041D\u043E\u0432\u0430\u044F \u0413\u0430\u0437\u0435\u0442\u0430. \u0415\u0432\u0440\u043E\u043F\u0430'
    __author__ = 'bugmen00t'
    description = u'\u0413\u043E\u0432\u043E\u0440\u0438\u043C \u043A\u0430\u043A \u0435\u0441\u0442\u044C. \u041F\u0438\u0448\u0435\u043C \u043E \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u044F\u0449\u0435\u043C \u0432 \u0420\u043E\u0441\u0441\u0438\u0438, \u0423\u043A\u0440\u0430\u0438\u043D\u0435 \u0438 \u0415\u0432\u0440\u043E\u043F\u0435. \u041D\u043E\u0432\u043E\u0441\u0442\u0438, \u0430\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430, \u043C\u043D\u0435\u043D\u0438\u044F \u044D\u043A\u0441\u043F\u0435\u0440\u0442\u043E\u0432, \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0440\u0435\u043F\u043E\u0440\u0442\u0430\u0436\u0438 \u0438 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0441\u043A\u0438\u0435 \u0440\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F.'
    publisher = '\u041A\u0438\u0440\u0438\u043B\u043B \u041C\u0430\u0440\u0442\u044B\u043D\u043E\u0432'
    publication_type = 'newspaper'
    category = 'news'
    language = 'ru'
    cover_url = 'https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5dc71e2d-9763-4f05-8f4e-92049fa32af7_513x513.png'
    oldest_article = 15
    max_articles_per_feed = 50
    auto_cleanup = False
    
    remove_tags_before = dict(name='h1')

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

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

    feeds = [
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://novayagazeta.eu/feed/rss/ru')
        ]
        
    def preprocess_html(self, soup):
        for alink in soup.findAll('a'):
            if alink.string is not None:
               tstr = alink.string
               alink.replaceWith(tstr)
        return soup



Вёрстка: socio-political online media researching Russian society. 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, classes

class Verstka(BasicNewsRecipe):
    title = u'\u0412\u0451\u0440\u0441\u0442\u043A\u0430'
    description = u'\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E-\u043F\u043E\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0438\u0441\u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0438 \u043E\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442, \u043A\u0430\u043A \u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0438\u0440\u0443\u0435\u0442 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u043E \u0432 \u0420\u043E\u0441\u0441\u0438\u0438.'
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 21
    max_articles_per_feed = 20
    language = 'ru'
    cover_url = 'https://secureservercdn.net/160.153.137.128/yji.7dd.myftpupload.com/wp-content/uploads/2022/04/Screenshot-2022-04-26-at-22.19.30-300x68.png'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'wp-block-spacer'})

    feeds = [
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://verstka.media/category/news/feed/'),
        (u'\u0421\u0442\u0430\u0442\u044C\u0438', 'https://verstka.media/category/article/feed/'),
        (u'\u041A\u043E\u043B\u043E\u043D\u043A\u0438', 'https://verstka.media/category/column/feed/'),
        (u'\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://verstka.media/category/interview/feed/')
    ]


Кедр: independent environmental media. Favicon.

Fixes needed:
  • No images in some articles (<figure> tag and/or webp format)
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, classes

class Cedar(BasicNewsRecipe):
    title = u'\u041A\u0435\u0434\u0440'
    description = u'\u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0435 \u043C\u0435\u0434\u0438\u0430 \u043E\u0431 \u043E\u043A\u0440\u0443\u0436\u0430\u044E\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u0435'
    __author__ = 'bugmen00t'
    publication_type = 'blog'
    oldest_article = 30
    max_articles_per_feed = 20
    language = 'ru'
    cover_url = 'https://kedr.media/wp-content/themes/kedrmedia_gutenberg/assets/img/logo-bg.svg'
    auto_cleanup = True
    no_stylesheets = False
    
    remove_tags_before = dict(name='div', attrs={'class': 'post-header'})

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

    feeds = [
        (u'\u0418\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F', 'https://kedr.media/category/research/feed'),
        (u'\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://kedr.media/category/stories/feed'),
        (u'\u041C\u043D\u0435\u043D\u0438\u044F', 'https://kedr.media/category/opinions/feed'),
        (u'\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://kedr.media/category/interview/feed'),
        (u'\u041E\u0431\u044A\u044F\u0441\u043D\u044F\u0435\u043C', 'https://kedr.media/category/explain/feed')
    ]


Deutsche Welle на русском: Russian version of Deutsche Welle. 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, classes

class DeutscheWelle(BasicNewsRecipe):
    title = u'Deutsche Welle \u043D\u0430 \u0440\u0443\u0441\u0441\u043A\u043E\u043C'
    description = u'\u0420\u0443\u0441\u0441\u043A\u0430\u044F \u0440\u0435\u0434\u0430\u043A\u0446\u0438\u044F Deutsche Welle: \u043D\u043E\u0432\u043E\u0441\u0442\u0438, \u0430\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430, \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u0438 \u0440\u0435\u043F\u043E\u0440\u0442\u0430\u0436\u0438 \u0438\u0437 \u0413\u0435\u0440\u043C\u0430\u043D\u0438\u0438 \u0438 \u0415\u0432\u0440\u043E\u043F\u044B, \u043D\u0435\u043C\u0435\u0446\u043A\u0438\u0439 \u0438 \u0435\u0432\u0440\u043E\u043F\u0435\u0439\u0441\u043A\u0438\u0439 \u0432\u0437\u0433\u043B\u044F\u0434 \u043D\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0432 \u0420\u043E\u0441\u0441\u0438\u0438 \u0438 \u043C\u0438\u0440\u0435,  \u043F\u0440\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0441\u043E\u0432\u0435\u0442\u044B \u0434\u043B\u044F \u0442\u0443\u0440\u0438\u0441\u0442\u043E\u0432 \u0438 \u0442\u0435\u0445, \u043A\u0442\u043E \u0436\u0435\u043B\u0430\u0435\u0442 \u0443\u0447\u0438\u0442\u044C\u0441\u044F \u0438\u043B\u0438 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0432 \u0413\u0435\u0440\u043C\u0430\u043D\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0440\u0430\u043D\u0430\u0445 \u0415\u0432\u0440\u043E\u0441\u043E\u044E\u0437\u0430.'
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 14
    max_articles_per_feed = 100
    language = 'ru_DE'
    cover_url = 'https://www.dw.com/cssi/dwlogo-print.gif'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

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

    feeds = [
        (u'\u0412\u0435\u0441\u044C \u0441\u0430\u0439\u0442', 'https://rss.dw.com/xml/rss-ru-all'),
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'http://rss.dw.de/xml/rss-ru-news'),
        (u'\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0438 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u043E', 'http://rss.dw.de/xml/rss-ru-pol'),
        (u'\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430', 'http://rss.dw.de/xml/rss-ru-eco'),
        (u'\u0410\u0432\u0442\u043E\u043C\u043E\u0431\u0438\u043B\u044C', 'http://rss.dw.de/xml/rss-ru-auto'),
        (u'\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430 \u0438 \u0441\u0442\u0438\u043B\u044C \u0436\u0438\u0437\u043D\u0438', 'http://rss.dw.de/xml/rss-ru-cul'),
        (u'\u0420\u043E\u0441\u0441\u0438\u044F', 'http://rss.dw.de/xml/rss-ru-rus'),
        (u'\u0413\u0435\u0440\u043C\u0430\u043D\u0438\u044F', 'http://rss.dw.de/xml/rss-ru-ger'),
        (u'\u0415\u0432\u0440\u043E\u043F\u0430', 'http://rss.dw.de/xml/rss-ru-eu'),
        (u'\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C', 'http://rss.dw.de/xml/rss-ru-bel'),
        (u'\u0423\u0447\u0435\u0431\u0430 \u0438 \u043A\u0430\u0440\u044C\u0435\u0440\u0430', 'http://rss.dw.de/xml/rss-ru-campus-karriere'),
        (u'\u0423\u0447\u0435\u0431\u0430 ', 'http://rss.dw.de/xml/rss-ru-campus'),
        (u'\u041A\u0430\u0440\u044C\u0435\u0440\u0430 ', 'http://rss.dw.de/xml/rss-ru-karriere'),
        (u'\u0422\u0443\u0440\u0438\u0441\u0442\u0443 \u043D\u0430 \u0437\u0430\u043C\u0435\u0442\u043A\u0443', 'http://rss.dw.de/xml/rss-ru-discover-ger')
    ]


Русская служба BBC: BBC News in Russian. Favicon.

Fixes needed:
  • No images in some articles (lazyload)
  • No images in some articles (webp format)
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, classes

class BBC(BasicNewsRecipe):
    title = u'BBC Russian'
    description = u'\u0420\u0443\u0441\u0441\u043A\u0430\u044F \u0441\u043B\u0443\u0436\u0431\u0430 BBC'
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 14
    max_articles_per_feed = 50
    language = 'ru_GB'
    cover_url = 'https://news.files.bbci.co.uk/ws/img/logos/og/russian.png'
    auto_cleanup = False
    no_stylesheets = True
    
    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='main', attrs={'aria-hidden': 'true'})

    remove_tags =   [
        dict(name='section', attrs={'role': 'region'}),
        dict(name='footer'),
        dict(name='aside')
        ]

    feeds = [
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438 BBC', 'https://feeds.bbci.co.uk/russian/rss.xml')
    ]

Last edited by bugmen00t; 07-21-2022 at 04:18 PM.
bugmen00t is offline   Reply With Quote
Old 07-22-2022, 02:19 PM   #9
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 02 of ??)

NEW ENGLISH RECIPES (OF RUSSIAN SOURCES)

Novaya Gazeta Europe (English version): European re-incarnation of Novaya Gazeta newspaper. Favicon.

Fixes needed:
  • No images in articles (webp format)
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, classes

class NovayaGazetaEurope(BasicNewsRecipe):
    title = u'Novaya Gazeta Europe'
    __author__ = 'bugmen00t'
    description = u'English edition of Novaya Gazeta Europe: news, analytics, expert opinions, special reports and investigative journalism.'
    publisher = 'Kirill Martynov'
    category = 'news'
    language = 'en_RU'
    cover_url = 'https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5dc71e2d-9763-4f05-8f4e-92049fa32af7_513x513.png'
    oldest_article = 15
    max_articles_per_feed = 50
    auto_cleanup = False
    
    remove_tags_before = dict(name='h1')

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

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

    feeds = [
        (u'News', 'https://novayagazeta.eu/feed/rss/en')
        ]
        
    def preprocess_html(self, soup):
        for alink in soup.findAll('a'):
            if alink.string is not None:
               tstr = alink.string
               alink.replaceWith(tstr)
        return soup


Meduza (English version): Latvia-based media founded by a group of former employees of the then independent Lenta.ru news website. 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, classes

class Meduza(BasicNewsRecipe):
    title = u'Meduza'
    description = u'Russian- and English-language independent news website, based in Latvia. It was founded in 2014 by a group of former employees of the then independent Lenta.ru news website. Every day we bring you the most important news and feature stories from hundreds of sources in Russia and across the former Soviet Union.'
    __author__ = 'bugmen00t'
    publisher = 'Medusa Project SIA'
    publication_type = 'blog'
    oldest_article = 21
    max_articles_per_feed = 100
    language = 'en_RU'
    cover_url = 'https://meduza.io/impro/E_cJMv0IQxOC45z-YXeGuzuPB2kQ_A1XsZYrdByOCnk/fill/1200/0/ce/0/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi83/MTgvODcyL29yaWdp/bmFsLzVPSmRDdWc1/bC1JVG9lTXBqSHFH/ZXcucG5n.png'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

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

    remove_tags =   [
        dict(name='div', attrs={'id': 'div-gpt-ad'}),
        ]

    feeds = [
        (u'News', 'https://meduza.io/rss2/en/news'),
        (u'Feature stories', 'https://meduza.io/rss2/en/stories'),
    ]


Holod (English version): Taisiya Bekbulatova's project with longreads, podcasts and videos on social and political topics about Russia. No updates since June 2022. Favicon replacement.
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, classes

class Kholod(BasicNewsRecipe):
    title = u'Holod Media'
    description = u'Internet media whose authors search for exciting stories all over Russia and then tell them to readers.'
    __author__ = 'bugmen00t'
    publisher = 'Taisiya Bekbulatova'
    publication_type = 'blog'
    oldest_article = 60
    max_articles_per_feed = 100
    language = 'en_RU'
    cover_url = 'https://image.simplecastcdn.com/images/93a97011-6988-4787-8242-e202b2840fde/08e85f64-9901-44e1-b20c-7da01c5ce0c0/holodpodcastlogo.jpg'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'article__content the-content text-column'})

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

    feeds = [
        (u'Spotlight', 'https://holod.media/en/sections/spotlight/feed/'),
        (u'Opinion', 'https://holod.media/en/sections/opinion/feed/'),
        (u'Interview', 'https://holod.media/en/sections/interview/feed/')
    ]


NEW RUSSIAN RECIPES

Медуза: Latvia-based media founded by a group of former employees of the then independent Lenta.ru news website. 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, classes

class Meduza(BasicNewsRecipe):
    title = u'Meduza'
    description = u'\u041C\u0435\u0436\u0434\u0443\u043D\u0430\u0440\u043E\u0434\u043D\u043E\u0435 \u0440\u0443\u0441\u0441\u043A\u043E\u044F\u0437\u044B\u0447\u043D\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435. \u041C\u044B \u0432\u044B\u0431\u0438\u0440\u0430\u0435\u043C \u0434\u043B\u044F \u0432\u0430\u0441 \u0441\u0430\u043C\u044B\u0435 \u0432\u0430\u0436\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u0438 \u0433\u043E\u0442\u043E\u0432\u0438\u043C \u043B\u0443\u0447\u0448\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u044B \u043E \u0442\u043E\u043C, \u0447\u0442\u043E \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u0432 \u0420\u043E\u0441\u0441\u0438\u0438 \u0438 \u043C\u0438\u0440\u0435.'
    __author__ = 'bugmen00t'
    publisher = 'Medusa Project SIA'
    publication_type = 'blog'
    oldest_article = 7
    max_articles_per_feed = 100
    language = 'ru'
    cover_url = 'https://meduza.io/impro/E_cJMv0IQxOC45z-YXeGuzuPB2kQ_A1XsZYrdByOCnk/fill/1200/0/ce/0/aHR0cHM6Ly9tZWR1/emEuaW8vaW1hZ2Uv/YXR0YWNobWVudHMv/aW1hZ2VzLzAwNi83/MTgvODcyL29yaWdp/bmFsLzVPSmRDdWc1/bC1JVG9lTXBqSHFH/ZXcucG5n.png'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

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

    remove_tags =   [
        dict(name='div', attrs={'id': 'div-gpt-ad'})
        ]

    feeds = [
        (u'\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://meduza.io/rss2/news'),
        (u'\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://meduza.io/rss2/articles'),
    ]


Собеседник: Russian weekly socio-political newspaper. 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, classes

class Sobesednik(BasicNewsRecipe):
    title = u'\u0421\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A'
    description = u'\u0421\u0432\u0435\u0436\u0438\u0435 \u044D\u043A\u0441\u043A\u043B\u044E\u0437\u0438\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u043E \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0435 \u0438 \u0448\u043E\u0443 \u0431\u0438\u0437\u043D\u0435\u0441\u0435'
    __author__ = 'bugmen00t'
    publisher = '\u041E\u041E\u041E \u00AB\u0421\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A-\u041C\u0435\u0434\u0438\u0430\u00BB'
    publication_type = 'newspaper'
    oldest_article = 7
    max_articles_per_feed = 100
    language = 'ru'
    cover_url = 'https://sobesednik.ru/images/logo1.png'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

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

    feeds = [
        (u'\u0413\u0430\u0437\u0435\u0442\u0430 "\u0421\u043E\u0431\u0435\u0441\u0435\u0434\u043D\u0438\u043A"', 'https://sobesednik.com/rss.xml')
    ]


Холод: Taisiya Bekbulatova's project with longreads, podcasts and videos on social and political topics. Favicon replacement.
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, classes

class Kholod(BasicNewsRecipe):
    title = u'\u0425\u043E\u043B\u043E\u0434'
    description = u'\u0418\u0441\u0442\u043E\u0440\u0438\u0438 \u043E \u0420\u043E\u0441\u0441\u0438\u0438: \u043C\u044B \u0438\u0449\u0435\u043C \u0437\u0430\u0445\u0432\u0430\u0442\u044B\u0432\u0430\u044E\u0449\u0438\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 \u043F\u043E \u0432\u0441\u0435\u0439 \u0420\u043E\u0441\u0441\u0438\u0438, \u0430 \u043F\u043E\u0442\u043E\u043C \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u043C \u0432\u0430\u043C.'
    __author__ = 'bugmen00t'
    publisher = '\u0422\u0430\u0438\u0441\u0438\u044F \u0411\u0435\u043A\u0431\u0443\u043B\u0430\u0442\u043E\u0432\u0430'
    publication_type = 'blog'
    oldest_article = 14
    max_articles_per_feed = 200
    language = 'ru'
    cover_url = 'https://image.simplecastcdn.com/images/93a97011-6988-4787-8242-e202b2840fde/08e85f64-9901-44e1-b20c-7da01c5ce0c0/holodpodcastlogo.jpg'
    auto_cleanup = False
    no_stylesheets = False
    
    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='div', attrs={'class': 'article__content the-content text-column'})

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

    feeds = [
        (u'\u0410\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u043E', 'https://holod.media/sections/daily/feed/'),
        (u'\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://holod.media/sections/stories/feed/'),
        (u'\u041C\u043D\u0435\u043D\u0438\u044F', 'https://holod.media/sections/opinions/feed/'),
        (u'\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://holod.media/sections/interviews/feed/'),
        (u'\u041E\u0431\u044A\u044F\u0441\u043D\u044F\u0435\u043C', 'https://holod.media/sections/explainers/feed/')
    ]


Важные истории: Russian website specialising in investigative journalism. Favicon replacement #1, Favicon replacement #2.

Fixes needed:
  • No article header image
  • No images in some articles (webp format)
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, classes

class IStories(BasicNewsRecipe):
    title = u'\u0412\u0430\u0436\u043D\u044B\u0435 \u0438\u0441\u0442\u043E\u0440\u0438\u0438'
    description = u'\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u044E\u0449\u0435\u0435\u0441\u044F \u043D\u0430 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0441\u043A\u0438\u0445 \u0440\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044F\u0445. \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u043E \u0432 2020 \u0433\u043E\u0434\u0443 \u0440\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u0438\u043C\u0438 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0430\u043C\u0438 \u0420\u043E\u043C\u0430\u043D\u043E\u043C \u0410\u043D\u0438\u043D\u044B\u043C \u0438 \u041E\u043B\u0435\u0441\u0435\u0439 \u0428\u043C\u0430\u0433\u0443\u043D.'
    __author__ = 'bugmen00t'
    publisher = 'Roman Anin & Olesya Shmagun'
    publication_type = 'blog'
    oldest_article = 21
    max_articles_per_feed = 50
    language = 'ru'
    cover_url = 'https://static.istories.media/public/cover.png'
    auto_cleanup = False
    no_stylesheets = True
    
    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='article')

    remove_tags =   [
        dict(name='header'),
        dict(name='footer'),
        dict(name='form', attrs={'class': 'subscr'}),
        dict(name='div', attrs={'class': 'row'}),
        dict(name='div', attrs={'class': 'arrow-black'}),
        dict(name='div', attrs={'class': 'article-foot'}),
        dict(name='div', attrs={'class': 'article-toggle'}),
        dict(name='div', attrs={'class': 'article-soc'})
        ]

    feeds = [
        (u'\u0438\u0441\u0442\u043E\u0440\u0438\u0438', 'https://istories.media/rss/all.xml')
    ]


N+1: science & technology news. Favicon.
Spoiler:
Code:
#!/usr/bin/env python
# vim:fileencoding=utf-8

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

class AdvancedUserRecipe1467724863(BasicNewsRecipe):
    title          		  = 'N+1'
    __author__            = 'bugmen00t'
    description           = '\u041D\u0430\u0443\u0447\u043D\u043E-\u043F\u043E\u043F\u0443\u043B\u044F\u0440\u043D\u043E\u0435 \u0440\u0430\u0437\u0432\u043B\u0435\u043A\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u043E \u0442\u043E\u043C, \u0447\u0442\u043E \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u0432 \u043D\u0430\u0443\u043A\u0435, \u0442\u0435\u0445\u043D\u0438\u043A\u0435 \u0438 \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F\u0445 \u043F\u0440\u044F\u043C\u043E \u0441\u0435\u0439\u0447\u0430\u0441. \u041D\u043E\u0432\u043E\u0441\u0442\u0438, \u0431\u043E\u043B\u044C\u0448\u0438\u0435 \u0441\u0442\u0430\u0442\u044C\u0438, \u0431\u043B\u043E\u0433\u0438 \u2014 \u044D\u0442\u043E \u0432\u0441\u0435 \u043F\u0440\u043E \u043D\u0430\u0441. \u041C\u044B \u0438\u0449\u0435\u043C \u0441\u0430\u043C\u043E\u0435 \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u043E\u0435 \u0438 \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C \u044D\u0442\u043E \u0447\u0438\u0442\u0430\u0442\u0435\u043B\u044F\u043C \u0432 \u043F\u043E\u043D\u044F\u0442\u043D\u043E\u0439, \u044F\u0441\u043D\u043E\u0439, \u043F\u0440\u0438\u0432\u043B\u0435\u043A\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0439 (\u0438 \u0441 \u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0438 \u0437\u0440\u0435\u043D\u0438\u044F) \u0444\u043E\u0440\u043C\u0435. \u041C\u044B \u2014 \u0447\u0443\u0442\u044C \u0431\u043E\u043B\u044C\u0448\u0435, \u0447\u0435\u043C \u043F\u0440\u043E\u0441\u0442\u043E \u043D\u0430\u0443\u043A\u0430!'
    publisher             = 'N+1'
    category              = 'news'
    cover_url = u'https://nplus1.ru/i/logo.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = True
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 100

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

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

    feeds = [
        ('\u041d\u043e\u0432\u043e\u0441\u0442\u0438 \u043d\u0430\u0443\u043a\u0438', 'https://nplus1.ru/rss'),
    ]


NEW UKRAINIAN RECIPES

BBC News Україна: BBC News in Ukrainian. Favicon.

Fixes needed:
  • No images in some articles (lazyload)
  • No images in some articles (webp format)
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, classes

class BBC(BasicNewsRecipe):
    title = u'BBC Ukrainian'
    description = u'BBC News \u0423\u043A\u0440\u0430\u0457\u043D\u0430'
    __author__ = 'bugmen00t'
    publication_type = 'newspaper'
    oldest_article = 14
    max_articles_per_feed = 50
    language = 'uk'
    cover_url = 'https://news.files.bbci.co.uk/ws/img/logos/og/ukrainian.png'
    auto_cleanup = True
    no_stylesheets = True
    
    remove_tags_before = dict(name='h1')

    remove_tags_after = dict(name='main', attrs={'aria-hidden': 'true'})

    remove_tags =   [
        dict(name='section', attrs={'role': 'region'}),
        dict(name='footer'),
        dict(name='aside')
        ]

    feeds = [
        (u'\u041D\u043E\u0432\u0438\u043D\u0438 BBC', 'https://feeds.bbci.co.uk/ukrainian/rss.xml')
    ]

Last edited by bugmen00t; 07-23-2022 at 02:58 AM. Reason: Small fix for Meduza (ru) recipe
bugmen00t is offline   Reply With Quote
Old 07-23-2022, 03:22 AM   #10
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
Thanks updated
Could you please fix titles for media_zone.recipe, trv.recipe and (not yet added) Meduza recipe from yesterday by removing three exclamation marks? I've been using them during recipe testing for sorting purposes and forgot to remove them.
bugmen00t is offline   Reply With Quote
Old 07-23-2022, 08:38 PM   #11
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
done.
kovidgoyal is offline   Reply With Quote
Old 07-24-2022, 10:29 AM   #12
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 03 of ??)

NEW ENGLISH RECIPES (OF RUSSIAN SOURCES)

Habr (English version): collaborative blog about IT, computer science and Internet. 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 Habr(BasicNewsRecipe):
    title          		  = 'Habr'
    __author__            = 'bugmen00t'
    description           = 'Russian collaborative blog about IT, computer science and anything related to the Internet'
    publisher             = 'Habr Blockchain Publishing LTD'
    category              = 'blog'
    cover_url = u'https://hsto.org/webt/f1/lq/ka/f1lqkaveikdfqkb_rip_4vq4s_8.png'
    language              = 'en_RU'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 30

    remove_tags_before = dict(name='h1')
    
    remove_tags_after = dict(name='div', attrs={'class':'tm-misprint-area'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'tm-article-presenter__meta'}),
        dict(name='div', attrs={'class': 'tm-article-poll'})
        ] 

    feeds = [
        ('News', 'https://habr.com/en/rss/news/?fl=en'),
        ('All materials', 'https://habr.com/en/rss/all?fl=en')
    ]

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



NEW ENGLISH RECIPES (OF UKRAINIAN SOURCES)

Interfax Ukraine (English version): Interfax-Ukraine News Agency. Favicon replacement.
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 InterfaxUAEN(BasicNewsRecipe):
    title          		  = 'Interfax-Ukraine'
    __author__            = 'bugmen00t'
    description           = 'The Interfax-Ukraine News Agency, founded in 1992, is subsidiary of Interfax Information Services.'
    publisher             = 'Interfax-Ukraine News Agency'
    category              = 'newspaper'
    cover_url = u'https://interfax.com.ua/static/articles/images/interfax_ukraine_logo_eng.svg'
    language              = 'en_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 3
    max_articles_per_feed = 30

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

    remove_tags =   [
        dict(name='div', attrs={'class': 'grid article-content-secondary-header'}),
        dict(name='div', attrs={'class': 'article-tags'}),
        ] 

    feeds = [
        ('Latest news', 'https://en.interfax.com.ua/news/last.rss')
    ]


Ukrainska Pravda (English version): Ukraninan online newspaper with an emphasis on the politics. Favicon.
Fixes needed:
  • Unable to render cyrillic text fragments correctly
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 PravdaUAEN(BasicNewsRecipe):
    title          		  = 'Ukrainska Pravda'
    __author__            = 'bugmen00t'
    description           = ' Ukrainian online newspaper founded by Georgiy Gongadze with an emphasis on the politics of Ukraine. '
    publisher             = 'pravda.com.ua'
    category              = 'newspaper'
    cover_url = u'https://img.pravda.com/images/up_for_fb.gif'
    language              = 'en_UK'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 30

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

    remove_tags =   [
        dict(name='footer'),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='div', attrs={'class': 'post-report'}),
        dict(name='div', attrs={'class': 'post__report'}),
        dict(name='div', attrs={'class': 'social_item'}),
        dict(name='div', attrs={'class': 'sidebar'}),
        dict(name='div', attrs={'class': 'article-announcement-photo article-announcement-photo-block-1'}),
        dict(name='div', attrs={'class': 'statistic-bottom-block statistic-top-block'}),
        dict(name='div', attrs={'class': 'modal modal_search modal_white'}),
        dict(name='div', attrs={'class': 'modal_auth modal_white'}),
        dict(name='div', attrs={'class': 'main_logo'}),
        dict(name='div', attrs={'class': 'footer_banner'}),
        dict(name='nav', attrs={'class': 'block block_menu'}),
        dict(name='div', attrs={'class': 'pagewrap page-point'}),
        dict(name='div', attrs={'class': 'modal fade search-popup'}),
        dict(name='div', attrs={'data-vr-zone': 'Mobile main menu'}),
        dict(name='aside'),
        dict(name='div', attrs={'class': 'block_related'}),
        dict(name='div', attrs={'class': 'block_comments'}),
        dict(name='div', attrs={'class': 'post_tags'}),
        dict(name='div', attrs={'class': 'post__tags'})
        ] 

    feeds = [
        ('All materials', 'https://www.pravda.com.ua/eng/rss/'),
        ('Top news', 'https://www.pravda.com.ua/eng/rss/view_mainnews/'),
        ('News', 'https://www.pravda.com.ua/eng/rss/view_news/'),
        ('Articles', 'https://www.pravda.com.ua/eng/rss/view_pubs/')
    ]




NEW RUSSIAN RECIPES

Хабр: collaborative blog about IT, computer science and Internet. 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 Habr(BasicNewsRecipe):
    title          		  = '\u0425\u0430\u0431\u0440'
    __author__            = 'bugmen00t'
    description           = '\u041D\u0430 \u200B\u0425\u0430\u0431\u0440\u0435 \u200B\u0434\u0443\u043C\u0430\u044E\u0449\u0438\u0435 \u200B\u043B\u044E\u0434\u0438 \u200B\u0434\u0435\u043B\u044F\u0442\u0441\u044F \u200B\u0443\u043D\u0438\u043A\u0430\u043B\u044C\u043D\u044B\u043C \u200B\u200B\u043E\u043F\u044B\u0442\u043E\u043C. \u200B\u200B\u0417\u0434\u0435\u0441\u044C \u0431\u0443\u0434\u0435\u0442 \u200B\u200B\u043E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u043E \u200B\u0438\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u043E \u200B\u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0438\u0441\u0442\u0430\u043C \u200B\u0438 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0430\u043C, \u200B\u200B\u0430\u0434\u043C\u0438\u043D\u0430\u043C \u200B\u0438 \u0440\u0435\u043A\u043B\u0430\u043C\u0449\u0438\u043A\u0430\u043C, \u200B\u0430\u043D\u0430\u043B\u0438\u0442\u0438\u043A\u0430\u043C \u200B\u0438 \u0434\u0438\u0437\u0430\u0439\u043D\u0435\u0440\u0430\u043C, \u200B\u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440\u0430\u043C \u200B\u0432\u044B\u0441\u0448\u0435\u0433\u043E \u200B\u0438 \u0441\u0440\u0435\u0434\u043D\u0435\u0433\u043E \u200B\u0437\u0432\u0435\u043D\u0430, \u200B\u0432\u043B\u0430\u0434\u0435\u043B\u044C\u0446\u0430\u043C \u200B\u043A\u0440\u0443\u043F\u043D\u044B\u0445 \u200B\u043A\u043E\u043C\u043F\u0430\u043D\u0438\u0439 \u200B\u0438 \u043D\u0435\u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u200B\u0444\u0438\u0440\u043C, \u200B\u0430 \u0442\u0430\u043A\u0436\u0435 \u200B\u0432\u0441\u0435\u043C \u200B\u0442\u0435\u043C, \u200B\u0434\u043B\u044F \u043A\u043E\u0433\u043E \u200BIT \u2014 \u200B\u044D\u0442\u043E \u043D\u0435 \u043F\u0440\u043E\u0441\u0442\u043E \u200B\u0434\u0432\u0435 \u0431\u0443\u043A\u0432\u044B \u200B\u0430\u043B\u0444\u0430\u0432\u0438\u0442\u0430.'
    publisher             = 'Habr Blockchain Publishing LTD'
    category              = 'blog'
    cover_url = u'https://habr.com/img/habr_ru.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='h1')
    
    remove_tags_after = dict(name='div', attrs={'class':'tm-misprint-area'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'tm-article-presenter__meta'}),
        dict(name='div', attrs={'class': 'tm-article-poll'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://habr.com/ru/rss/news/?fl=ru'),
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://habr.com/ru/rss/all/all/?fl=ru'),
        ('\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u226510', 'https://habr.com/ru/rss/all/top10/?fl=ru'),
        ('\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u226525', 'https://habr.com/ru/rss/all/top25/?fl=ru'),
        ('\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u226550', 'https://habr.com/ru/rss/all/top50/?fl=ru'),
        ('\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u2265100', 'https://habr.com/ru/rss/all/top100/?fl=ru'),
    ]

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


Нож: online magazine about society, psychology, science and culture. 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 KnifeMedia(BasicNewsRecipe):
    title          		  = '\u041D\u043E\u0436'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0442\u0435\u043B\u043B\u0435\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0439 \u0436\u0443\u0440\u043D\u0430\u043B \u043E \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u0435 \u0438 \u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435'
    publisher             = '\u041C\u0438\u0445\u0430\u0438\u043B \u0426\u044B\u0433\u0430\u043D, \u0422\u0430\u0442\u044C\u044F\u043D\u0430 \u041A\u043E\u044D\u043D'
    category              = 'blog'
    cover_url = u'https://knife.media/feature/pdd/img/knife_logo.33a98aee.svg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 30

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

    remove_tags =   [
        dict(name='aside'),
        dict(name='div', attrs={'class': 'entry-header__share share'}),
        dict(name='div', attrs={'class': 'entry-comments'}),
        dict(name='div', attrs={'class': 'entry-footer'}),
        dict(name='div', attrs={'class': 'entry-bottom'}),
        dict(name='figure', attrs={'class': 'figure figure--similar'})
        ] 

    feeds = [
        ('\u041B\u043E\u043D\u0433\u0440\u0438\u0434\u044B', 'https://knife.media/category/longreads/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://knife.media/category/news/feed/')
    ]


Интерфакс Украина: Interfax-Ukraine News Agency. Favicon replacement.
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 InterfaxUARU(BasicNewsRecipe):
    title          		  = '\u0418\u043D\u0442\u0435\u0440\u0444\u0430\u043A\u0441-\u0423\u043A\u0440\u0430\u0438\u043D\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0445 \u0432 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0435 \u0423\u043A\u0440\u0430\u0438\u043D\u044B, \u043A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0443\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0438\u0435 \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u0438 \u043E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0432 \u0441\u0442\u0440\u0430\u043D\u0430\u0445 \u0421\u041D\u0413 \u0438 \u043C\u0438\u0440\u0430.'
    publisher             = '\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u00AB\u0418\u043D\u0442\u0435\u0440\u0444\u0430\u043A\u0441-\u0423\u043A\u0440\u0430\u0438\u043D\u0430\u00BB'
    category              = 'newspaper'
    cover_url = u'https://interfax.com.ua/static/articles/images/interfax_ukraine_logo_rus.svg'
    language              = 'ru_UK'
    no_stylesheets        = True
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 2
    max_articles_per_feed = 30

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

    remove_tags =   [
        dict(name='div', attrs={'class': 'grid article-content-secondary-header'}),
        dict(name='div', attrs={'class': 'article-tags'}),
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://ru.interfax.com.ua/news/last.rss')
    ]


Украинская правда: Ukraninan online newspaper with an emphasis on the politics. 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 PravdaUARU(BasicNewsRecipe):
    title          		  = '\u0423\u043A\u0440\u0430\u0438\u043D\u0441\u043A\u0430\u044F \u043F\u0440\u0430\u0432\u0434\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u043E\u0441\u043D\u043E\u0432\u043D\u0430\u044F \u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430 \u2014 \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430, \u0441\u043E\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B, \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430. '
    publisher             = 'pravda.com.ua'
    category              = 'newspaper'
    cover_url = u'https://img.pravda.com/images/up_for_fb.gif'
    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='article', attrs={'class':'post'})

    remove_tags =   [
        dict(name='footer'),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='div', attrs={'class': 'post-report'}),
        dict(name='div', attrs={'class': 'post__report'}),
        dict(name='div', attrs={'class': 'social_item'}),
        dict(name='div', attrs={'class': 'sidebar'}),
        dict(name='div', attrs={'class': 'article-announcement-photo article-announcement-photo-block-1'}),
        dict(name='div', attrs={'class': 'statistic-bottom-block statistic-top-block'}),
        dict(name='div', attrs={'class': 'modal modal_search modal_white'}),
        dict(name='div', attrs={'class': 'modal_auth modal_white'}),
        dict(name='div', attrs={'class': 'main_logo'}),
        dict(name='div', attrs={'class': 'footer_banner'}),
        dict(name='nav', attrs={'class': 'block block_menu'}),
        dict(name='div', attrs={'class': 'pagewrap page-point'}),
        dict(name='div', attrs={'class': 'modal fade search-popup'}),
        dict(name='div', attrs={'data-vr-zone': 'Mobile main menu'}),
        dict(name='aside'),
        dict(name='div', attrs={'class': 'block_related'}),
        dict(name='div', attrs={'class': 'block_comments'}),
        dict(name='div', attrs={'class': 'post_tags'}),
        dict(name='div', attrs={'class': 'post__tags'})
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://www.pravda.com.ua/rus/rss/'),
        ('\u0413\u043B\u0430\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.pravda.com.ua/rus/rss/view_mainnews/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.pravda.com.ua/rus/rss/view_news/'),
        ('\u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438', 'https://www.pravda.com.ua/rus/rss/view_pubs/'),
    ]


NEW UKRAINIAN RECIPES

Interfax Україна: Interfax-Ukraine News Agency. Favicon replacement.
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 InterfaxUAUA(BasicNewsRecipe):
    title          		  = '\u0406\u043D\u0442\u0435\u0440\u0444\u0430\u043A\u0441-\u0423\u043A\u0440\u0430\u0457\u043D\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F \u043F\u0440\u043E \u043E\u0441\u0442\u0430\u043D\u043D\u0456 \u043F\u043E\u0434\u0456\u0457 \u0432 \u043F\u043E\u043B\u0456\u0442\u0438\u0446\u0456 \u0423\u043A\u0440\u0430\u0457\u043D\u0438, \u043A\u043B\u044E\u0447\u043E\u0432\u0456 \u0443\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0456 \u0435\u043A\u043E\u043D\u043E\u043C\u0456\u0447\u043D\u0456 \u043D\u043E\u0432\u0438\u043D\u0438 \u0442\u0430 \u043E\u0441\u043D\u043E\u0432\u043D\u0456 \u043F\u043E\u0434\u0456\u0457 \u0432 \u043A\u0440\u0430\u0457\u043D\u0430\u0445 \u0421\u041D\u0414 \u0456 \u0441\u0432\u0456\u0442\u0443.'
    publisher             = '\u0406\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u0439\u043D\u0435 \u0430\u0433\u0435\u043D\u0442\u0441\u0442\u0432\u043E \u00AB\u0406\u043D\u0442\u0435\u0440\u0444\u0430\u043A\u0441-\u0423\u043A\u0440\u0430\u0457\u043D\u0430\u00BB'
    category              = 'newspaper'
    cover_url = u'https://interfax.com.ua/static/articles/images/interfax_ukraine_logo_ukr.svg'
    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', attrs={'class':'article article-content-view'})
    
    remove_tags_after = dict(name='article', attrs={'class':'article article-content-view'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'grid article-content-secondary-header'}),
        dict(name='div', attrs={'class': 'article-tags'}),
        ] 

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


Українська правда: Ukraninan online newspaper with an emphasis on the politics. Favicon.
Fixes needed:
  • Text/codepage encoding error in some 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 PravdaUAUA(BasicNewsRecipe):
    title          		  = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430 \u043F\u0440\u0430\u0432\u0434\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0435 \u0441\u0443\u0441\u043F\u0456\u043B\u044C\u043D\u043E-\u043F\u043E\u043B\u0456\u0442\u0438\u0447\u043D\u0435 \u0456\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0417\u041C\u0406'
    publisher             = 'pravda.com.ua'
    category              = 'newspaper'
    cover_url = u'https://img.pravda.com/images/up_for_fb.gif'
    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='article', attrs={'class':'post'})

    remove_tags =   [
        dict(name='footer'),
        dict(name='div', attrs={'class': 'nts-video-wrapper'}),
        dict(name='div', attrs={'class': 'post-report'}),
        dict(name='div', attrs={'class': 'post__report'}),
        dict(name='div', attrs={'class': 'social_item'}),
        dict(name='div', attrs={'class': 'sidebar'}),
        dict(name='div', attrs={'class': 'article-announcement-photo article-announcement-photo-block-1'}),
        dict(name='div', attrs={'class': 'statistic-bottom-block statistic-top-block'}),
        dict(name='div', attrs={'class': 'modal modal_search modal_white'}),
        dict(name='div', attrs={'class': 'modal_auth modal_white'}),
        dict(name='div', attrs={'class': 'main_logo'}),
        dict(name='div', attrs={'class': 'footer_banner'}),
        dict(name='nav', attrs={'class': 'block block_menu'}),
        dict(name='div', attrs={'class': 'pagewrap page-point'}),
        dict(name='div', attrs={'class': 'modal fade search-popup'}),
        dict(name='div', attrs={'data-vr-zone': 'Mobile main menu'}),
        dict(name='aside'),
        dict(name='div', attrs={'class': 'block_related'}),
        dict(name='div', attrs={'class': 'block_comments'}),
        dict(name='div', attrs={'class': 'post_tags'}),
        dict(name='div', attrs={'class': 'post__tags'})
        ] 

    feeds = [
        ('\u0412\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://www.pravda.com.ua/rss/'),
        ('\u041D\u0430\u0439\u0432\u0430\u0436\u043B\u0438\u0432\u0456\u0448\u0456 \u043D\u043E\u0432\u0438\u043D\u0438', 'https://www.pravda.com.ua/rss/view_mainnews/'),
        ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://www.pravda.com.ua/rss/view_news/'),
        ('\u041F\u0443\u0431\u043B\u0456\u043A\u0430\u0446\u0456\u0457', 'https://www.pravda.com.ua/rss/view_pubs/'),
    ]
bugmen00t is offline   Reply With Quote
Old 07-26-2022, 09:28 AM   #13
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 04 of ??)

NEW RUSSIAN RECIPES

Черта: media about prevention of discrimantion, social inequality & violence. 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 Cherta(BasicNewsRecipe):
    title          		  = '\u0427\u0435\u0440\u0442\u0430'
    __author__            = 'bugmen00t'
    description           = ' \u0418\u043D\u0442\u0435\u0440\u0435\u0441\u043D\u044B\u0435, \u0432\u0430\u0436\u043D\u044B\u0435 \u0438 \u0433\u043B\u0443\u0431\u043E\u043A\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u044B \u043F\u0440\u043E \u043D\u0430\u0441\u0438\u043B\u0438\u0435 \u0438 \u043D\u0435\u0440\u0430\u0432\u0435\u043D\u0441\u0442\u0432\u043E \u0432 \u0420\u043E\u0441\u0441\u0438\u0438.'
    publisher             = 'cherta.media'
    category              = 'blog'
    cover_url = u'https://cherta.media/wp-content/uploads/2022/01/cherta_snippet2.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 30

    remove_tags_before = dict(name='div', attrs={'class':'single-story'})
    
    remove_tags_after = dict(name='div', attrs={'class':'single-page__footer-info'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'single-content-link'}),
        dict(name='div', attrs={'class': 'single-page__footer-info_links clearfix'}),
        dict(name='div', attrs={'class': 'single-article-tags-wrapper'})
        ] 

    feeds = [
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://cherta.media/story/feed/'),
        ('\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://cherta.media/interview/feed/')
    ]


Горький: collective blog with book reviews, essays, author interviews etc. Favicon.
Fixes needed:
  • No header images in some 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 Gorky(BasicNewsRecipe):
    title          		  = '\u0413\u043E\u0440\u044C\u043A\u0438\u0439'
    __author__            = 'bugmen00t'
    description           = '\u041D\u0435\u043A\u043E\u043C\u043C\u0435\u0440\u0447\u0435\u0441\u043A\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u043E \u043A\u043D\u0438\u0433\u0430\u0445 \u0438 \u0447\u0442\u0435\u043D\u0438\u0438.'
    publisher             = '\u0410\u041D\u041E "\u0426\u0435\u043D\u0442\u0440 \u043F\u043E \u0441\u043E\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044E \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044F \u043A\u0443\u043B\u044C\u0442\u0443\u0440\u044B \u0447\u0442\u0435\u043D\u0438\u044F \u0438 \u043A\u043D\u0438\u0433\u043E\u0438\u0437\u0434\u0430\u043D\u0438\u044F \u00AB\u0413\u043E\u0440\u044C\u043A\u0438\u0439 \u041C\u0435\u0434\u0438\u0430\u00BB"'
    category              = 'blog'
    cover_url = u'https://gorky.media/wp-content/uploads/2016/09/gorky.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 30
    max_articles_per_feed = 30

    remove_tags_before = dict(name='div', attrs={'id': 'td-outer-wrap'})
    
    remove_tags_after = dict(name='footer')

    remove_tags =   [
        dict(name='footer'),
        dict(name='nav', attrs={'class': 'navbar'}),
        dict(name='div', attrs={'class': 'hide'}),
        dict(name='div', attrs={'class': 'nav-new'}),
        dict(name='div', attrs={'class': 'top-panel '}),
        dict(name='div', attrs={'class': 'panel-nav'}),
        dict(name='div', attrs={'class': 'panel-nav _hide'}),
        dict(name='ul', attrs={'class': 'top-panel__bottom buttons-list _share'}),
        dict(name='ul', attrs={'class': 'buttons-list _share d_lg-none'})
        ] 

    feeds = [
        ('\u0420\u0435\u0446\u0435\u043D\u0437\u0438\u0438', 'https://gorky.media/reviews/feed/'),
        ('\u0424\u0440\u0430\u0433\u043C\u0435\u043D\u0442\u044B', 'https://gorky.media/fragments/feed/'),
        ('\u041A\u043E\u043D\u0442\u0435\u043A\u0441\u0442', 'https://gorky.media/context/feed/'),
        ('\u041F\u043E\u0434\u0431\u043E\u0440\u043A\u0438', 'https://gorky.media/books-collection/feed/')
    ]


The New Times: weekly socio-political online magazine. 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 NewTimes(BasicNewsRecipe):
    title          		  = 'The New Times'
    __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 \u0436\u0443\u0440\u043D\u0430\u043B'
    publisher             = 'The New Times'
    category              = 'newspaper'
    cover_url = u'https://newtimes.ru/img/ogimage.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 150

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

    feeds = [
        ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://newtimes.ru/rss/')
    ]


SOVA: Tbilisi-based media about life & society in Georgia. Favicon replacement.
Fixes needed:
  • No secondary text lead and header image in some 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 Sova(BasicNewsRecipe):
    title          		  = 'SOVA'
    __author__            = 'bugmen00t'
    description           = ' \u0420\u0443\u0441\u0441\u043A\u043E\u044F\u0437\u044B\u0447\u043D\u043E\u0435 \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0435 \u043E\u043D\u043B\u0430\u0439\u043D-\u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u043E\u0441\u043D\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u0432 \u0422\u0431\u0438\u043B\u0438\u0441\u0438 \u0432 2016 \u0433\u043E\u0434\u0443 \u0433\u0440\u0443\u043F\u043F\u043E\u0439 \u043F\u0440\u043E\u0444\u0435\u0441\u0441\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432, \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0449\u0435\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u043E \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0435, \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043D\u0435\u043E\u0442\u044A\u0435\u043C\u043B\u0435\u043C\u044B\u0445 \u0430\u0441\u043F\u0435\u043A\u0442\u0430\u0445 \u0436\u0438\u0437\u043D\u0438 \u0441\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0433\u043E \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u0432 \u0413\u0440\u0443\u0437\u0438\u0438 \u0438 \u0440\u0435\u0433\u0438\u043E\u043D\u0435 \u0432 \u0446\u0435\u043B\u043E\u043C.'
    publisher             = '\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u0435\u043D\u043D\u0430\u044F \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u044F Sova News'
    category              = 'blog'
    cover_url = u'https://i0.wp.com/sova.news/wp-content/uploads/2021/08/sova@512.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 60
    max_articles_per_feed = 30

    remove_tags_before = dict(name='div', attrs={'class':'site-wrapper header-7'})
    
    remove_tags_after = dict(name='div', attrs={'class':'single-body entry-content typography-copy'})

    remove_tags =   [
        dict(name='nav', attrs={'aria-label': 'breadcrumbs'}),
        dict(name='header', attrs={'class': 'site-header site-header--skin-5'}),
        dict(name='footer'),
        dict(name='ins'),
        dict(name='div', attrs={'class': 'entry-interaction__left'}),
        dict(name='div', attrs={'class': 'entry-interaction__right'}),
        dict(name='div', attrs={'id': 'mnmd-sticky-header'}),
        dict(name='div', attrs={'id': 'mnmd-offcanvas-primary'}),
        dict(name='div', attrs={'id': 'mnmd-offcanvas-mobile'}),
        dict(name='div', attrs={'class': 'entry-interaction__right'}),
        dict(name='blockquote', attrs={'class': 'wp-embedded-content'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://sova.news/news/feed/'),
        ('\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', 'https://sova.news/analytics/politics/feed/'),
        ('\u042D\u043A\u043E\u043D\u043E\u043C\u0438\u043A\u0430', 'https://sova.news/analytics/economy/feed/'),
        ('\u041E\u0431\u0449\u0435\u0441\u0442\u0432\u043E', 'https://sova.news/analytics/society/feed/'),
        ('\u0418\u043D\u0442\u0435\u0440\u0432\u044C\u044E', 'https://sova.news/interview/feed/'),
        ('Unfake', 'https://sova.news/unfake/feed/'),
        ('\u0414\u0440\u0443\u0433\u0430\u044F \u0421\u043E\u0432\u0430', 'https://sova.news/sova-other/feed/'),
        ('\u0418\u0441\u043A\u0443\u0441\u0441\u0442\u0432\u043E', 'https://sova.news/sova-other/art/feed/'),
        ('\u0422\u0443\u0440\u0438\u0437\u043C', 'https://sova.news/sova-other/tourism/feed/'),
        ('#weekendnavigator', 'https://sova.news/weekendnavigator/feed/'),
        ('\u0421\u043E\u0441\u0435\u0434\u0438', 'https://sova.news/sova-other/neighbours/feed/'),
        ('\u041D\u0435\u0434\u0435\u043B\u044F \u0432 \u0433\u043E\u0440\u043E\u0434\u0435', 'https://sova.news/week-in-the-city/feed/'),
        ('\u0424\u043E\u0442\u043E\u043F\u0440\u043E\u0433\u0443\u043B\u043A\u0438', 'https://sova.news/photowalks/feed/'),
        ('\u0424\u043E\u0442\u043E', 'https://sova.news/photo/feed/')
    ]
    
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup


StopGame: gaming community portal with news, reviews, streams and blogs. 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 StopGame(BasicNewsRecipe):
    title          		  = 'StopGame'
    __author__            = 'bugmen00t'
    description           = ' \u0420\u043E\u0441\u0441\u0438\u0439\u0441\u043A\u0438\u0439 \u0438\u0433\u0440\u043E\u0432\u043E\u0439 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u043F\u043E\u0440\u0442\u0430\u043B, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u043A\u043E\u043B\u043B\u0435\u043A\u0442\u0438\u0432 \u0430\u0432\u0442\u043E\u0440\u043E\u0432 \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u043C \u0436\u0435\u043B\u0430\u044E\u0449\u0438\u043C \u043E \u0432\u0438\u0434\u0435\u043E\u0438\u0433\u0440\u0430\u0445. '
    publisher             = 'StopGame.ru'
    category              = 'blog'
    cover_url = u'https://images.stopgame.ru/blogs/2020/01/29/U7R7t5rQ.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 50

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

    remove_tags =   [
        dict(name='section', attrs={'id': 'comments'}),
        dict(name='footer'),
        dict(name='section', attrs={'class': '_page-section_xdzdd_387 _additional-reads_zp673_1348'})
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u0440\u0430\u0437\u0434\u0435\u043B\u044B', 'https://rss.stopgame.ru/rss_all.xml'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://rss.stopgame.ru/rss_news.xml'),
        ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://rss.stopgame.ru/articles.xml'),
        ('\u0412\u0438\u0434\u0435\u043E', 'https://rss.stopgame.ru/videos.xml'),
        ('\u0411\u043B\u043E\u0433\u0438', 'https://rss.stopgame.ru/all_topics.xml')
    ]



Also uploading recipes' code & icon as separate files, maybe it will be easier for Dr. Goyal to add them into Calibre that way.
Attached Images
       
Attached Files
File Type: recipe kholod_en.recipe (1.2 KB, 116 views)
File Type: recipe interfax_ua.recipe (2.1 KB, 120 views)
File Type: recipe cherta.recipe (1.7 KB, 114 views)
File Type: recipe gorky.recipe (2.4 KB, 120 views)
File Type: recipe newtimes.recipe (1.2 KB, 123 views)
File Type: recipe sova.recipe (4.6 KB, 115 views)
File Type: recipe stopgame.recipe (2.0 KB, 118 views)
bugmen00t is offline   Reply With Quote
Old 07-27-2022, 03:59 PM   #14
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 05 of ??)

Your daily dose of new recipes

NEW RUSSIAN RECIPES

Собака: cultural life & news of 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 Sobaka(BasicNewsRecipe):
    title          		  = '\u0421\u043E\u0431\u0430\u043A\u0430.ru'
    __author__            = 'bugmen00t'
    description           = '\u0416\u0443\u0440\u043D\u0430\u043B \u043E \u043B\u044E\u0434\u044F\u0445 \u0432 \u041F\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435'
    publisher             = '\u041E\u041E\u041E \u00AB\u0416\u0443\u0440\u043D\u0430\u043B\u044B \u0438 \u0441\u0430\u0439\u0442\u044B "\u0424\u0430\u0431\u0440\u0438\u043A\u0430 \u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430 "\u0422\u043E\u0447\u043A\u0430 \u0420\u0443"\u00BB'
    category              = 'magazine'
    cover_url = u'https://static.sobaka.ru/images/post/00/04/31/21/_rotator.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 7
    max_articles_per_feed = 50

    remove_tags_before = dict(name='div', attrs={'class': 'b-post-view__head'})
    
    remove_tags_after = dict(name='div', attrs={'class': 'b-post-view__foot'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'b-post-view__telegram-promo'}),
        dict(name='div', attrs={'class': 'b-post-view__tgb'}),
        dict(name='div', attrs={'id': 'comments'}),
        dict(name='div', attrs={'class': 'b-post-view__section'}),
        dict(name='div', attrs={'class': 'b-post-view__share'}),
        dict(name='div', attrs={'class': 'b-post-view__details-col b-post-view__details-col--w1'})
        ] 

    feeds = [
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.sobaka.ru/rss/news.xml')
    ]
    
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup


Мел: child education & parenting blog. 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 Mel(BasicNewsRecipe):
    title          		  = '\u041C\u0435\u043B'
    __author__            = 'bugmen00t'
    description           = '\u041C\u0435\u0434\u0438\u0430 \u043F\u0440\u043E \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435 \u0438 \u0432\u043E\u0441\u043F\u0438\u0442\u0430\u043D\u0438\u0435 \u0434\u0435\u0442\u0435\u0439'
    publisher             = '\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435 \u00AB\u041C\u0435\u043B\u00BB'
    category              = 'blog'
    cover_url = u'https://static.mel.fm/images/project/site/dummyLogo.png'
    language              = 'ru'
    no_stylesheets        = False
    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='div', attrs={'class': 'b-pb-article__body'})

    remove_tags =   [
        dict(name='div', attrs={'class': 'b-ad-space__horizontal-centering'}),
        dict(name='div', attrs={'class': 'subscriptionBlock b-pb-publication-body__publication-newsletter-form'}),
        dict(name='div', attrs={'class': 'subscriptionBlock b-pb-article__publication-newsletter-form b-pb-article__publication-newsletter-form-post'}),
        dict(name='div', attrs={'class': 'newsletter-form b-pb-article__publication-newsletter-form'}),
        dict(name='div', attrs={'class': 'bottom-wrapper'}),
        dict(name='div', attrs={'class': 'b-pb-article__right-column b-pb-article__right-column_without-cover b-pb-article__right-column_on-post-page'}),
        dict(name='div', attrs={'class': 'b-pb-article__right-column b-pb-article__right-column_with-cover'}),
        dict(name='div', attrs={'class': 'main-tag'}),
        dict(name='div', attrs={'class': 'main-tag_mobile'}),
        dict(name='div', attrs={'class': 'publication-header__counter'}),
        dict(name='div', attrs={'class': 'smi2-news-container smi2-news-container_desktop smi2-news-container_desktop-news'}),
        dict(name='div', attrs={'class': 'smi2-news-container smi2-news-container_desktop'}),
        dict(name='div', attrs={'class': 'smi2-news-container smi2-news-container_mobile smi2-news-container_mobile-news'}),
        dict(name='div', attrs={'class': 'smi2-news-container smi2-news-container_mobile'})
        ] 

    feeds = [
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://mel.fm/rss/default-all'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://mel.fm/rss/default-news')
    ]
    
    def preprocess_html(self, soup):
        for img in soup.findAll('img', attrs={'data-src': True}):
            img['src'] = img['data-src']
        return soup


Бумага: news and articles about Saint Petersburg. Favicon replacement.
The main website is blocked in Russia, so all RSS feeds and aricles are being downloaded from one of the mirrors
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 PaperPaper(BasicNewsRecipe):
    title          		  = '\u0411\u0443\u043C\u0430\u0433\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0418\u0437\u0434\u0430\u043D\u0438\u0435 \u043E \u043F\u0440\u0435\u043A\u0440\u0430\u0441\u043D\u043E\u043C \u0433\u043E\u0440\u043E\u0434\u0435 \u0421\u0430\u043D\u043A\u0442-\u041F\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435, \u0432 \u043A\u043E\u0442\u043E\u0440\u043E\u043C, \u043A\u043E\u043D\u0435\u0447\u043D\u043E, \u0434\u0430\u043B\u0435\u043A\u043E \u043D\u0435 \u0432\u0441\u0451 \u0438\u0434\u0435\u0430\u043B\u044C\u043D\u043E, \u2014 \u0438 \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043C\u044B \u0437\u0430\u043D\u0438\u043C\u0430\u0435\u043C\u0441\u044F \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0438\u043A\u043E\u0439, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0438\u0432\u043B\u0435\u043A\u0430\u0442\u044C \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435 \u043A \u0432\u0430\u0436\u043D\u044B\u043C \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C \u0438 \u0432\u043B\u0438\u044F\u0442\u044C \u043D\u0430 \u0438\u0445 \u0440\u0435\u0448\u0435\u043D\u0438\u0435.'
    publisher             = '\u041A\u0438\u0440\u0438\u043B\u043B \u0410\u0440\u0442\u0451\u043C\u0435\u043D\u043A\u043E, \u0422\u0430\u0442\u044C\u044F\u043D\u0430 \u0418\u0432\u0430\u043D\u043E\u0432\u0430'
    category              = 'newspaper'
    cover_url = u'https://upload.wikimedia.org/wikipedia/commons/1/1f/Paperpaper_logo.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 50

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

    remove_tags =   [
        dict(name='div', attrs={'class': 'bottom-block '}),
        dict(name='div', attrs={'class': 'bottom-block news'})
        ] 

    feeds = [
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://paperpaper.ru/feed/?service'),
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://wemissedyou.rknrkn.ru/feed/?service'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://paperpaper.ru/category/what/news/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://wemissedyou.rknrkn.ru/category/what/news/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://paperpaper.ru/category/features/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://wemissedyou.rknrkn.ru/category/features/feed/'),
#        ('\u0413\u0438\u0434\u044B', 'https://paperpaper.ru/category/guides/feed/'),
        ('\u0413\u0438\u0434\u044B', 'https://wemissedyou.rknrkn.ru/category/guides/feed/'),
#        ('\u0421\u043F\u0438\u0441\u043E\u043A', 'https://paperpaper.ru/tag/%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA/feed/'),
        ('\u0421\u043F\u0438\u0441\u043E\u043A', 'https://wemissedyou.rknrkn.ru/tag/%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0430\u0442\u044B', 'https://paperpaper.ru/tag/expat/feed/'),
        ('\u042D\u043A\u0441\u043F\u0430\u0442\u044B', 'https://wemissedyou.rknrkn.ru/tag/expat/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://paperpaper.ru/tag/stories/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://wemissedyou.rknrkn.ru/tag/stories/feed/'),
#        ('\u041E\u0442\u0432\u0435\u0442\u044B', 'https://paperpaper.ru/tag/otvety/feed/'),
        ('\u041E\u0442\u0432\u0435\u0442\u044B', 'https://wemissedyou.rknrkn.ru/tag/otvety/feed/'),
#        ('\u041F\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044F', 'https://paperpaper.ru/tag/traveltravel/feed/'),
        ('\u041F\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044F', 'https://wemissedyou.rknrkn.ru/tag/traveltravel/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043F\u043E\u043F', 'https://paperpaper.ru/category/main-cats/nauchpop/feed/'),
        ('\u041D\u0430\u0443\u0447\u043F\u043E\u043F', 'https://wemissedyou.rknrkn.ru/category/main-cats/nauchpop/feed/'),
#        ('\u0412\u043E\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://paperpaper.ru/tag/obostrenie-vokrug-ukrainy-2022/feed/'),
        ('\u0412\u043E\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://wemissedyou.rknrkn.ru/tag/obostrenie-vokrug-ukrainy-2022/feed/'),
#        ('\u0423\u043A\u0440\u0430\u0438\u043D\u0430', 'https://paperpaper.ru/tag/ukraine/feed/'),
        ('\u0423\u043A\u0440\u0430\u0438\u043D\u0430', 'https://wemissedyou.rknrkn.ru/tag/ukraine/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430', 'https://paperpaper.ru/tag/science/feed/'),
        ('\u041D\u0430\u0443\u043A\u0430', 'https://wemissedyou.rknrkn.ru/tag/science/feed/')
    ]


OpenNet.ru: free & open source software news. Favicon replacement.
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 OpenNet(BasicNewsRecipe):
    title          		  = 'OpenNet.ru'
    __author__            = 'bugmen00t'
    description           = '\u0420\u0443\u0441\u0441\u043A\u043E\u044F\u0437\u044B\u0447\u043D\u044B\u0439 \u043F\u043E\u0440\u0442\u0430\u043B, \u043F\u043E\u0441\u0432\u044F\u0449\u0451\u043D\u043D\u044B\u0439 \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u043C \u0438 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u044B\u043C \u0442\u0435\u0445\u043D\u043E\u043B\u043E\u0433\u0438\u044F\u043C (FOSS): \u0435\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438 \u0432 \u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u043D\u043E\u0433\u043E \u043E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u0438\u044F, Linux, BSD \u0438 UNIX-\u043F\u043E\u0434\u043E\u0431\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0441\u0438\u0441\u0442\u0435\u043C.'
    publisher             = 'Maxim Chirkov'
    category              = 'blog'
    cover_url = u'https://www.opennet.ru/opennet.gif'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 50

    remove_tags_before = dict(name='div', attrs={'id': 'as2'})
    
    remove_tags_after = dict(name='tr', attrs={'bgcolor': '#D9DAC6'})

    remove_tags =   [
        dict(name='tr', attrs={'bgcolor': '#D9DAC6'})
        ] 

    feeds = [
        ('\u0413\u043B\u0430\u0432\u043D\u044B\u0435 \u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.opennet.ru/opennews/opennews_6_noadv.rss'),
        ('\u041C\u0438\u043D\u0438-\u043D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://www.opennet.ru/opennews/opennews_mini_noadv.rss'),
        ('\u0421\u043E\u0431\u044B\u0442\u0438\u044F', 'https://www.opennet.ru/opennews/opennews_review.rss'),
        ('\u041E\u0431\u0437\u043E\u0440\u044B \u0441\u0442\u0430\u0442\u0435\u0439', 'https://www.opennet.ru/opennews/opennews_arts.rss'),
        ('\u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u044C', 'https://www.opennet.ru/opennews/opennews_sec.rss'),
        ('\u041D\u043E\u0432\u044B\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C', 'https://www.opennet.ru/opennews/opennews_prog.rss'),
        ('Linux', 'https://www.opennet.ru/opennews/opennews_linux.rss'),
        ('BSD', 'https://www.opennet.ru/opennews/opennews_bsd.rss'),
        ('Ubuntu', 'https://www.opennet.ru/opennews/opennews_ubuntu_full.rss'),
        ('Fedora', 'https://www.opennet.ru/opennews/opennews_fedora_full.rss'),
        ('Mozilla/Firefox', 'https://www.opennet.ru/opennews/opennews_mozilla_full.rss')
    ]


Проект: independent media outlet specialising in investigative journalism. 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 Project(BasicNewsRecipe):
    title          		  = '\u041F\u0440\u043E\u0435\u043A\u0442'
    __author__            = 'bugmen00t'
    description           = '\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442-\u0438\u0437\u0434\u0430\u043D\u0438\u0435, \u0441\u043E\u0437\u0434\u0430\u043D\u043D\u043E\u0435 \u0431\u044B\u0432\u0448\u0438\u043C \u0433\u043B\u0430\u0432\u043D\u044B\u043C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u043E\u043C \u0442\u0435\u043B\u0435\u043A\u0430\u043D\u0430\u043B\u0430 \u00AB\u0414\u043E\u0436\u0434\u044C\u00BB \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0421\u041C\u0418 \u0420\u043E\u043C\u0430\u043D\u043E\u043C \u0411\u0430\u0434\u0430\u043D\u0438\u043D\u044B\u043C, \u043A\u043E\u0442\u043E\u0440\u0435 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u0443\u044E\u0435\u0442\u0441\u044F \u043D\u0430 \u0440\u0430\u0441\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0439 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0438\u043A\u0435.'
    publisher             = '\u0420\u043E\u043C\u0430\u043D \u0411\u0430\u0434\u0430\u043D\u0438\u043D'
    category              = 'blog'
    cover_url = u'https://proektmedia-stat.ams3.digitaloceanspaces.com/2018/08/proektmedia_facebook_default.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 200
    max_articles_per_feed = 20

    remove_tags_before = dict(name='main')
    
    remove_tags_after = dict(name='div', attrs={'class': 'single-post__article js-post-article'})

    remove_tags =   [
        dict(name='span', attrs={'class': 'more'}),
        dict(name='span', attrs={'class': 'close'}),
        dict(name='div', attrs={'class': 'socials js-socials-icons'})
        ] 

    feeds = [
        ('\u041F\u0440\u043E\u0435\u043A\u0442.', 'https://www.proekt.media/feed/')
    ]
    
    def get_browser(self):
        br = BasicNewsRecipe.get_browser(self, user_agent='common_words/based')
        return br


Coda (Russian version): crisis news platform. Favicon replacement.
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 Coda(BasicNewsRecipe):
    title                 = 'Coda \u043D\u0430 \u0440\u0443\u0441\u0441\u043A\u043E\u043C'
    __author__            = 'bugmen00t'
    description           = 'Coda - \u043C\u0435\u0434\u0438\u0430, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0432\u044B\u044F\u0432\u043B\u044F\u0435\u0442 \u0441\u0432\u044F\u0437\u0438 \u043C\u0435\u0436\u0434\u0443 \u0441\u043E\u0431\u044B\u0442\u0438\u044F\u043C\u0438 \u0438 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u0442 \u0441\u043B\u0435\u0434\u0438\u0442\u044C \u0437\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u044F\u043C\u0438 \u0434\u0430\u0436\u0435 \u043F\u043E\u0441\u043B\u0435 \u0442\u043E\u0433\u043E, \u043A\u0430\u043A \u043E\u043D\u0438 \u043E\u043D\u0438 \u043F\u0440\u043E\u043F\u0430\u043B\u0438 \u0438\u0437 \u043F\u043E\u0432\u0435\u0441\u0442\u043A\u0438. Coda \u043F\u043E\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044F \u043D\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0432 \u0441\u0430\u043C\u0438 \u043A\u0440\u0438\u0437\u0438\u0441\u044B, \u043D\u043E \u0438 \u0432 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0438\u0445 \u043E\u043A\u0440\u0443\u0436\u0430\u0435\u0442'
    publisher             = 'Natalia Antelava & Ilan Greenberg'
    category              = 'blog'
    cover_url = u'https://www.codastory.com/wp-content/uploads/2021/05/AT_thumbnail_512x512.png'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 180
    max_articles_per_feed = 50

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

    remove_tags =   [
        dict(name='li', attrs={'class': 'material-meta__type'}),
        dict(name='div', attrs={'class': 'more'})
        ] 

    feeds = [
        ('CODA', 'https://www.codastory.com/ru/feed/')
    ]


NEW ENGLISH RECIPES (OF RUSSIAN SOURCES)

The Project (English version): independent Russian media specialising in investigative journalism. 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 Project(BasicNewsRecipe):
    title          		  = 'The Project'
    __author__            = 'bugmen00t'
    description           = 'The Project is an independent Russian media specialising in in-depth journalism.'
    publisher             = 'Roman Badanin'
    category              = 'blog'
    cover_url = u'https://proektmedia-stat.ams3.digitaloceanspaces.com/2018/08/proektmedia_facebook_default.png'
    language              = 'en_RU'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 600
    max_articles_per_feed = 20

    remove_tags_before = dict(name='main')
    
    remove_tags_after = dict(name='div', attrs={'class': 'single-post__article js-post-article'})

    remove_tags =   [
        dict(name='span', attrs={'class': 'more'}),
        dict(name='span', attrs={'class': 'close'}),
        dict(name='div', attrs={'class': 'socials js-socials-icons'})
        ] 

    feeds = [
        ('The Project.', 'https://www.proekt.media/en/feed/')
    ]
    
    def get_browser(self):
        br = BasicNewsRecipe.get_browser(self, user_agent='common_words/based')
        return br


Coda (English version): crisis news platform. Favicon replacement.
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 Coda(BasicNewsRecipe):
    title          		  = 'Coda'
    __author__            = 'bugmen00t'
    description           = 'Coda Story reports on major currents shaping our world from disinformation to authoritarian technologies to the war on science. Coda stays on these stories to reveal why they matter, how they are connected and where they are heading next.'
    publisher             = 'Natalia Antelava & Ilan Greenberg'
    category              = 'blog'
    cover_url = u'https://www.codastory.com/wp-content/uploads/2021/05/AT_thumbnail_512x512.png'
    language              = 'en_RU'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 180
    max_articles_per_feed = 50

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

    remove_tags =   [
        dict(name='li', attrs={'class': 'material-meta__type'}),
        dict(name='div', attrs={'class': 'more'})
        ] 

    feeds = [
        ('CODA', 'https://www.codastory.com/feed/')
    ]
Attached Images
        
Attached Files
File Type: recipe sobaka.recipe (2.0 KB, 117 views)
File Type: recipe mel.recipe (2.9 KB, 120 views)
File Type: recipe paperpaper.recipe (5.2 KB, 114 views)
File Type: recipe opennet.recipe (3.0 KB, 119 views)
File Type: recipe project.recipe (2.2 KB, 119 views)
File Type: recipe coda_ru.recipe (2.1 KB, 123 views)
File Type: recipe project_en.recipe (1.4 KB, 120 views)
File Type: recipe coda.recipe (1.3 KB, 120 views)

Last edited by bugmen00t; 07-28-2022 at 01:35 PM. Reason: Бумага recipe fix
bugmen00t is offline   Reply With Quote
Old 07-28-2022, 01:47 PM   #15
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
Unhappy Quick fix

Quick fix for yesterday's Бумага (paperpaper.recipe): incorrect type of quotation marks

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 PaperPaper(BasicNewsRecipe):
    title          		  = '\u0411\u0443\u043C\u0430\u0433\u0430'
    __author__            = 'bugmen00t'
    description           = '\u0418\u0437\u0434\u0430\u043D\u0438\u0435 \u043E \u043F\u0440\u0435\u043A\u0440\u0430\u0441\u043D\u043E\u043C \u0433\u043E\u0440\u043E\u0434\u0435 \u0421\u0430\u043D\u043A\u0442-\u041F\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435, \u0432 \u043A\u043E\u0442\u043E\u0440\u043E\u043C, \u043A\u043E\u043D\u0435\u0447\u043D\u043E, \u0434\u0430\u043B\u0435\u043A\u043E \u043D\u0435 \u0432\u0441\u0451 \u0438\u0434\u0435\u0430\u043B\u044C\u043D\u043E, \u2014 \u0438 \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043C\u044B \u0437\u0430\u043D\u0438\u043C\u0430\u0435\u043C\u0441\u044F \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u0438\u043A\u043E\u0439, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0438\u0432\u043B\u0435\u043A\u0430\u0442\u044C \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u0435 \u043A \u0432\u0430\u0436\u043D\u044B\u043C \u0434\u043B\u044F \u0432\u0441\u0435\u0445 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C \u0438 \u0432\u043B\u0438\u044F\u0442\u044C \u043D\u0430 \u0438\u0445 \u0440\u0435\u0448\u0435\u043D\u0438\u0435.'
    publisher             = '\u041A\u0438\u0440\u0438\u043B\u043B \u0410\u0440\u0442\u0451\u043C\u0435\u043D\u043A\u043E, \u0422\u0430\u0442\u044C\u044F\u043D\u0430 \u0418\u0432\u0430\u043D\u043E\u0432\u0430'
    category              = 'newspaper'
    cover_url = u'https://upload.wikimedia.org/wikipedia/commons/1/1f/Paperpaper_logo.jpg'
    language              = 'ru'
    no_stylesheets        = False
    remove_javascript = False
    auto_cleanup   = False
    oldest_article = 14
    max_articles_per_feed = 50

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

    remove_tags =   [
        dict(name='div', attrs={'class': 'bottom-block '}),
        dict(name='div', attrs={'class': 'bottom-block news'})
        ] 

    feeds = [
#        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://paperpaper.ru/feed/?service'),
        ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://wemissedyou.rknrkn.ru/feed/?service'),
#        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://paperpaper.ru/category/what/news/feed/'),
        ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://wemissedyou.rknrkn.ru/category/what/news/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://paperpaper.ru/category/features/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://wemissedyou.rknrkn.ru/category/features/feed/'),
#        ('\u0413\u0438\u0434\u044B', 'https://paperpaper.ru/category/guides/feed/'),
        ('\u0413\u0438\u0434\u044B', 'https://wemissedyou.rknrkn.ru/category/guides/feed/'),
#        ('\u0421\u043F\u0438\u0441\u043E\u043A', 'https://paperpaper.ru/tag/%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA/feed/'),
        ('\u0421\u043F\u0438\u0441\u043E\u043A', 'https://wemissedyou.rknrkn.ru/tag/%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA/feed/'),
#        ('\u042D\u043A\u0441\u043F\u0430\u0442\u044B', 'https://paperpaper.ru/tag/expat/feed/'),
        ('\u042D\u043A\u0441\u043F\u0430\u0442\u044B', 'https://wemissedyou.rknrkn.ru/tag/expat/feed/'),
#        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://paperpaper.ru/tag/stories/feed/'),
        ('\u0418\u0441\u0442\u043E\u0440\u0438\u0438', 'https://wemissedyou.rknrkn.ru/tag/stories/feed/'),
#        ('\u041E\u0442\u0432\u0435\u0442\u044B', 'https://paperpaper.ru/tag/otvety/feed/'),
        ('\u041E\u0442\u0432\u0435\u0442\u044B', 'https://wemissedyou.rknrkn.ru/tag/otvety/feed/'),
#        ('\u041F\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044F', 'https://paperpaper.ru/tag/traveltravel/feed/'),
        ('\u041F\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044F', 'https://wemissedyou.rknrkn.ru/tag/traveltravel/feed/'),
#        ('\u041D\u0430\u0443\u0447\u043F\u043E\u043F', 'https://paperpaper.ru/category/main-cats/nauchpop/feed/'),
        ('\u041D\u0430\u0443\u0447\u043F\u043E\u043F', 'https://wemissedyou.rknrkn.ru/category/main-cats/nauchpop/feed/'),
#        ('\u0412\u043E\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://paperpaper.ru/tag/obostrenie-vokrug-ukrainy-2022/feed/'),
        ('\u0412\u043E\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', 'https://wemissedyou.rknrkn.ru/tag/obostrenie-vokrug-ukrainy-2022/feed/'),
#        ('\u0423\u043A\u0440\u0430\u0438\u043D\u0430', 'https://paperpaper.ru/tag/ukraine/feed/'),
        ('\u0423\u043A\u0440\u0430\u0438\u043D\u0430', 'https://wemissedyou.rknrkn.ru/tag/ukraine/feed/'),
#        ('\u041D\u0430\u0443\u043A\u0430', 'https://paperpaper.ru/tag/science/feed/'),
        ('\u041D\u0430\u0443\u043A\u0430', 'https://wemissedyou.rknrkn.ru/tag/science/feed/')
    ]
Attached Files
File Type: recipe paperpaper.recipe (5.2 KB, 114 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 05:21 PM.


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