comment formating (extra-edit)

This commit is contained in:
un-pogaz 2025-01-24 11:14:21 +01:00
parent dba73b96b7
commit 0ce6645f15
80 changed files with 1716 additions and 1877 deletions

View File

@ -38,9 +38,9 @@ class ABCNews(BasicNewsRecipe):
if d and isinstance(d, str): if d and isinstance(d, str):
self.oldest_article = float(d) self.oldest_article = float(d)
# auto_cleanup = True # enable this as a backup option if recipe stops working # auto_cleanup = True # enable this as a backup option if recipe stops working
# use_embedded_content = False # if set to true will assume that all the article content is within the feed (i.e. won't try to fetch more data) # use_embedded_content = False # if set to true will assume that all the article content is within the feed (i.e. won't try to fetch more data)
no_stylesheets = True no_stylesheets = True
remove_javascript = True remove_javascript = True
@ -57,7 +57,7 @@ class ABCNews(BasicNewsRecipe):
# Clear out all the unwanted html tags: # Clear out all the unwanted html tags:
# ************************************ # ************************************
remove_tags = [ remove_tags = [
# dict(name='aside', attrs={'name': re.compile(aside_reg_exp, re.IGNORECASE)}) # dict(name='aside', attrs={'name': re.compile(aside_reg_exp, re.IGNORECASE)})
{ {
'name': ['meta', 'link', 'noscript', 'aside'] 'name': ['meta', 'link', 'noscript', 'aside']
}, },
@ -98,12 +98,12 @@ class ABCNews(BasicNewsRecipe):
('Health', 'https://www.abc.net.au/news/feed/9167762/rss.xml'), ('Health', 'https://www.abc.net.au/news/feed/9167762/rss.xml'),
('Arts and Entertainment', 'https://www.abc.net.au/news/feed/472/rss.xml'), ('Arts and Entertainment', 'https://www.abc.net.au/news/feed/472/rss.xml'),
('Fact Check', 'https://www.abc.net.au/news/feed/5306468/rss.xml'), ('Fact Check', 'https://www.abc.net.au/news/feed/5306468/rss.xml'),
# ('Adelaide', 'https://www.abc.net.au/news/feed/8057540/rss.xml'), #enable by removing # at start of line # ('Adelaide', 'https://www.abc.net.au/news/feed/8057540/rss.xml'), #enable by removing # at start of line
# ('Brisbane', 'https://www.abc.net.au/news/feed/8053540/rss.xml'), #enable by removing # at start of line # ('Brisbane', 'https://www.abc.net.au/news/feed/8053540/rss.xml'), #enable by removing # at start of line
# ('Canberra', 'https://www.abc.net.au/news/feed/8057234/rss.xml'), #enable by removing # at start of line # ('Canberra', 'https://www.abc.net.au/news/feed/8057234/rss.xml'), #enable by removing # at start of line
# ('Darwin', 'https://www.abc.net.au/news/feed/8057648/rss.xml'), #enable by removing # at start of line # ('Darwin', 'https://www.abc.net.au/news/feed/8057648/rss.xml'), #enable by removing # at start of line
# ('Hobart', 'https://www.abc.net.au/news/feed/8054562/rss.xml'), #enable by removing # at start of line # ('Hobart', 'https://www.abc.net.au/news/feed/8054562/rss.xml'), #enable by removing # at start of line
# ('Melbourne', 'https://www.abc.net.au/news/feed/8057136/rss.xml'), #enable by removing # at start of line # ('Melbourne', 'https://www.abc.net.au/news/feed/8057136/rss.xml'), #enable by removing # at start of line
# ('Perth', 'https://www.abc.net.au/news/feed/8057096/rss.xml'), #enable by removing # at start of line # ('Perth', 'https://www.abc.net.au/news/feed/8057096/rss.xml'), #enable by removing # at start of line
# ('Sydney', 'https://www.abc.net.au/news/feed/8055316/rss.xml'), #enable by removing # at start of line # ('Sydney', 'https://www.abc.net.au/news/feed/8055316/rss.xml'), #enable by removing # at start of line
] ]

View File

@ -96,5 +96,5 @@ class AM730(BasicNewsRecipe):
print(title) print(title)
print(url) print(url)
SectionsArticles.append(self.getAMSectionArticles(title,url)) SectionsArticles.append(self.getAMSectionArticles(title,url))
# feeds.append(articles[0]['url']) # feeds.append(articles[0]['url'])
return SectionsArticles return SectionsArticles

View File

@ -12,7 +12,7 @@ class BeforeWeGo(BasicNewsRecipe):
description = 'Before We Go Blog is a collective of Fantasy, Sci-Fi and Graphic Novel fans from around the world, passionate about providing awesome, enjoyable reviews for anyone who loves a good book!' # noqa: E501 description = 'Before We Go Blog is a collective of Fantasy, Sci-Fi and Graphic Novel fans from around the world, passionate about providing awesome, enjoyable reviews for anyone who loves a good book!' # noqa: E501
publisher = 'BEFOREWEGOBLOG' publisher = 'BEFOREWEGOBLOG'
category = 'blog' category = 'blog'
# cover_url = u'https://i0.wp.com/beforewegoblog.com/wp-content/uploads/2021/09/beth-with-long-hair.jpeg' # cover_url = u'https://i0.wp.com/beforewegoblog.com/wp-content/uploads/2021/09/beth-with-long-hair.jpeg'
cover_url = u'https://i0.wp.com/beforewegoblog.com/wp-content/uploads/2021/01/before-we-go-blog-1.png' cover_url = u'https://i0.wp.com/beforewegoblog.com/wp-content/uploads/2021/01/before-we-go-blog-1.png'
language = 'en' language = 'en'
no_stylesheets = True no_stylesheets = True
@ -24,7 +24,7 @@ class BeforeWeGo(BasicNewsRecipe):
remove_tags_before = dict(name='h1', attrs={'class': 'entry-title'}) remove_tags_before = dict(name='h1', attrs={'class': 'entry-title'})
remove_tags_after = dict(name='div', attrs={'id': 'author-bio'}) remove_tags_after = dict(name='div', attrs={'id': 'author-bio'})
# remove_tags_after = dict(name='article') # remove_tags_after = dict(name='article')
remove_tags = [ remove_tags = [
dict(name='div', attrs={'class': 'nectar-scrolling-text font_size_10vh custom_color has-custom-divider'}), dict(name='div', attrs={'class': 'nectar-scrolling-text font_size_10vh custom_color has-custom-divider'}),

View File

@ -60,20 +60,20 @@ class CanWestPaper(BasicNewsRecipe):
] ]
# un-comment the following six lines for the Vancouver Province # un-comment the following six lines for the Vancouver Province
# title = u'Vancouver Province' # # title = u'Vancouver Province'
# url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg' # # std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
# logo_url = 'vplogo.jpg' # # logo_url = 'vplogo.jpg'
# fp_tag = 'CAN_TP' # # fp_tag = 'CAN_TP'
# un-comment the following six lines for the Vancouver Sun # un-comment the following six lines for the Vancouver Sun
# title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg' # # std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
# logo_url = 'vslogo.jpg' # # logo_url = 'vslogo.jpg'
# fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
# un-comment the following six lines for the Calgary Herald # un-comment the following six lines for the Calgary Herald
title = u'Calgary Herald' title = u'Calgary Herald'
@ -90,7 +90,7 @@ class CanWestPaper(BasicNewsRecipe):
# # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg' # # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
# # logo_url = 'ejlogo.jpg' # # logo_url = 'ejlogo.jpg'
# # fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
#
# un-comment the following six lines for the Ottawa Citizen # un-comment the following six lines for the Ottawa Citizen
# # title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# # url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
@ -98,7 +98,7 @@ class CanWestPaper(BasicNewsRecipe):
# # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg' # # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
# # logo_url = 'oclogo.jpg' # # logo_url = 'oclogo.jpg'
# # fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
#
# un-comment the following six lines for the Montreal Gazette # un-comment the following six lines for the Montreal Gazette
# # title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# # url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'

View File

@ -15,7 +15,7 @@ class BasicUserRecipe1316245412(BasicNewsRecipe):
no_stylesheets = True no_stylesheets = True
auto_cleanup = False auto_cleanup = False
# remove_javascript = True # remove_javascript = True
remove_tags = [ remove_tags = [
dict(name='div', attrs={'id': ['header', 'navigation', 'skip-link', dict(name='div', attrs={'id': ['header', 'navigation', 'skip-link',
@ -51,6 +51,6 @@ class BasicUserRecipe1316245412(BasicNewsRecipe):
def print_version(self, url): def print_version(self, url):
return url + '?print' return url + '?print'
# def get_cover_url(self): # def get_cover_url(self):
# return 'http://www.cicero.de/sites/all/themes/cicero/logo.png' # need to # return 'http://www.cicero.de/sites/all/themes/cicero/logo.png' # need to
# find a good logo on their home page! # find a good logo on their home page!

View File

@ -60,28 +60,28 @@ class CanWestPaper(BasicNewsRecipe):
] ]
# un-comment the following six lines for the Vancouver Province # un-comment the following six lines for the Vancouver Province
# title = u'Vancouver Province' # # title = u'Vancouver Province'
# url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg' # # std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
# logo_url = 'vplogo.jpg' # # logo_url = 'vplogo.jpg'
# fp_tag = 'CAN_TP' # # fp_tag = 'CAN_TP'
# un-comment the following six lines for the Vancouver Sun # un-comment the following six lines for the Vancouver Sun
# title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg' # # std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
# logo_url = 'vslogo.jpg' # # logo_url = 'vslogo.jpg'
# fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
# un-comment the following six lines for the Calgary Herald # un-comment the following six lines for the Calgary Herald
# title = u'Calgary Herald' # # title = u'Calgary Herald'
# url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg' # # std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
# logo_url = 'chlogo.jpg' # # logo_url = 'chlogo.jpg'
# fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
# un-comment the following six lines for the Edmonton Journal # un-comment the following six lines for the Edmonton Journal
title = u'Edmonton Journal' title = u'Edmonton Journal'
@ -92,20 +92,20 @@ class CanWestPaper(BasicNewsRecipe):
fp_tag = 'CAN_EJ' fp_tag = 'CAN_EJ'
# un-comment the following six lines for the Ottawa Citizen # un-comment the following six lines for the Ottawa Citizen
# title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg' # # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
# logo_url = 'oclogo.jpg' # # logo_url = 'oclogo.jpg'
# fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
# un-comment the following six lines for the Montreal Gazette # un-comment the following six lines for the Montreal Gazette
# title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg' # # std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
# logo_url = 'mglogo.jpg' # # logo_url = 'mglogo.jpg'
# fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
Kindle_Fire = False Kindle_Fire = False
masthead_url = std_logo_url masthead_url = std_logo_url

View File

@ -143,7 +143,7 @@ class FazNet(BasicNewsRecipe):
'tik4-sharing','tik4-load-more-bottom', 'tik4-sharing','tik4-load-more-bottom',
'tik4-by','header-detail__image','mm-adbox','upper-toolbar content-container' 'tik4-by','header-detail__image','mm-adbox','upper-toolbar content-container'
]}), ]}),
# dict(name ='script'), # dict(name ='script'),
dict(name = 'style'), dict(name = 'style'),
dict(name='svg'), dict(name='svg'),
dict(name='div', attrs={'data-module':'teaser'}), dict(name='div', attrs={'data-module':'teaser'}),
@ -240,11 +240,11 @@ class FazNet(BasicNewsRecipe):
if tag.contents[0] and 'F.A.Z.-Newsletter' in tag.contents[0]: if tag.contents[0] and 'F.A.Z.-Newsletter' in tag.contents[0]:
tag.extract() tag.extract()
# format liveblog # format liveblog
if soup.find(attrs={'class':'tik4-live__container'}): if soup.find(attrs={'class':'tik4-live__container'}):
format_tickaroo_liveblog(soup) format_tickaroo_liveblog(soup)
# remove sizes and calc attributes in images # remove sizes and calc attributes in images
for tag in soup.findAll('img'): for tag in soup.findAll('img'):
if tag.has_attr('src'): if tag.has_attr('src'):
new_img = soup.new_tag('img') new_img = soup.new_tag('img')

View File

@ -12,15 +12,15 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
language = 'de' language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,15 +12,15 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
language = 'en_UK' language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), ('Gagadget', 'https://gagadget.com/en/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,15 +12,15 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
language = 'es' language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,14 +12,14 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
language = 'fr' language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
('Gagadget', 'https://gagadget.com/fr/rss/'),
('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,15 +12,15 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
language = 'it' language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish ('Gagadget', 'https://gagadget.com/it/rss/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
('Notizia', 'https://gagadget.com/it/rss/news/'), ]
('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,15 +12,15 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
language = 'nb' language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,15 +12,15 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
language = 'nl' language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -28,77 +28,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -14,14 +14,14 @@ class Gagadget(BasicNewsRecipe):
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
language = 'ru_UK' language = 'ru_UK'
# language = 'uk' # language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
@ -29,77 +29,65 @@ class Gagadget(BasicNewsRecipe):
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
# # remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
# # remove_tags = [
# remove_tags = [ # dict(name='div', attrs={'class': 'footer-content'}),
# dict(name='div', attrs={'class': 'footer-content'}), # ]
# ]
feeds = [ feeds = [
# # Russian
# Russian ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# # ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian # ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# # ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), # ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
# ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
# ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -12,93 +12,81 @@ class Gagadget(BasicNewsRecipe):
publication_type = 'news' publication_type = 'news'
oldest_article = 7 oldest_article = 7
max_articles_per_feed = 100 max_articles_per_feed = 100
# language = 'ru_UK' # language = 'ru_UK'
language = 'uk' language = 'uk'
# language = 'en_UK' # language = 'en_UK'
# language = 'de' # language = 'de'
# language = 'nb' # language = 'nb'
# language = 'nl' # language = 'nl'
# language = 'es' # language = 'es'
# language = 'it' # language = 'it'
# language = 'fr' # language = 'fr'
cover_url = 'https://gagadget.com/static/img/gagadget.jpg' cover_url = 'https://gagadget.com/static/img/gagadget.jpg'
auto_cleanup = False auto_cleanup = False
no_stylesheets = False no_stylesheets = False
remove_tags_before = dict(name='h1') remove_tags_before = dict(name='h1')
# remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'}) # remove_tags_after = dict(name='div', attrs={'class': 'l-inner l-inner_high'})
#
# Ukrainian version only # Ukrainian version only
#
remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'}) remove_tags_after = dict(name='div', attrs={'class': 'top20 bottom20 post-links'})
remove_tags = [ remove_tags = [
dict(name='div', attrs={'class': 'footer-content'}), dict(name='div', attrs={'class': 'footer-content'}),
] ]
feeds = [ feeds = [
# # Russian
# Russian # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'),
# # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://gagadget.com/rss/'), # ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://gagadget.com/rss/news/'), # ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u0442\u0430\u0442\u044C\u0438', 'https://gagadget.com/rss/articles/'), # ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'),
# ('\u041E\u0431\u0437\u043E\u0440\u044B', 'https://gagadget.com/rss/reviews/'),
# ('\u0421\u043F\u0435\u0446\u043F\u0440\u043E\u0435\u043A\u0442\u044B', 'https://gagadget.com/rss/specials/'), # Ukrainian
# ('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'),
# Ukrainian ('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
# ('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'),
('\u0423\u0441\u0456 \u043C\u0430\u0442\u0435\u0440\u0456\u0430\u043B\u0438', 'https://gagadget.com/uk/rss/'), ('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'),
('\u041D\u043E\u0432\u0438\u043D\u0438', 'https://gagadget.com/uk/rss/news/'),
('\u0421\u0442\u0430\u0442\u0442\u0456', 'https://gagadget.com/uk/rss/articles/'), # English
('\u041E\u0433\u043B\u044F\u0434\u0438', 'https://gagadget.com/uk/rss/reviews/'), # ('Gagadget', 'https://gagadget.com/en/rss/'),
# # ('News', 'https://gagadget.com/en/rss/news/'),
# English
# # German
# ('Gagadget', 'https://gagadget.com/en/rss/'), # ('Gagadget', 'https://gagadget.com/de/rss/'),
# ('News', 'https://gagadget.com/en/rss/news/'), # ('Nachrichten', 'https://gagadget.com/de/rss/news/'),
# # ('Tests', 'https://gagadget.com/de/rss/reviews/'),
# German # ('Artikel', 'https://gagadget.com/de/rss/articles/'),
#
# ('Gagadget', 'https://gagadget.com/de/rss/'), # Norwegian
# ('Nachrichten', 'https://gagadget.com/de/rss/news/'), # ('Gagadget', 'https://gagadget.com/nb/rss/'),
# ('Tests', 'https://gagadget.com/de/rss/reviews/'), # ('Nyheter', 'https://gagadget.com/nb/rss/news/'),
# ('Artikel', 'https://gagadget.com/de/rss/articles/'), # ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'),
# # ('Artikler', 'https://gagadget.com/nb/rss/articles/'),
# Norwegian
# # Dutch
# ('Gagadget', 'https://gagadget.com/nb/rss/'), # ('Gagadget', 'https://gagadget.com/nl/rss/'),
# ('Nyheter', 'https://gagadget.com/nb/rss/news/'), # ('Nieuws', 'https://gagadget.com/nl/rss/news/'),
# ('Anmeldelser', 'https://gagadget.com/nb/rss/reviews/'), # ('Recensies', 'https://gagadget.com/nl/rss/reviews/'),
# ('Artikler', 'https://gagadget.com/nb/rss/articles/'), # ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
#
# Dutch # Spanish
# # ('Gagadget', 'https://gagadget.com/es/rss/'),
# ('Gagadget', 'https://gagadget.com/nl/rss/'), # ('Noticias', 'https://gagadget.com/es/rss/news/'),
# ('Nieuws', 'https://gagadget.com/nl/rss/news/'), # ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Recensies', 'https://gagadget.com/nl/rss/reviews/'), # ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'),
# ('Artikelen', 'https://gagadget.com/nl/rss/articles/'),
# # Italian
# Spanish # ('Gagadget', 'https://gagadget.com/it/rss/'),
# # ('Notizia', 'https://gagadget.com/it/rss/news/'),
# ('Gagadget', 'https://gagadget.com/es/rss/'), # ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Noticias', 'https://gagadget.com/es/rss/news/'), # ('Articoli', 'https://gagadget.com/it/rss/articles/'),
# ('Rese\u00F1as', 'https://gagadget.com/es/rss/reviews/'),
# ('Art\u00EDculos', 'https://gagadget.com/es/rss/articles/'), # French
# # ('Gagadget', 'https://gagadget.com/fr/rss/'),
# Italian # ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# # ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Gagadget', 'https://gagadget.com/it/rss/'), # ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
# ('Notizia', 'https://gagadget.com/it/rss/news/'), ]
# ('Recensioni', 'https://gagadget.com/it/rss/reviews/'),
# ('Articoli', 'https://gagadget.com/it/rss/articles/'),
#
# French
#
# ('Gagadget', 'https://gagadget.com/fr/rss/'),
# ('Nouvelles', 'https://gagadget.com/fr/rss/news/'),
# ('Commentaires', 'https://gagadget.com/fr/rss/reviews/'),
# ('Des articles', 'https://gagadget.com/fr/rss/articles/'),
#
]

View File

@ -47,7 +47,7 @@ def multiply_with_unknown_component(first_comp, second_comp, result):
def solve_captcha(captcha): def solve_captcha(captcha):
# # Convert from a word problem into a numeric problem # Convert from a word problem into a numeric problem
numeric_problem = '' numeric_problem = ''
for part in captcha.split(' '): for part in captcha.split(' '):
numeric_problem = numeric_problem + str(text2num(part)) numeric_problem = numeric_problem + str(text2num(part))

View File

@ -136,7 +136,7 @@ class HNWithCommentsLink(BasicNewsRecipe):
article.text_summary = self.prettyify_url(article.url) article.text_summary = self.prettyify_url(article.url)
article.summary = article.text_summary article.summary = article.text_summary
# def parse_index(self): # def parse_index(self):
# feeds = [] # feeds = []
# feeds.append((u'Hacker News',[{'title': 'Testing', 'url': 'https://news.ycombinator.com/item?id=2935944'}])) # feeds.append((u'Hacker News',[{'title': 'Testing', 'url': 'https://news.ycombinator.com/item?id=2935944'}]))
# return feeds # return feeds

View File

@ -16,7 +16,7 @@ class IlMessaggero(BasicNewsRecipe):
__author__ = 'Gabriele Marini' __author__ = 'Gabriele Marini'
description = 'Italian News' description = 'Italian News'
# cover_url = 'http://www.ilmessaggero.it/img_tst/logomsgr.gif' # cover_url = 'http://www.ilmessaggero.it/img_tst/logomsgr.gif'
title = u'Il Messaggero' title = u'Il Messaggero'
publisher = 'Caltagirone Editore' publisher = 'Caltagirone Editore'
category = 'News, politics, culture, economy, general interest' category = 'News, politics, culture, economy, general interest'

View File

@ -5,7 +5,7 @@ class ingr(BasicNewsRecipe):
title = 'in.gr' title = 'in.gr'
__author__ = 'Stelios' __author__ = 'Stelios'
description = 'News from Greece' description = 'News from Greece'
# max_articles_per_feed = 100 # max_articles_per_feed = 100
oldest_article = 4 oldest_article = 4
publisher = 'in.gr' publisher = 'in.gr'
category = 'news, GR' category = 'news, GR'

View File

@ -16,7 +16,7 @@ class LeggoIT(BasicNewsRecipe):
__author__ = 'Gabriele Marini' __author__ = 'Gabriele Marini'
description = 'Italian Free daily newspaper' description = 'Italian Free daily newspaper'
# cover_url = 'http://www.leggo.it/img/logo-leggo2.gif' # cover_url = 'http://www.leggo.it/img/logo-leggo2.gif'
title = u'Leggo.it' title = u'Leggo.it'
publisher = 'Ced Caltagirone Editore S.p.A.' publisher = 'Ced Caltagirone Editore S.p.A.'
category = 'News, politics, culture, economy, general interest' category = 'News, politics, culture, economy, general interest'

View File

@ -60,44 +60,44 @@ class CanWestPaper(BasicNewsRecipe):
] ]
# un-comment the following six lines for the Vancouver Province # un-comment the following six lines for the Vancouver Province
# title = u'Vancouver Province' # # title = u'Vancouver Province'
# url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg' # # std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
# logo_url = 'vplogo.jpg' # # logo_url = 'vplogo.jpg'
# fp_tag = 'CAN_TP' # # fp_tag = 'CAN_TP'
# un-comment the following six lines for the Vancouver Sun # un-comment the following six lines for the Vancouver Sun
# title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg' # # std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
# logo_url = 'vslogo.jpg' # # logo_url = 'vslogo.jpg'
# fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
# un-comment the following six lines for the Calgary Herald # un-comment the following six lines for the Calgary Herald
# title = u'Calgary Herald' # # title = u'Calgary Herald'
# url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg' # # std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
# logo_url = 'chlogo.jpg' # # logo_url = 'chlogo.jpg'
# fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
# un-comment the following six lines for the Edmonton Journal # un-comment the following six lines for the Edmonton Journal
# title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg' # # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
# logo_url = 'ejlogo.jpg' # # logo_url = 'ejlogo.jpg'
# fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
# un-comment the following six lines for the Ottawa Citizen # un-comment the following six lines for the Ottawa Citizen
# title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg' # # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
# logo_url = 'oclogo.jpg' # # logo_url = 'oclogo.jpg'
# fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
# un-comment the following six lines for the Montreal Gazette # un-comment the following six lines for the Montreal Gazette
title = u'Montreal Gazette' title = u'Montreal Gazette'

View File

@ -60,36 +60,36 @@ class CanWestPaper(BasicNewsRecipe):
] ]
# un-comment the following six lines for the Vancouver Province # un-comment the following six lines for the Vancouver Province
# title = u'Vancouver Province' # # title = u'Vancouver Province'
# url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg' # # std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
# logo_url = 'vplogo.jpg' # # logo_url = 'vplogo.jpg'
# fp_tag = 'CAN_TP' # # fp_tag = 'CAN_TP'
# un-comment the following six lines for the Vancouver Sun # un-comment the following six lines for the Vancouver Sun
# title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg' # # std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
# logo_url = 'vslogo.jpg' # # logo_url = 'vslogo.jpg'
# fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
# un-comment the following six lines for the Calgary Herald # un-comment the following six lines for the Calgary Herald
# title = u'Calgary Herald' # # title = u'Calgary Herald'
# url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg' # # std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
# logo_url = 'chlogo.jpg' # # logo_url = 'chlogo.jpg'
# fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
# un-comment the following six lines for the Edmonton Journal # un-comment the following six lines for the Edmonton Journal
# title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg' # # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
# logo_url = 'ejlogo.jpg' # # logo_url = 'ejlogo.jpg'
# fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
# un-comment the following six lines for the Ottawa Citizen # un-comment the following six lines for the Ottawa Citizen
title = u'Ottawa Citizen' title = u'Ottawa Citizen'
@ -100,12 +100,12 @@ class CanWestPaper(BasicNewsRecipe):
fp_tag = 'CAN_OC' fp_tag = 'CAN_OC'
# un-comment the following six lines for the Montreal Gazette # un-comment the following six lines for the Montreal Gazette
# title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg' # # std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
# logo_url = 'mglogo.jpg' # # logo_url = 'mglogo.jpg'
# fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
Kindle_Fire = False Kindle_Fire = False
masthead_url = std_logo_url masthead_url = std_logo_url

View File

@ -50,5 +50,5 @@ class AdvancedUserRecipe1303841067(BasicNewsRecipe):
feeds = [ feeds = [
(u'Nachrichten', u'https://pro-physik.de/rss/news/'), (u'Nachrichten', u'https://pro-physik.de/rss/news/'),
# (u'Veranstaltungen', u'https://pro-physik.de/rss/events/'), # AGe 2024-02-11 # (u'Veranstaltungen', u'https://pro-physik.de/rss/events/'), # AGe 2024-02-11
] ]

View File

@ -31,7 +31,7 @@ class ProSleduet(BasicNewsRecipe):
] ]
feeds = [ feeds = [
# ('\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442', 'https://prosleduet.media/feed/'), # ('\u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0435\u043D\u0438\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442', 'https://prosleduet.media/feed/'),
('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://prosleduet.media/category/news/feed/'), ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', 'https://prosleduet.media/category/news/feed/'),
('\u041B\u044E\u0434\u0438', 'https://prosleduet.media/category/people/feed/'), ('\u041B\u044E\u0434\u0438', 'https://prosleduet.media/category/people/feed/'),
('\u0421\u044E\u0436\u0435\u0442\u044B', 'https://prosleduet.media/category/syuzhety/feed/'), ('\u0421\u044E\u0436\u0435\u0442\u044B', 'https://prosleduet.media/category/syuzhety/feed/'),

View File

@ -19,61 +19,61 @@ class CanWestPaper(BasicNewsRecipe):
# # url_prefix = 'http://www.timescolonist.com' # # url_prefix = 'http://www.timescolonist.com'
# # description = u'News from Victoria, BC' # # description = u'News from Victoria, BC'
# # fp_tag = 'CAN_TC' # # fp_tag = 'CAN_TC'
#
# un-comment the following four lines for the Vancouver Province # un-comment the following four lines for the Vancouver Province
# # title = u'Vancouver Province' # # title = u'Vancouver Province'
# # url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# # description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# # fp_tag = 'CAN_VP' # # fp_tag = 'CAN_VP'
#
# un-comment the following four lines for the Vancouver Sun # un-comment the following four lines for the Vancouver Sun
# # title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# # url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# # description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# # fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
#
# un-comment the following four lines for the Edmonton Journal # un-comment the following four lines for the Edmonton Journal
# # title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# # url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# # description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# # fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
#
# un-comment the following four lines for the Calgary Herald # un-comment the following four lines for the Calgary Herald
# # title = u'Calgary Herald' # # title = u'Calgary Herald'
# # url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# # description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# # fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
#
# un-comment the following four lines for the Regina Leader-Post # un-comment the following four lines for the Regina Leader-Post
title = u'Regina Leader-Post' title = u'Regina Leader-Post'
url_prefix = 'http://www.leaderpost.com' url_prefix = 'http://www.leaderpost.com'
description = u'News from Regina, SK' description = u'News from Regina, SK'
fp_tag = '' fp_tag = ''
# un-comment the following four lines for the Saskatoon Star-Phoenix # un-comment the following four lines for the Saskatoon Star-Phoenix
# # title = u'Saskatoon Star-Phoenix' # # title = u'Saskatoon Star-Phoenix'
# # url_prefix = 'http://www.thestarphoenix.com' # # url_prefix = 'http://www.thestarphoenix.com'
# # description = u'News from Saskatoon, SK' # # description = u'News from Saskatoon, SK'
# # fp_tag = '' # # fp_tag = ''
#
# un-comment the following four lines for the Windsor Star # un-comment the following four lines for the Windsor Star
# # title = u'Windsor Star' # # title = u'Windsor Star'
# # url_prefix = 'http://www.windsorstar.com' # # url_prefix = 'http://www.windsorstar.com'
# # description = u'News from Windsor, ON' # # description = u'News from Windsor, ON'
# # fp_tag = 'CAN_' # # fp_tag = 'CAN_'
#
# un-comment the following four lines for the Ottawa Citizen # un-comment the following four lines for the Ottawa Citizen
# # title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# # url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# # description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# # fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
#
# un-comment the following four lines for the Montreal Gazette # un-comment the following four lines for the Montreal Gazette
# # title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# # url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# # description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# # fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
#
language = 'en_CA' language = 'en_CA'
__author__ = 'Nick Redding' __author__ = 'Nick Redding'
no_stylesheets = True no_stylesheets = True

View File

@ -48,7 +48,7 @@ class Salon_com(BasicNewsRecipe):
# ('Sustainability', 'http://www.salon.com/category/sustainability/feed/rss/'), # ('Sustainability', 'http://www.salon.com/category/sustainability/feed/rss/'),
# ('Entertainment', 'http://www.salon.com/category/entertainment/feed/rss/'), # ('Entertainment', 'http://www.salon.com/category/entertainment/feed/rss/'),
# ('Life', 'http://www.salon.com/category/life/feed/rss/'), # ('Life', 'http://www.salon.com/category/life/feed/rss/'),
#
('News and Politics', 'https://www.salon.com/category/news-and-politics/feed'), ('News and Politics', 'https://www.salon.com/category/news-and-politics/feed'),
('Culture', 'http://www.salon.com/category/culture/feed/'), ('Culture', 'http://www.salon.com/category/culture/feed/'),
('Science & Health', 'https://www.salon.com/category/science-and-health/feed/'), ('Science & Health', 'https://www.salon.com/category/science-and-health/feed/'),

View File

@ -19,60 +19,60 @@ class CanWestPaper(BasicNewsRecipe):
# # url_prefix = 'http://www.timescolonist.com' # # url_prefix = 'http://www.timescolonist.com'
# # description = u'News from Victoria, BC' # # description = u'News from Victoria, BC'
# # fp_tag = 'CAN_TC' # # fp_tag = 'CAN_TC'
#
# un-comment the following four lines for the Vancouver Province # un-comment the following four lines for the Vancouver Province
# # title = u'Vancouver Province' # # title = u'Vancouver Province'
# # url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# # description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# # fp_tag = 'CAN_VP' # # fp_tag = 'CAN_VP'
#
# un-comment the following four lines for the Vancouver Sun # un-comment the following four lines for the Vancouver Sun
# # title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# # url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# # description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# # fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
#
# un-comment the following four lines for the Edmonton Journal # un-comment the following four lines for the Edmonton Journal
# # title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# # url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# # description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# # fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
#
# un-comment the following four lines for the Calgary Herald # un-comment the following four lines for the Calgary Herald
# # title = u'Calgary Herald' # # title = u'Calgary Herald'
# # url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# # description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# # fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
#
# un-comment the following four lines for the Regina Leader-Post # un-comment the following four lines for the Regina Leader-Post
# # title = u'Regina Leader-Post' # # title = u'Regina Leader-Post'
# # url_prefix = 'http://www.leaderpost.com' # # url_prefix = 'http://www.leaderpost.com'
# # description = u'News from Regina, SK' # # description = u'News from Regina, SK'
# # fp_tag = '' # # fp_tag = ''
#
# un-comment the following four lines for the Saskatoon Star-Phoenix # un-comment the following four lines for the Saskatoon Star-Phoenix
title = u'Saskatoon Star-Phoenix' title = u'Saskatoon Star-Phoenix'
url_prefix = 'http://www.thestarphoenix.com' url_prefix = 'http://www.thestarphoenix.com'
description = u'News from Saskatoon, SK' description = u'News from Saskatoon, SK'
fp_tag = '' fp_tag = ''
# un-comment the following four lines for the Windsor Star # un-comment the following four lines for the Windsor Star
# # title = u'Windsor Star' # # title = u'Windsor Star'
# # url_prefix = 'http://www.windsorstar.com' # # url_prefix = 'http://www.windsorstar.com'
# # description = u'News from Windsor, ON' # # description = u'News from Windsor, ON'
# # fp_tag = 'CAN_' # # fp_tag = 'CAN_'
#
# un-comment the following four lines for the Ottawa Citizen # un-comment the following four lines for the Ottawa Citizen
# # title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# # url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# # description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# # fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
#
# un-comment the following four lines for the Montreal Gazette # un-comment the following four lines for the Montreal Gazette
# # title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# # url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# # description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# # fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
language = 'en_CA' language = 'en_CA'
__author__ = 'Nick Redding' __author__ = 'Nick Redding'

View File

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

View File

@ -12,13 +12,13 @@ class TInvariant(BasicNewsRecipe):
description = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.' # noqa: E501 description = '\u041C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0439\u043D\u044B\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443\u0447\u0435\u043D\u044B\u0445 \u0438 \u043D\u0430\u0443\u0447\u043D\u044B\u0445 \u0436\u0443\u0440\u043D\u0430\u043B\u0438\u0441\u0442\u043E\u0432.' # noqa: E501
publisher = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant' publisher = '\u0422-\u0438\u043D\u0432\u0430\u0440\u0438\u0430\u043D\u0442 / T-invariant'
category = 'news' category = 'news'
# cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png' # cover_url = u'https://t-invariant.org/wp-content/uploads/2023/02/logo-s.png'
cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png' cover_url = u'https://tinyurl.com/t-invariant/wp-content/uploads/2023/02/logo-s.png'
language = 'ru' language = 'ru'
# language = 'en_RU' # language = 'en_RU'
# language = 'uk' # language = 'uk'
# language = 'de' # language = 'de'
# language = 'he' # language = 'he'
no_stylesheets = False no_stylesheets = False
remove_javascript = False remove_javascript = False
auto_cleanup = False auto_cleanup = False
@ -38,59 +38,55 @@ class TInvariant(BasicNewsRecipe):
] ]
feeds = [ feeds = [
# Russian version # Russian version
# # Direct links
# Direct links # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', https://www.t-invariant.org/feed/'),
# # ('\u0410\u0440\u0445\u0438\u0432', https://www.t-invariant.org/category/online/feed/'),
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', https://www.t-invariant.org/feed/'), # ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', https://www.t-invariant.org/category/astronomy/feed/'),
# ('\u0410\u0440\u0445\u0438\u0432', https://www.t-invariant.org/category/online/feed/'), # ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/biologiya/feed/'),
# ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', https://www.t-invariant.org/category/astronomy/feed/'), # ('\u0412\u043E\u0439\u043D\u0430', https://www.t-invariant.org/category/war/feed/'),
# ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/biologiya/feed/'), # ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', https://www.t-invariant.org/category/vsyo-slozhno/feed/'),
# ('\u0412\u043E\u0439\u043D\u0430', https://www.t-invariant.org/category/war/feed/'), # ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', https://www.t-invariant.org/category/dva-goda-vojne/feed/'),
# ('\u0412\u0441\u0451 \u0441\u043B\u043E\u0436\u043D\u043E', https://www.t-invariant.org/category/vsyo-slozhno/feed/'), # ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'),
# ('\u0414\u0432\u0430 \u0433\u043E\u0434\u0430 \u0432\u043E\u0439\u043D\u0435', https://www.t-invariant.org/category/dva-goda-vojne/feed/'), # ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', https://www.t-invariant.org/category/discussion/feed/'),
# ('\u0414\u0432\u0435 \u0441\u0442\u043E\u0440\u043E\u043D\u044B \u043E\u0434\u043D\u043E\u0439 \u043D\u0430\u0443\u043A\u0438', https://www.t-invariant.org/category/dve-storony-odnoj-nauki/feed/'), # ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', https://www.t-invariant.org/category/dissernet/feed/'),
# ('\u0414\u0438\u0441\u043A\u0443\u0441\u0441\u0438\u0438', https://www.t-invariant.org/category/discussion/feed/'), # ('\u0418\u0418', https://www.t-invariant.org/category/ai/feed/'),
# ('\u0414\u0438\u0441\u0441\u0435\u0440\u043D\u0435\u0442', https://www.t-invariant.org/category/dissernet/feed/'), # ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/computer-science/feed/'),
# ('\u0418\u0418', https://www.t-invariant.org/category/ai/feed/'), # ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', https://www.t-invariant.org/category/history/feed/'),
# ('\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/computer-science/feed/'), # ('\u041A\u043B\u0438\u043C\u0430\u0442', https://www.t-invariant.org/category/climate-ru/feed/'),
# ('\u0418\u0441\u0442\u043E\u0440\u0438\u044F', https://www.t-invariant.org/category/history/feed/'), # ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', https://www.t-invariant.org/category/kontrevolyutsiya/feed/'),
# ('\u041A\u043B\u0438\u043C\u0430\u0442', https://www.t-invariant.org/category/climate-ru/feed/'), # ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', https://www.t-invariant.org/category/korruptsiya/feed/'),
# ('\u041A\u043E\u043D\u0442\u0440\u044D\u0432\u043E\u043B\u044E\u0446\u0438\u044F', https://www.t-invariant.org/category/kontrevolyutsiya/feed/'), # ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', https://www.t-invariant.org/category/pseudoscience/feed/'),
# ('\u041A\u043E\u0440\u0440\u0443\u043F\u0446\u0438\u044F', https://www.t-invariant.org/category/korruptsiya/feed/'), # ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/mathematics/feed/'),
# ('\u041B\u0436\u0435\u043D\u0430\u0443\u043A\u0430', https://www.t-invariant.org/category/pseudoscience/feed/'), # ('\u041C\u043E\u0437\u0433', https://www.t-invariant.org/category/brain/feed/'),
# ('\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/mathematics/feed/'), # ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', https://www.t-invariant.org/category/ukrainian-science/feed/'),
# ('\u041C\u043E\u0437\u0433', https://www.t-invariant.org/category/brain/feed/'), # ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/science-policy-ru/feed/'),
# ('\u041D\u0430\u0443\u043A\u0430 \u0432 \u0423\u043A\u0440\u0430\u0438\u043D\u0435', https://www.t-invariant.org/category/ukrainian-science/feed/'), # ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', https://www.t-invariant.org/category/news/feed/'),
# ('\u041D\u0430\u0443\u0447\u043D\u0430\u044F \u043F\u043E\u043B\u0438\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/science-policy-ru/feed/'), # ('\u041E\u043F\u0440\u043E\u0441', https://www.t-invariant.org/category/survey-ru/feed/'),
# ('\u041D\u043E\u0432\u043E\u0441\u0442\u0438', https://www.t-invariant.org/category/news/feed/'), # ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', https://www.t-invariant.org/category/standpiont/feed/'),
# ('\u041E\u043F\u0440\u043E\u0441', https://www.t-invariant.org/category/survey-ru/feed/'), # ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/political-science/feed/'),
# ('\u041F\u043E\u0437\u0438\u0446\u0438\u044F', https://www.t-invariant.org/category/standpiont/feed/'), # ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', https://www.t-invariant.org/category/popular-science/feed/'),
# ('\u041F\u043E\u043B\u0438\u0442\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/political-science/feed/'), # ('\u041F\u0440\u0430\u0432\u043E', https://www.t-invariant.org/category/pravo/feed/'),
# ('\u041F\u043E\u043F\u0443\u043B\u044F\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u043D\u0430\u0443\u043A\u0438', https://www.t-invariant.org/category/popular-science/feed/'), # ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', https://www.t-invariant.org/category/progress/feed/'),
# ('\u041F\u0440\u0430\u0432\u043E', https://www.t-invariant.org/category/pravo/feed/'), # ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/psihologiya/feed/'),
# ('\u041F\u0440\u043E\u0433\u0440\u0435\u0441\u0441', https://www.t-invariant.org/category/progress/feed/'), # ('\u0420\u0410\u041D', https://www.t-invariant.org/category/ras/feed/'),
# ('\u041F\u0441\u0438\u0445\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/psihologiya/feed/'), # ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', https://www.t-invariant.org/category/religion/feed/'),
# ('\u0420\u0410\u041D', https://www.t-invariant.org/category/ras/feed/'), # ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', https://www.t-invariant.org/category/relocation/feed/'),
# ('\u0420\u0435\u043B\u0438\u0433\u0438\u044F', https://www.t-invariant.org/category/religion/feed/'), # ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', https://www.t-invariant.org/category/repression/feed/'),
# ('\u0420\u0435\u043B\u043E\u043A\u0430\u0446\u0438\u044F', https://www.t-invariant.org/category/relocation/feed/'), # ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', https://www.t-invariant.org/category/russian-language/feed/'),
# ('\u0420\u0435\u043F\u0440\u0435\u0441\u0441\u0438\u0438', https://www.t-invariant.org/category/repression/feed/'), # ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', https://www.t-invariant.org/category/sanctions/feed/'),
# ('\u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A', https://www.t-invariant.org/category/russian-language/feed/'), # ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', https://www.t-invariant.org/category/creators/feed/'),
# ('\u0421\u0430\u043D\u043A\u0446\u0438\u0438', https://www.t-invariant.org/category/sanctions/feed/'), # ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/sociology/feed/'),
# ('\u0421\u043E\u0437\u0434\u0430\u0442\u0435\u043B\u0438', https://www.t-invariant.org/category/creators/feed/'), # ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', https://www.t-invariant.org/category/terrorizm/feed/'),
# ('\u0421\u043E\u0446\u0438\u043E\u043B\u043E\u0433\u0438\u044F', https://www.t-invariant.org/category/sociology/feed/'), # ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', https://www.t-invariant.org/category/universities/feed/'),
# ('\u0422\u0435\u0440\u0440\u043E\u0440\u0438\u0437\u043C', https://www.t-invariant.org/category/terrorizm/feed/'), # ('\u0424\u0438\u0437\u0438\u043A\u0430', https://www.t-invariant.org/category/physics/feed/'),
# ('\u0423\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u044B', https://www.t-invariant.org/category/universities/feed/'), # ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', https://www.t-invariant.org/category/philosophy/feed/'),
# ('\u0424\u0438\u0437\u0438\u043A\u0430', https://www.t-invariant.org/category/physics/feed/'), # ('\u0428\u043A\u043E\u043B\u0430', https://www.t-invariant.org/category/shkola/feed/'),
# ('\u0424\u0438\u043B\u043E\u0441\u043E\u0444\u0438\u044F', https://www.t-invariant.org/category/philosophy/feed/'), # ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', https://www.t-invariant.org/category/science-assessment/feed/'),
# ('\u0428\u043A\u043E\u043B\u0430', https://www.t-invariant.org/category/shkola/feed/'), # ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/energy/feed/'),
# ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', https://www.t-invariant.org/category/science-assessment/feed/'), # ('\u042D\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/ethics/feed/'),
# ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/energy/feed/'), # Censorship bypass
# ('\u042D\u0442\u0438\u043A\u0430', https://www.t-invariant.org/category/ethics/feed/'), # ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
#
# Censorship bypass
#
# ('\u0412\u0441\u0435 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B\u044B', 'https://tinyurl.com/t-invariant/feed/'),
('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'), ('\u0410\u0440\u0445\u0438\u0432', 'https://tinyurl.com/t-invariant/category/online/feed/'),
('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'), ('\u0410\u0441\u0442\u0440\u043E\u043D\u043E\u043C\u0438\u044F', 'https://tinyurl.com/t-invariant/category/astronomy/feed/'),
('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'), ('\u0411\u0438\u043E\u043B\u043E\u0433\u0438\u044F', 'https://tinyurl.com/t-invariant/category/biologiya/feed/'),
@ -137,37 +133,24 @@ class TInvariant(BasicNewsRecipe):
('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'), ('\u042D\u043A\u0441\u043F\u0435\u0440\u0442\u0438\u0437\u0430 \u043D\u0430\u0443\u043A\u0438', 'https://tinyurl.com/t-invariant/category/science-assessment/feed/'),
('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'), ('\u042D\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/energy/feed/'),
('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'), ('\u042D\u0442\u0438\u043A\u0430', 'https://tinyurl.com/t-invariant/category/ethics/feed/'),
#
# English version # English version
# # ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'),
# ('T-invariant (English)', 'https://www.t-invariant.org/en/feed/'), # Censorship bypass
# # ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'),
# Censorship bypass
# # Ukrainian version
# ('T-invariant (English)', 'https://tinyurl.com/t-invariant/en/feed/'), # ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'),
# # Censorship bypass
# Ukrainian version # ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
#
# ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://www.t-invariant.org/uk/feed/'), # German version
# # ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'),
# Censorship bypass # Censorship bypass
# # ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
# ('T-invariant (\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430)', 'https://tinyurl.com/t-invariant/uk/feed/'),
# # Hebrew version
# German version # ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
# # Censorship bypass
# ('T-invariant (Deutsch)', 'https://www.t-invariant.org/de/feed/'), # ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
# Censorship bypass
#
# ('T-invariant (Deutsch)', 'https://tinyurl.com/t-invariant/de/feed/'),
#
# Hebrew version
#
# ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://www.t-invariant.org/he/feed/'),
#
# Censorship bypass
#
# ('T-invariant (\u05E2\u05D1\u05E8\u05D9\u05EA)', 'https://tinyurl.com/t-invariant/he/feed/'),
#
] ]

View File

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

View File

@ -90,7 +90,7 @@ class PrivateEyeRecipe(BasicNewsRecipe):
# oldie links/headings often contain the author (in one of various formats # oldie links/headings often contain the author (in one of various formats
# 1. Title. By author # 1. Title. By author
# .2. Title by author: subtitle # 2. Title by author: subtitle
# 3. Title: author: subtitle # 3. Title: author: subtitle
title_author_re = re.compile(r'^(.*?)(?:(?: by )|(?:: ))(.*?): (.*?)$') title_author_re = re.compile(r'^(.*?)(?:(?: by )|(?:: ))(.*?): (.*?)$')

View File

@ -40,14 +40,14 @@ class UAFootball(BasicNewsRecipe):
remove_tags_after = dict(name='div', attrs={'class': 'show-post'}) remove_tags_after = dict(name='div', attrs={'class': 'show-post'})
remove_tags = [ remove_tags = [
dict(name='form'), dict(name='form'),
dict(name='iframe'), dict(name='iframe'),
dict(name='div', attrs={'class': 'language'}), dict(name='div', attrs={'class': 'language'}),
dict(name='div', attrs={'class': 'article__read-also'}), dict(name='div', attrs={'class': 'article__read-also'}),
dict(name='div', attrs={'class': 'card-player'}), dict(name='div', attrs={'class': 'card-player'}),
dict(name='div', attrs={'class': 'show-post-socials'}) dict(name='div', attrs={'class': 'show-post-socials'})
] ]
# Replacing articles in Ukraininan for RU-feed # Replacing articles in Ukraininan for RU-feed
# def print_version(self, url): # def print_version(self, url):
# return url.replace('ua-football.com/ua/', 'ua-football.com/') # return url.replace('ua-football.com/ua/', 'ua-football.com/')

View File

@ -68,44 +68,44 @@ class CanWestPaper(BasicNewsRecipe):
fp_tag = 'CAN_TP' fp_tag = 'CAN_TP'
# un-comment the following six lines for the Vancouver Sun # un-comment the following six lines for the Vancouver Sun
# title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg' # # std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
# logo_url = 'vslogo.jpg' # # logo_url = 'vslogo.jpg'
# fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
# un-comment the following six lines for the Calgary Herald # un-comment the following six lines for the Calgary Herald
# # title = u'Calgary Herald' # # title = u'Calgary Herald'
# # url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# # description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# # std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg' # # std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
# # logo_url = 'chlogo.jpg' # # logo_url = 'chlogo.jpg'
# # fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
#
# un-comment the following six lines for the Edmonton Journal # un-comment the following six lines for the Edmonton Journal
# # title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# # url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# # description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg' # # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
# # logo_url = 'ejlogo.jpg' # # logo_url = 'ejlogo.jpg'
# # fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
#
# un-comment the following six lines for the Ottawa Citizen # un-comment the following six lines for the Ottawa Citizen
# # title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# # url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# # description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg' # # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
# # logo_url = 'oclogo.jpg' # # logo_url = 'oclogo.jpg'
# # fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
#
# un-comment the following six lines for the Montreal Gazette # un-comment the following six lines for the Montreal Gazette
# # title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# # url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# # description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# # std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg' # # std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
# # logo_url = 'mglogo.jpg' # # logo_url = 'mglogo.jpg'
# # fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
Kindle_Fire = False Kindle_Fire = False
masthead_url = std_logo_url masthead_url = std_logo_url

View File

@ -61,12 +61,12 @@ class CanWestPaper(BasicNewsRecipe):
] ]
# un-comment the following six lines for the Vancouver Province # un-comment the following six lines for the Vancouver Province
# title = u'Vancouver Province' # # title = u'Vancouver Province'
# url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg' # # std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
# logo_url = 'vplogo.jpg' # # logo_url = 'vplogo.jpg'
# fp_tag = 'CAN_TP' # # fp_tag = 'CAN_TP'
# un-comment the following six lines for the Vancouver Sun # un-comment the following six lines for the Vancouver Sun
title = u'Vancouver Sun' title = u'Vancouver Sun'
@ -77,36 +77,36 @@ class CanWestPaper(BasicNewsRecipe):
fp_tag = 'CAN_VS' fp_tag = 'CAN_VS'
# un-comment the following six lines for the Calgary Herald # un-comment the following six lines for the Calgary Herald
# title = u'Calgary Herald' # # title = u'Calgary Herald'
# url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg' # # std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
# logo_url = 'chlogo.jpg' # # logo_url = 'chlogo.jpg'
# fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
# un-comment the following six lines for the Edmonton Journal # un-comment the following six lines for the Edmonton Journal
# title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg' # # std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
# logo_url = 'ejlogo.jpg' # # logo_url = 'ejlogo.jpg'
# fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
# un-comment the following six lines for the Ottawa Citizen # un-comment the following six lines for the Ottawa Citizen
# title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg' # # std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
# logo_url = 'oclogo.jpg' # # logo_url = 'oclogo.jpg'
# fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
# un-comment the following six lines for the Montreal Gazette # un-comment the following six lines for the Montreal Gazette
# title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg' # # std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
# logo_url = 'mglogo.jpg' # # logo_url = 'mglogo.jpg'
# fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
Kindle_Fire = False Kindle_Fire = False
masthead_url = std_logo_url masthead_url = std_logo_url

View File

@ -25,12 +25,12 @@ class WiComix(BasicNewsRecipe):
remove_tags_after = dict(name='article') remove_tags_after = dict(name='article')
remove_tags = [ remove_tags = [
# dict(name='div', attrs={'class': 'author-meta'}), # dict(name='div', attrs={'class': 'author-meta'}),
dict(name='div', attrs={'id': 'jp-post-flair'}), dict(name='div', attrs={'id': 'jp-post-flair'}),
dict(name='footer', attrs={'class': 'entry-meta'}) dict(name='footer', attrs={'class': 'entry-meta'})
] ]
feeds = [ feeds = [
('\u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438', 'https://wicomix.com/feed/') ('\u041F\u0443\u0431\u043B\u0438\u043A\u0430\u0446\u0438\u0438', 'https://wicomix.com/feed/')
# ('\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438', 'https://wicomix.com/comments/feed/') # ('\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438', 'https://wicomix.com/comments/feed/')
] ]

View File

@ -17,14 +17,14 @@ class CanWestPaper(BasicNewsRecipe):
description = u'News from Windsor, ON' description = u'News from Windsor, ON'
# un-comment the following three lines for the Ottawa Citizen # un-comment the following three lines for the Ottawa Citizen
# title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
#
# un-comment the following three lines for the Montreal Gazette # un-comment the following three lines for the Montreal Gazette
# title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
language = 'en_CA' language = 'en_CA'
__author__ = 'Nick Redding' __author__ = 'Nick Redding'

View File

@ -15,46 +15,46 @@ from calibre.web.feeds.news import BasicNewsRecipe
class CanWestPaper(BasicNewsRecipe): class CanWestPaper(BasicNewsRecipe):
# un-comment the following four lines for the Victoria Times Colonist # un-comment the following four lines for the Victoria Times Colonist
# title = u'Victoria Times Colonist' # # title = u'Victoria Times Colonist'
# url_prefix = 'http://www.timescolonist.com' # # url_prefix = 'http://www.timescolonist.com'
# description = u'News from Victoria, BC' # # description = u'News from Victoria, BC'
# fp_tag = 'CAN_TC' # # fp_tag = 'CAN_TC'
# un-comment the following four lines for the Vancouver Province # un-comment the following four lines for the Vancouver Province
# title = u'Vancouver Province' # # title = u'Vancouver Province'
# url_prefix = 'http://www.theprovince.com' # # url_prefix = 'http://www.theprovince.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# fp_tag = 'CAN_VP' # # fp_tag = 'CAN_VP'
# un-comment the following four lines for the Vancouver Sun # un-comment the following four lines for the Vancouver Sun
# title = u'Vancouver Sun' # # title = u'Vancouver Sun'
# url_prefix = 'http://www.vancouversun.com' # # url_prefix = 'http://www.vancouversun.com'
# description = u'News from Vancouver, BC' # # description = u'News from Vancouver, BC'
# fp_tag = 'CAN_VS' # # fp_tag = 'CAN_VS'
# un-comment the following four lines for the Edmonton Journal # un-comment the following four lines for the Edmonton Journal
# title = u'Edmonton Journal' # # title = u'Edmonton Journal'
# url_prefix = 'http://www.edmontonjournal.com' # # url_prefix = 'http://www.edmontonjournal.com'
# description = u'News from Edmonton, AB' # # description = u'News from Edmonton, AB'
# fp_tag = 'CAN_EJ' # # fp_tag = 'CAN_EJ'
# un-comment the following four lines for the Calgary Herald # un-comment the following four lines for the Calgary Herald
# title = u'Calgary Herald' # # title = u'Calgary Herald'
# url_prefix = 'http://www.calgaryherald.com' # # url_prefix = 'http://www.calgaryherald.com'
# description = u'News from Calgary, AB' # # description = u'News from Calgary, AB'
# fp_tag = 'CAN_CH' # # fp_tag = 'CAN_CH'
# un-comment the following four lines for the Regina Leader-Post # un-comment the following four lines for the Regina Leader-Post
# title = u'Regina Leader-Post' # # title = u'Regina Leader-Post'
# url_prefix = 'http://www.leaderpost.com' # # url_prefix = 'http://www.leaderpost.com'
# description = u'News from Regina, SK' # # description = u'News from Regina, SK'
# fp_tag = '' # # fp_tag = ''
# un-comment the following four lines for the Saskatoon Star-Phoenix # un-comment the following four lines for the Saskatoon Star-Phoenix
# title = u'Saskatoon Star-Phoenix' # # title = u'Saskatoon Star-Phoenix'
# url_prefix = 'http://www.thestarphoenix.com' # # url_prefix = 'http://www.thestarphoenix.com'
# description = u'News from Saskatoon, SK' # # description = u'News from Saskatoon, SK'
# fp_tag = '' # # fp_tag = ''
# un-comment the following four lines for the Windsor Star # un-comment the following four lines for the Windsor Star
title = u'Windsor Star' title = u'Windsor Star'
@ -63,16 +63,16 @@ class CanWestPaper(BasicNewsRecipe):
fp_tag = 'CAN_' fp_tag = 'CAN_'
# un-comment the following four lines for the Ottawa Citizen # un-comment the following four lines for the Ottawa Citizen
# title = u'Ottawa Citizen' # # title = u'Ottawa Citizen'
# url_prefix = 'http://www.ottawacitizen.com' # # url_prefix = 'http://www.ottawacitizen.com'
# description = u'News from Ottawa, ON' # # description = u'News from Ottawa, ON'
# fp_tag = 'CAN_OC' # # fp_tag = 'CAN_OC'
# un-comment the following four lines for the Montreal Gazette # un-comment the following four lines for the Montreal Gazette
# title = u'Montreal Gazette' # # title = u'Montreal Gazette'
# url_prefix = 'http://www.montrealgazette.com' # # url_prefix = 'http://www.montrealgazette.com'
# description = u'News from Montreal, QC' # # description = u'News from Montreal, QC'
# fp_tag = 'CAN_MG' # # fp_tag = 'CAN_MG'
language = 'en_CA' language = 'en_CA'
__author__ = 'Nick Redding' __author__ = 'Nick Redding'

View File

@ -18,7 +18,7 @@ class ZAOBAO(BasicNewsRecipe):
language = 'zh' language = 'zh'
encoding = 'gbk' encoding = 'gbk'
masthead_url = 'http://www.zaobao.com/ssi/images1/zblogo_original.gif' masthead_url = 'http://www.zaobao.com/ssi/images1/zblogo_original.gif'
# multithreaded_fetch = True # multithreaded_fetch = True
keep_only_tags = [ keep_only_tags = [
dict(name='td', attrs={'class': 'text'}), dict(name='td', attrs={'class': 'text'}),

View File

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

View File

@ -221,10 +221,10 @@ per_language_title_sort_articles = {
'epo': (r'La\s+', r"L'", 'L´'), 'epo': (r'La\s+', r"L'", 'L´'),
# Spanish # Spanish
'spa': (r'El\s+', r'La\s+', r'Lo\s+', r'Los\s+', r'Las\s+', r'Un\s+', 'spa': (r'El\s+', r'La\s+', r'Lo\s+', r'Los\s+', r'Las\s+', r'Un\s+',
r'Una\s+', r'Unos\s+', r'Unas\s+'), r'Una\s+', r'Unos\s+', r'Unas\s+'),
# French # French
'fra': (r'Le\s+', r'La\s+', r"L'", r'L´', r'L', r'Les\s+', r'Un\s+', r'Une\s+', 'fra': (r'Le\s+', r'La\s+', r"L'", r'L´', r'L', r'Les\s+', r'Un\s+', r'Une\s+',
r'Des\s+', r'De\s+La\s+', r'De\s+', r"D'", r'D´', r'D'), r'Des\s+', r'De\s+La\s+', r'De\s+', r"D'", r'D´', r'D'),
# Polish # Polish
'pol': (), 'pol': (),
# Italian # Italian
@ -234,17 +234,17 @@ per_language_title_sort_articles = {
r'Della\s+', r'Dello\s+', r"Dell'", r'Dell´'), r'Della\s+', r'Dello\s+', r"Dell'", r'Dell´'),
# Portuguese # Portuguese
'por': (r'A\s+', r'O\s+', r'Os\s+', r'As\s+', r'Um\s+', r'Uns\s+', 'por': (r'A\s+', r'O\s+', r'Os\s+', r'As\s+', r'Um\s+', r'Uns\s+',
r'Uma\s+', r'Umas\s+'), r'Uma\s+', r'Umas\s+'),
# Romanian # Romanian
'ron': (r'Un\s+', r'O\s+', r'Nişte\s+'), 'ron': (r'Un\s+', r'O\s+', r'Nişte\s+'),
# German # German
'deu': (r'Der\s+', r'Die\s+', r'Das\s+', r'Den\s+', r'Ein\s+', 'deu': (r'Der\s+', r'Die\s+', r'Das\s+', r'Den\s+', r'Ein\s+',
r'Eine\s+', r'Einen\s+', r'Dem\s+', r'Des\s+', r'Einem\s+', r'Eine\s+', r'Einen\s+', r'Dem\s+', r'Des\s+', r'Einem\s+',
r'Eines\s+'), r'Eines\s+'),
# Dutch # Dutch
'nld': (r'De\s+', r'Het\s+', r'Een\s+', r"'n\s+", r"'s\s+", r'Ene\s+', 'nld': (r'De\s+', r'Het\s+', r'Een\s+', r"'n\s+", r"'s\s+", r'Ene\s+',
r'Ener\s+', r'Enes\s+', r'Den\s+', r'Der\s+', r'Des\s+', r'Ener\s+', r'Enes\s+', r'Den\s+', r'Der\s+', r'Des\s+',
r"'t\s+"), r"'t\s+"),
# Swedish # Swedish
'swe': (r'En\s+', r'Ett\s+', r'Det\s+', r'Den\s+', r'De\s+'), 'swe': (r'En\s+', r'Ett\s+', r'Det\s+', r'Den\s+', r'De\s+'),
# Turkish # Turkish
@ -253,7 +253,7 @@ per_language_title_sort_articles = {
'afr': (r"'n\s+", r'Die\s+'), 'afr': (r"'n\s+", r'Die\s+'),
# Greek # Greek
'ell': (r'O\s+', r'I\s+', r'To\s+', r'Ta\s+', r'Tus\s+', r'Tis\s+', 'ell': (r'O\s+', r'I\s+', r'To\s+', r'Ta\s+', r'Tus\s+', r'Tis\s+',
r"'Enas\s+", r"'Mia\s+", r"'Ena\s+", r"'Enan\s+"), r"'Enas\s+", r"'Mia\s+", r"'Ena\s+", r"'Enan\s+"),
# Hungarian # Hungarian
'hun': (r'A\s+', r'Az\s+', r'Egy\s+'), 'hun': (r'A\s+', r'Az\s+', r'Egy\s+'),
} }

View File

@ -73,21 +73,21 @@ class SHLock: # {{{
def __init__(self): def __init__(self):
self._lock = Lock() self._lock = Lock()
# When a shared lock is held, is_shared will give the cumulative # When a shared lock is held, is_shared will give the cumulative
# number of locks and _shared_owners maps each owning thread to # number of locks and _shared_owners maps each owning thread to
# the number of locks is holds. # the number of locks is holds.
self.is_shared = 0 self.is_shared = 0
self._shared_owners = {} self._shared_owners = {}
# When an exclusive lock is held, is_exclusive will give the number # When an exclusive lock is held, is_exclusive will give the number
# of locks held and _exclusive_owner will give the owning thread # of locks held and _exclusive_owner will give the owning thread
self.is_exclusive = 0 self.is_exclusive = 0
self._exclusive_owner = None self._exclusive_owner = None
# When someone is forced to wait for a lock, they add themselves # When someone is forced to wait for a lock, they add themselves
# to one of these queues along with a "waiter" condition that # to one of these queues along with a "waiter" condition that
# is used to wake them up. # is used to wake them up.
self._shared_queue = [] self._shared_queue = []
self._exclusive_queue = [] self._exclusive_queue = []
# This is for recycling waiter objects. # This is for recycling waiter objects.
self._free_waiters = [] self._free_waiters = []
def acquire(self, blocking=True, shared=False): def acquire(self, blocking=True, shared=False):
@ -111,9 +111,9 @@ class SHLock: # {{{
def release(self): def release(self):
''' Release the lock. ''' ''' Release the lock. '''
# This decrements the appropriate lock counters, and if the lock # This decrements the appropriate lock counters, and if the lock
# becomes free, it looks for a queued thread to hand it off to. # becomes free, it looks for a queued thread to hand it off to.
# By doing the handoff here we ensure fairness. # By doing the handoff here we ensure fairness.
me = current_thread() me = current_thread()
with self._lock: with self._lock:
if self.is_exclusive: if self.is_exclusive:
@ -122,16 +122,16 @@ class SHLock: # {{{
self.is_exclusive -= 1 self.is_exclusive -= 1
if not self.is_exclusive: if not self.is_exclusive:
self._exclusive_owner = None self._exclusive_owner = None
# If there are waiting shared locks, issue them # If there are waiting shared locks, issue them
# all and them wake everyone up. # all and them wake everyone up.
if self._shared_queue: if self._shared_queue:
for (thread, waiter) in self._shared_queue: for (thread, waiter) in self._shared_queue:
self.is_shared += 1 self.is_shared += 1
self._shared_owners[thread] = 1 self._shared_owners[thread] = 1
waiter.notify() waiter.notify()
del self._shared_queue[:] del self._shared_queue[:]
# Otherwise, if there are waiting exclusive locks, # Otherwise, if there are waiting exclusive locks,
# they get first dibbs on the lock. # they get first dibbs on the lock.
elif self._exclusive_queue: elif self._exclusive_queue:
(thread, waiter) = self._exclusive_queue.pop(0) (thread, waiter) = self._exclusive_queue.pop(0)
self._exclusive_owner = thread self._exclusive_owner = thread
@ -146,8 +146,8 @@ class SHLock: # {{{
raise LockingError('release() called on unheld lock') raise LockingError('release() called on unheld lock')
self.is_shared -= 1 self.is_shared -= 1
if not self.is_shared: if not self.is_shared:
# If there are waiting exclusive locks, # If there are waiting exclusive locks,
# they get first dibbs on the lock. # they get first dibbs on the lock.
if self._exclusive_queue: if self._exclusive_queue:
(thread, waiter) = self._exclusive_queue.pop(0) (thread, waiter) = self._exclusive_queue.pop(0)
self._exclusive_owner = thread self._exclusive_owner = thread
@ -160,13 +160,13 @@ class SHLock: # {{{
def _acquire_shared(self, blocking=True): def _acquire_shared(self, blocking=True):
me = current_thread() me = current_thread()
# Each case: acquiring a lock we already hold. # Each case: acquiring a lock we already hold.
if self.is_shared and me in self._shared_owners: if self.is_shared and me in self._shared_owners:
self.is_shared += 1 self.is_shared += 1
self._shared_owners[me] += 1 self._shared_owners[me] += 1
return True return True
# If the lock is already spoken for by an exclusive, add us # If the lock is already spoken for by an exclusive, add us
# to the shared queue and it will give us the lock eventually. # to the shared queue and it will give us the lock eventually.
if self.is_exclusive or self._exclusive_queue: if self.is_exclusive or self._exclusive_queue:
if self._exclusive_owner is me: if self._exclusive_owner is me:
raise DowngradeLockError("can't downgrade SHLock object") raise DowngradeLockError("can't downgrade SHLock object")
@ -186,7 +186,7 @@ class SHLock: # {{{
def _acquire_exclusive(self, blocking=True): def _acquire_exclusive(self, blocking=True):
me = current_thread() me = current_thread()
# Each case: acquiring a lock we already hold. # Each case: acquiring a lock we already hold.
if self._exclusive_owner is me: if self._exclusive_owner is me:
assert self.is_exclusive assert self.is_exclusive
self.is_exclusive += 1 self.is_exclusive += 1
@ -194,8 +194,8 @@ class SHLock: # {{{
# Do not allow upgrade of lock # Do not allow upgrade of lock
if self.is_shared and me in self._shared_owners: if self.is_shared and me in self._shared_owners:
raise LockingError("can't upgrade SHLock object") raise LockingError("can't upgrade SHLock object")
# If the lock is already spoken for, add us to the exclusive queue. # If the lock is already spoken for, add us to the exclusive queue.
# This will eventually give us the lock when it's our turn. # This will eventually give us the lock when it's our turn.
if self.is_shared or self.is_exclusive: if self.is_shared or self.is_exclusive:
if not blocking: if not blocking:
return False return False

View File

@ -791,9 +791,9 @@ class CurrentlyConnectedDevice:
# A device driver can check if a device is currently connected to calibre using # A device driver can check if a device is currently connected to calibre using
# the following code:: # the following code::
# from calibre.device.interface import currently_connected_device # from calibre.device.interface import currently_connected_device
# if currently_connected_device.device is None: # if currently_connected_device.device is None:
# # no device connected # # no device connected
# The device attribute will be either None or the device driver object # The device attribute will be either None or the device driver object
# (DevicePlugin instance) for the currently connected device. # (DevicePlugin instance) for the currently connected device.
currently_connected_device = CurrentlyConnectedDevice() currently_connected_device = CurrentlyConnectedDevice()

View File

@ -90,8 +90,8 @@ class Bookmark: # {{{
debug_print(f"Kobo::Bookmark::get_bookmark_data - getting kepub: chapter opf_reference='{opf_reference}'") debug_print(f"Kobo::Bookmark::get_bookmark_data - getting kepub: chapter opf_reference='{opf_reference}'")
file_contentID_part = file_contentID_part[filename_index + 1:] file_contentID_part = file_contentID_part[filename_index + 1:]
debug_print(f"Kobo::Bookmark::get_bookmark_data - getting kepub: chapter file_contentID_part='{file_contentID_part}'") debug_print(f"Kobo::Bookmark::get_bookmark_data - getting kepub: chapter file_contentID_part='{file_contentID_part}'")
# from urllib import quote # from urllib import quote
# file_contentID_part = quote(file_contentID_part) # file_contentID_part = quote(file_contentID_part)
chapter_contentID = book_contentID_part + '!' + opf_reference + '!' + file_contentID_part chapter_contentID = book_contentID_part + '!' + opf_reference + '!' + file_contentID_part
debug_print(f"Kobo::Bookmark::get_bookmark_data - getting kepub chapter chapter_contentID='{chapter_contentID}'") debug_print(f"Kobo::Bookmark::get_bookmark_data - getting kepub chapter chapter_contentID='{chapter_contentID}'")
kepub_chapter = kepub_chapters.get(chapter_contentID, None) kepub_chapter = kepub_chapters.get(chapter_contentID, None)
@ -152,7 +152,7 @@ class Bookmark: # {{{
# print(row[1]) # print(row[1])
cursor.close() cursor.close()
# self.last_read_location = self.last_read - self.pdf_page_offset # self.last_read_location = self.last_read - self.pdf_page_offset
self.user_notes = user_notes self.user_notes = user_notes
def get_book_length(self): def get_book_length(self):

View File

@ -21,7 +21,7 @@ class Book(Book_):
def __init__(self, prefix, lpath, title=None, authors=None, mime=None, date=None, ContentType=None, def __init__(self, prefix, lpath, title=None, authors=None, mime=None, date=None, ContentType=None,
thumbnail_name=None, size=None, other=None): thumbnail_name=None, size=None, other=None):
from calibre.utils.date import parse_date from calibre.utils.date import parse_date
# debug_print('Book::__init__ - title=', title) # debug_print('Book::__init__ - title=', title)
show_debug = title is not None and title.lower().find('xxxxx') >= 0 show_debug = title is not None and title.lower().find('xxxxx') >= 0
if other is not None: if other is not None:
other.title = title other.title = title
@ -308,9 +308,9 @@ class KTCollectionsBookList(CollectionsBookList):
def is_debugging_title(self, title): def is_debugging_title(self, title):
if not DEBUG: if not DEBUG:
return False return False
# debug_print("KTCollectionsBookList:is_debugging - title=", title, "self.debugging_title=", self.debugging_title) # debug_print("KTCollectionsBookList:is_debugging - title=", title, "self.debugging_title=", self.debugging_title)
is_debugging = self.debugging_title is not None and len(self.debugging_title) > 0 and title is not None and ( is_debugging = self.debugging_title is not None and len(self.debugging_title) > 0 and title is not None and (
title.lower().find(self.debugging_title.lower()) >= 0 or len(title) == 0) title.lower().find(self.debugging_title.lower()) >= 0 or len(title) == 0)
# debug_print("KTCollectionsBookList:is_debugging - is_debugging=", is_debugging) # debug_print("KTCollectionsBookList:is_debugging - is_debugging=", is_debugging)
return is_debugging return is_debugging

View File

@ -422,7 +422,7 @@ class KOBO(USBMS):
changed = False changed = False
for row in cursor: for row in cursor:
# self.report_progress((i+1) / float(numrows), _('Getting list of books on device...')) # self.report_progress((i+1) / float(numrows), _('Getting list of books on device...'))
if not hasattr(row['ContentID'], 'startswith') or row['ContentID'].startswith('file:///usr/local/Kobo/help/'): if not hasattr(row['ContentID'], 'startswith') or row['ContentID'].startswith('file:///usr/local/Kobo/help/'):
# These are internal to the Kobo device and do not exist # These are internal to the Kobo device and do not exist
continue continue
@ -466,21 +466,21 @@ class KOBO(USBMS):
return bl return bl
def filename_callback(self, path, mi): def filename_callback(self, path, mi):
# debug_print("Kobo:filename_callback:Path - {0}".format(path)) # debug_print("Kobo:filename_callback:Path - {0}".format(path))
idx = path.rfind('.') idx = path.rfind('.')
ext = path[idx:] ext = path[idx:]
if ext == KEPUB_EXT: if ext == KEPUB_EXT:
path = path + EPUB_EXT path = path + EPUB_EXT
# debug_print("Kobo:filename_callback:New path - {0}".format(path)) # debug_print("Kobo:filename_callback:New path - {0}".format(path))
return path return path
def delete_via_sql(self, ContentID, ContentType): def delete_via_sql(self, ContentID, ContentType):
# Delete Order: # Delete Order:
# 1) shortcover_page # 1) shortcover_page
# 2) volume_shorcover # 2) volume_shorcover
# 2) content # 2) content
debug_print('delete_via_sql: ContentID: ', ContentID, 'ContentType: ', ContentType) debug_print('delete_via_sql: ContentID: ', ContentID, 'ContentType: ', ContentType)
with closing(self.device_database_connection()) as connection: with closing(self.device_database_connection()) as connection:
@ -915,14 +915,14 @@ class KOBO(USBMS):
'Preview':6, 'Preview':6,
'Recommendation':4, 'Recommendation':4,
} }
# debug_print('Starting update_device_database_collections', collections_attributes) # debug_print('Starting update_device_database_collections', collections_attributes)
# Force collections_attributes to be 'tags' as no other is currently supported # Force collections_attributes to be 'tags' as no other is currently supported
# debug_print('KOBO: overriding the provided collections_attributes:', collections_attributes) # debug_print('KOBO: overriding the provided collections_attributes:', collections_attributes)
collections_attributes = ['tags'] collections_attributes = ['tags']
collections = booklists.get_collections(collections_attributes) collections = booklists.get_collections(collections_attributes)
# debug_print('Kobo:update_device_database_collections - Collections:', collections) # debug_print('Kobo:update_device_database_collections - Collections:', collections)
# Create a connection to the sqlite database # Create a connection to the sqlite database
# Needs to be outside books collection as in the case of removing # Needs to be outside books collection as in the case of removing
@ -970,7 +970,7 @@ class KOBO(USBMS):
debug_print('No Collections - resetting FavouritesIndex') debug_print('No Collections - resetting FavouritesIndex')
self.reset_favouritesindex(connection, oncard) self.reset_favouritesindex(connection, oncard)
# debug_print('Finished update_device_database_collections', collections_attributes) # debug_print('Finished update_device_database_collections', collections_attributes)
def get_collections_attributes(self): def get_collections_attributes(self):
collections = [x.lower().strip() for x in self.collections_columns.split(',')] collections = [x.lower().strip() for x in self.collections_columns.split(',')]
@ -999,7 +999,7 @@ class KOBO(USBMS):
def sync_booklists(self, booklists, end_session=True): def sync_booklists(self, booklists, end_session=True):
debug_print('KOBO:sync_booklists - start') debug_print('KOBO:sync_booklists - start')
paths = self.get_device_paths() paths = self.get_device_paths()
# debug_print('KOBO:sync_booklists - booklists:', booklists) # debug_print('KOBO:sync_booklists - booklists:', booklists)
blists = {} blists = {}
for i in paths: for i in paths:
@ -1073,7 +1073,7 @@ class KOBO(USBMS):
cursor.execute('select ImageId from Content where BookID is Null and ContentID = ?', t) cursor.execute('select ImageId from Content where BookID is Null and ContentID = ?', t)
try: try:
result = next(cursor) result = next(cursor)
# debug_print("ImageId: ", result[0]) # debug_print("ImageId: ", result[0])
ImageID = result[0] ImageID = result[0]
except StopIteration: except StopIteration:
debug_print('No rows exist in the database - cannot upload') debug_print('No rows exist in the database - cannot upload')
@ -1129,7 +1129,7 @@ class KOBO(USBMS):
with closing(open(path, 'rb')) as r: with closing(open(path, 'rb')) as r:
tf = PersistentTemporaryFile(suffix='.epub') tf = PersistentTemporaryFile(suffix='.epub')
shutil.copyfileobj(r, tf) shutil.copyfileobj(r, tf)
# tf.write(r.read()) # tf.write(r.read())
paths[idx] = tf.name paths[idx] = tf.name
return paths return paths
@ -1385,8 +1385,8 @@ class KOBO(USBMS):
# NOTE: As it is, this copied the book from the device back to the library. That meant it replaced the # NOTE: As it is, this copied the book from the device back to the library. That meant it replaced the
# existing file. Taking this out for that reason, but some books have a ANNOT file that could be # existing file. Taking this out for that reason, but some books have a ANNOT file that could be
# copied. # copied.
# db.add_format_with_hooks(db_id, bm.value.bookmark_extension, # db.add_format_with_hooks(db_id, bm.value.bookmark_extension,
# bm.value.path, index_is_id=True) # bm.value.path, index_is_id=True)
class KOBOTOUCH(KOBO): class KOBOTOUCH(KOBO):
@ -1402,7 +1402,7 @@ class KOBOTOUCH(KOBO):
' as well as tolino shine 5, shine color and' ' as well as tolino shine 5, shine color and'
' vision color eReaders.' ' vision color eReaders.'
' Based on the existing Kobo driver by %s.') % KOBO.author ' Based on the existing Kobo driver by %s.') % KOBO.author
# icon = 'devices/kobotouch.jpg' # icon = 'devices/kobotouch.jpg'
supported_dbversion = 190 supported_dbversion = 190
min_supported_dbversion = 53 min_supported_dbversion = 53
@ -1586,14 +1586,14 @@ class KOBOTOUCH(KOBO):
'': [(1264,1680), 0, 200,True,], '': [(1264,1680), 0, 200,True,],
} }
# Following are the sizes used with pre2.1.4 firmware # Following are the sizes used with pre2.1.4 firmware
# COVER_FILE_ENDINGS = { # COVER_FILE_ENDINGS = {
# ' - N3_LIBRARY_FULL.parsed':[(355,530),0, 99,], # Used for Details screen # ' - N3_LIBRARY_FULL.parsed':[(355,530),0, 99,], # Used for Details screen
# ' - N3_LIBRARY_FULL.parsed':[(600,800),0, 99,], # ' - N3_LIBRARY_FULL.parsed':[(600,800),0, 99,],
# ' - N3_LIBRARY_GRID.parsed':[(149,223),0, 99,], # Used for library lists # ' - N3_LIBRARY_GRID.parsed':[(149,223),0, 99,], # Used for library lists
# ' - N3_LIBRARY_LIST.parsed':[(60,90),0, 53,], # ' - N3_LIBRARY_LIST.parsed':[(60,90),0, 53,],
# ' - N3_LIBRARY_SHELF.parsed': [(40,60),0, 52,], # ' - N3_LIBRARY_SHELF.parsed': [(40,60),0, 52,],
# ' - N3_FULL.parsed':[(600,800),0, 99,], # Used for screensaver if "Full screen" is checked. # ' - N3_FULL.parsed':[(600,800),0, 99,], # Used for screensaver if "Full screen" is checked.
# } # }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
KOBO.__init__(self, *args, **kwargs) KOBO.__init__(self, *args, **kwargs)
@ -1737,7 +1737,7 @@ class KOBOTOUCH(KOBO):
userid, bookshelves, book_stats=None userid, bookshelves, book_stats=None
): ):
show_debug = self.is_debugging_title(title) show_debug = self.is_debugging_title(title)
# show_debug = authors == 'L. Frank Baum' # show_debug = authors == 'L. Frank Baum'
if show_debug: if show_debug:
debug_print("KoboTouch:update_booklist - title='%s'"%title, 'ContentType=%s'%ContentType, 'isdownloaded=', isdownloaded) debug_print("KoboTouch:update_booklist - title='%s'"%title, 'ContentType=%s'%ContentType, 'isdownloaded=', isdownloaded)
debug_print( debug_print(
@ -1749,7 +1749,7 @@ class KOBOTOUCH(KOBO):
if lpath.startswith(os.sep): if lpath.startswith(os.sep):
lpath = lpath[len(os.sep):] lpath = lpath[len(os.sep):]
lpath = lpath.replace('\\', '/') lpath = lpath.replace('\\', '/')
# debug_print("KoboTouch:update_booklist - LPATH: ", lpath, " - Title: " , title) # debug_print("KoboTouch:update_booklist - LPATH: ", lpath, " - Title: " , title)
playlist_map = {} playlist_map = {}
@ -1896,7 +1896,7 @@ class KOBOTOUCH(KOBO):
if show_debug: if show_debug:
debug_print('KoboTouch:update_booklist - updated bl[idx].device_collections=', bl[idx].device_collections) debug_print('KoboTouch:update_booklist - updated bl[idx].device_collections=', bl[idx].device_collections)
debug_print('KoboTouch:update_booklist - playlist_map=', playlist_map, 'changed=', changed) debug_print('KoboTouch:update_booklist - playlist_map=', playlist_map, 'changed=', changed)
# debug_print('KoboTouch:update_booklist - book=', bl[idx]) # debug_print('KoboTouch:update_booklist - book=', bl[idx])
debug_print('KoboTouch:update_booklist - book class=%s'%bl[idx].__class__) debug_print('KoboTouch:update_booklist - book class=%s'%bl[idx].__class__)
debug_print('KoboTouch:update_booklist - book title=%s'%bl[idx].title) debug_print('KoboTouch:update_booklist - book title=%s'%bl[idx].title)
else: else:
@ -1921,7 +1921,7 @@ class KOBOTOUCH(KOBO):
if show_debug: if show_debug:
debug_print('KoboTouch:update_booklist - class:', book.__class__) debug_print('KoboTouch:update_booklist - class:', book.__class__)
# debug_print(' resolution:', book.__class__.__mro__) # debug_print(' resolution:', book.__class__.__mro__)
debug_print(" contentid: '%s'"%book.contentID) debug_print(" contentid: '%s'"%book.contentID)
debug_print(" title:'%s'"%book.title) debug_print(" title:'%s'"%book.title)
debug_print(' the book:', book) debug_print(' the book:', book)
@ -1942,7 +1942,7 @@ class KOBOTOUCH(KOBO):
book.kobo_subtitle = Subtitle book.kobo_subtitle = Subtitle
book.kobo_bookstats = book_stats book.kobo_bookstats = book_stats
book.can_put_on_shelves = allow_shelves book.can_put_on_shelves = allow_shelves
# debug_print('KoboTouch:update_booklist - title=', title, 'book.device_collections', book.device_collections) # debug_print('KoboTouch:update_booklist - title=', title, 'book.device_collections', book.device_collections)
if not book.is_sideloaded and book.has_kobo_series and SeriesID is not None: if not book.is_sideloaded and book.has_kobo_series and SeriesID is not None:
if show_debug: if show_debug:
@ -1977,7 +1977,7 @@ class KOBOTOUCH(KOBO):
bookshelves.append(row['ShelfName']) bookshelves.append(row['ShelfName'])
cursor.close() cursor.close()
# debug_print("KoboTouch:get_bookshelvesforbook - count bookshelves=" + str(count_bookshelves)) # debug_print("KoboTouch:get_bookshelvesforbook - count bookshelves=" + str(count_bookshelves))
return bookshelves return bookshelves
self.debug_index = 0 self.debug_index = 0
@ -2090,7 +2090,7 @@ class KOBOTOUCH(KOBO):
i = 0 i = 0
for row in cursor: for row in cursor:
i += 1 i += 1
# self.report_progress((i) / float(books_on_device), _('Getting list of books on device...')) # self.report_progress((i) / float(books_on_device), _('Getting list of books on device...'))
show_debug = self.is_debugging_title(row['Title']) show_debug = self.is_debugging_title(row['Title'])
if show_debug: if show_debug:
debug_print('KoboTouch:books - looping on database - row=%d' % i) debug_print('KoboTouch:books - looping on database - row=%d' % i)
@ -2286,7 +2286,7 @@ class KOBOTOUCH(KOBO):
self.report_progress(0, 'Working...') self.report_progress(0, 'Working...')
result = super().upload_books(files, names, on_card, end_session, metadata) result = super().upload_books(files, names, on_card, end_session, metadata)
# debug_print('KoboTouch:upload_books - result=', result) # debug_print('KoboTouch:upload_books - result=', result)
if self.dbversion >= 53: if self.dbversion >= 53:
try: try:
@ -2301,7 +2301,7 @@ class KOBOTOUCH(KOBO):
debug_print('KoboTouch:upload_books: contentID=', contentID) debug_print('KoboTouch:upload_books: contentID=', contentID)
cleanup_values = (contentID,) cleanup_values = (contentID,)
# debug_print('KoboTouch:upload_books: Delete record left if deleted on Touch') # debug_print('KoboTouch:upload_books: Delete record left if deleted on Touch')
cursor.execute(cleanup_query, cleanup_values) cursor.execute(cleanup_query, cleanup_values)
if self.override_kobo_replace_existing: if self.override_kobo_replace_existing:
@ -2565,7 +2565,7 @@ class KOBOTOUCH(KOBO):
'Preview':6, 'Preview':6,
'Recommendation':4, 'Recommendation':4,
} }
# debug_print('KoboTouch:update_device_database_collections - collections_attributes=', collections_attributes) # debug_print('KoboTouch:update_device_database_collections - collections_attributes=', collections_attributes)
create_collections = self.create_collections create_collections = self.create_collections
delete_empty_collections = self.delete_empty_collections delete_empty_collections = self.delete_empty_collections
@ -2588,7 +2588,7 @@ class KOBOTOUCH(KOBO):
'dbversion': self.dbversion, 'dbversion': self.dbversion,
} }
) if have_bookshelf_attributes else None ) if have_bookshelf_attributes else None
# debug_print('KoboTouch:update_device_database_collections - Collections:', collections) # debug_print('KoboTouch:update_device_database_collections - Collections:', collections)
# Create a connection to the sqlite database # Create a connection to the sqlite database
# Needs to be outside books collection as in the case of removing # Needs to be outside books collection as in the case of removing
@ -2610,21 +2610,21 @@ class KOBOTOUCH(KOBO):
debug_print('KoboTouch:update_device_database_collections - calling reset_favouritesindex') debug_print('KoboTouch:update_device_database_collections - calling reset_favouritesindex')
self.reset_favouritesindex(connection, oncard) self.reset_favouritesindex(connection, oncard)
# debug_print("KoboTouch:update_device_database_collections - length collections=", len(collections)) # debug_print("KoboTouch:update_device_database_collections - length collections=", len(collections))
# debug_print("KoboTouch:update_device_database_collections - self.bookshelvelist=", self.bookshelvelist) # debug_print("KoboTouch:update_device_database_collections - self.bookshelvelist=", self.bookshelvelist)
# Process any collections that exist # Process any collections that exist
for category, books in collections.items(): for category, books in collections.items():
debug_print("KoboTouch:update_device_database_collections - category='%s' books=%d"%(category, len(books))) debug_print("KoboTouch:update_device_database_collections - category='%s' books=%d"%(category, len(books)))
if create_collections and not (category in supportedcategories or category in readstatuslist or category in accessibilitylist): if create_collections and not (category in supportedcategories or category in readstatuslist or category in accessibilitylist):
self.check_for_bookshelf(connection, category) self.check_for_bookshelf(connection, category)
# if category in self.bookshelvelist: # if category in self.bookshelvelist:
# debug_print("Category: ", category, " id = ", readstatuslist.get(category)) # debug_print("Category: ", category, " id = ", readstatuslist.get(category))
for book in books: for book in books:
# debug_print(' Title:', book.title, 'category: ', category) # debug_print(' Title:', book.title, 'category: ', category)
show_debug = self.is_debugging_title(book.title) show_debug = self.is_debugging_title(book.title)
if show_debug: if show_debug:
debug_print(' Title="%s"'%book.title, 'category="%s"'%category) debug_print(' Title="%s"'%book.title, 'category="%s"'%category)
# debug_print(book) # debug_print(book)
debug_print(' class=%s'%book.__class__) debug_print(' class=%s'%book.__class__)
debug_print(' book.contentID="%s"'%book.contentID) debug_print(' book.contentID="%s"'%book.contentID)
debug_print(' book.application_id="%s"'%book.application_id) debug_print(' book.application_id="%s"'%book.application_id)
@ -2761,7 +2761,7 @@ class KOBOTOUCH(KOBO):
if self._card_a_prefix and os.path.abspath(path).startswith(os.path.abspath(self._card_a_prefix)) and not self.supports_covers_on_sdcard(): if self._card_a_prefix and os.path.abspath(path).startswith(os.path.abspath(self._card_a_prefix)) and not self.supports_covers_on_sdcard():
return return
# debug_print('KoboTouch: uploading cover') # debug_print('KoboTouch: uploading cover')
try: try:
self._upload_cover( self._upload_cover(
path, filename, metadata, filepath, path, filename, metadata, filepath,
@ -3058,7 +3058,7 @@ class KOBOTOUCH(KOBO):
cursor.close() cursor.close()
# debug_print("KoboTouch:set_filesize_in_device_database - end") # debug_print("KoboTouch:set_filesize_in_device_database - end")
def delete_empty_bookshelves(self, connection): def delete_empty_bookshelves(self, connection):
debug_print('KoboTouch:delete_empty_bookshelves - start') debug_print('KoboTouch:delete_empty_bookshelves - start')
@ -3114,7 +3114,7 @@ class KOBOTOUCH(KOBO):
def get_bookshelflist(self, connection): def get_bookshelflist(self, connection):
# Retrieve the list of booksehelves # Retrieve the list of booksehelves
# debug_print('KoboTouch:get_bookshelflist') # debug_print('KoboTouch:get_bookshelflist')
bookshelves = [] bookshelves = []
if not self.supports_bookshelves: if not self.supports_bookshelves:
@ -3123,13 +3123,13 @@ class KOBOTOUCH(KOBO):
query = f'SELECT Name FROM Shelf WHERE _IsDeleted = {self.bool_for_query(False)}' query = f'SELECT Name FROM Shelf WHERE _IsDeleted = {self.bool_for_query(False)}'
cursor = connection.cursor() cursor = connection.cursor()
cursor.execute(query) cursor.execute(query)
# count_bookshelves = 0 # count_bookshelves = 0
for row in cursor: for row in cursor:
bookshelves.append(row['Name']) bookshelves.append(row['Name'])
# count_bookshelves = i + 1 # count_bookshelves = i + 1
cursor.close() cursor.close()
# debug_print("KoboTouch:get_bookshelflist - count bookshelves=" + str(count_bookshelves)) # debug_print("KoboTouch:get_bookshelflist - count bookshelves=" + str(count_bookshelves))
return bookshelves return bookshelves
@ -3170,7 +3170,7 @@ class KOBOTOUCH(KOBO):
cursor.close() cursor.close()
# debug_print("KoboTouch:set_bookshelf - end") # debug_print("KoboTouch:set_bookshelf - end")
def check_for_bookshelf(self, connection, bookshelf_name): def check_for_bookshelf(self, connection, bookshelf_name):
show_debug = self.is_debugging_title(bookshelf_name) show_debug = self.is_debugging_title(bookshelf_name)
@ -3232,7 +3232,7 @@ class KOBOTOUCH(KOBO):
# Update the bookshelf list. # Update the bookshelf list.
self.bookshelvelist = self.get_bookshelflist(connection) self.bookshelvelist = self.get_bookshelflist(connection)
# debug_print("KoboTouch:set_bookshelf - end") # debug_print("KoboTouch:set_bookshelf - end")
def remove_from_bookshelves(self, connection, oncard, ContentID=None, bookshelves=None): def remove_from_bookshelves(self, connection, oncard, ContentID=None, bookshelves=None):
debug_print('KoboTouch:remove_from_bookshelf ContentID=', ContentID) debug_print('KoboTouch:remove_from_bookshelf ContentID=', ContentID)
@ -3550,7 +3550,7 @@ class KOBOTOUCH(KOBO):
''' Get the setting named key. First looks for a device specific setting. ''' Get the setting named key. First looks for a device specific setting.
If that is not found looks for a device default and if that is not If that is not found looks for a device default and if that is not
found uses the global default.''' found uses the global default.'''
# debug_print("KoboTouch::get_prefs - key=", key, "cls=", cls) # debug_print("KoboTouch::get_prefs - key=", key, "cls=", cls)
if not cls.opts: if not cls.opts:
cls.opts = cls.settings() cls.opts = cls.settings()
try: try:
@ -4199,7 +4199,7 @@ class KOBOTOUCH(KOBO):
def is_debugging_title(self, title): def is_debugging_title(self, title):
if not DEBUG: if not DEBUG:
return False return False
# debug_print("KoboTouch:is_debugging - title=", title) # debug_print("KoboTouch:is_debugging - title=", title)
if not self.debugging_title and not self.debugging_title == '': if not self.debugging_title and not self.debugging_title == '':
self.debugging_title = self.get_debugging_title() self.debugging_title = self.get_debugging_title()
@ -4263,16 +4263,16 @@ if __name__ == '__main__':
scanner = DeviceScanner() scanner = DeviceScanner()
scanner.scan() scanner.scan()
devs = scanner.devices devs = scanner.devices
# debug_print("unit test: devs.__class__=", devs.__class__) # debug_print("unit test: devs.__class__=", devs.__class__)
# debug_print("unit test: devs.__class__=", devs.__class__.__name__) # debug_print("unit test: devs.__class__=", devs.__class__.__name__)
debug_print('unit test: devs=', devs) debug_print('unit test: devs=', devs)
debug_print('unit test: dev=', dev) debug_print('unit test: dev=', dev)
# cd = dev.detect_managed_devices(devs) # cd = dev.detect_managed_devices(devs)
# if cd is None: # if cd is None:
# raise ValueError('Failed to detect KOBOTOUCH device') # raise ValueError('Failed to detect KOBOTOUCH device')
dev.set_progress_reporter(prints) dev.set_progress_reporter(prints)
# dev.open(cd, None) # dev.open(cd, None)
# dev.filesystem_cache.dump() # dev.filesystem_cache.dump()
print('Prefix for main memory:', dev.dbversion) print('Prefix for main memory:', dev.dbversion)
finally: finally:
dev.shutdown() dev.shutdown()

View File

@ -515,7 +515,7 @@ class AdvancedGroupBox(DeviceOptionsGroupBox):
def __init__(self, parent, device): def __init__(self, parent, device):
super().__init__(parent, device, _('Advanced options')) super().__init__(parent, device, _('Advanced options'))
# self.setTitle(_("Advanced Options")) # self.setTitle(_("Advanced Options"))
self.options_layout = QGridLayout() self.options_layout = QGridLayout()
self.options_layout.setObjectName('options_layout') self.options_layout.setObjectName('options_layout')
@ -844,9 +844,9 @@ if __name__ == '__main__':
app = Application([]) app = Application([])
debug_print('KOBOTOUCH:', KOBOTOUCH) debug_print('KOBOTOUCH:', KOBOTOUCH)
dev = KOBOTOUCH(None) dev = KOBOTOUCH(None)
# dev.startup() # dev.startup()
# cd = dev.detect_managed_devices(s.devices) # cd = dev.detect_managed_devices(s.devices)
# dev.open(cd, 'test') # dev.open(cd, 'test')
cw = dev.config_widget() cw = dev.config_widget()
d = QDialog() d = QDialog()
d.l = QVBoxLayout() d.l = QVBoxLayout()

View File

@ -166,7 +166,7 @@ class ConnectionListener(Thread):
self.driver._debug('unexpected socket exception', x.args[0]) self.driver._debug('unexpected socket exception', x.args[0])
self._close_socket(device_socket) self._close_socket(device_socket)
device_socket = None device_socket = None
# raise # raise
class SDBook(Book): class SDBook(Book):

View File

@ -19,13 +19,13 @@ XLINK_NS = 'http://www.w3.org/1999/xlink'
_span_pat = re.compile(r'<span.*?</span>', re.DOTALL|re.IGNORECASE) _span_pat = re.compile(r'<span.*?</span>', re.DOTALL|re.IGNORECASE)
LIGATURES = { LIGATURES = {
# 'Æ': 'AE', # 'Æ': 'AE',
# 'æ': 'ae', # 'æ': 'ae',
# 'Œ': 'OE', # 'Œ': 'OE',
# 'œ': 'oe', # 'œ': 'oe',
# 'IJ': 'IJ', # 'IJ': 'IJ',
# 'ij': 'ij', # 'ij': 'ij',
# 'ᵫ': 'ue', # 'ᵫ': 'ue',
'': 'ff', '': 'ff',
'': 'fi', '': 'fi',
'': 'fl', '': 'fl',
@ -146,9 +146,9 @@ class DocAnalysis:
# print('there are '+str(len(lines))+' lines') # print('there are '+str(len(lines))+' lines')
# max = 0 # max = 0
# for line in self.lines: # for line in self.lines:
# l = len(line) # l = len(line)
# if l > max: # if l > max:
# max = l # max = l
# print('max line found is '+str(max)) # print('max line found is '+str(max))
# Build the line length histogram # Build the line length histogram
hRaw = [0 for i in range(0,buckets)] hRaw = [0 for i in range(0,buckets)]

View File

@ -115,7 +115,7 @@ class HeuristicProcessor:
tot_htm_ends = len(htm_end) tot_htm_ends = len(htm_end)
tot_ln_fds = len(line_end) tot_ln_fds = len(line_end)
# self.log.debug("There are " + str(tot_ln_fds) + " total Line feeds, and " + # self.log.debug("There are " + str(tot_ln_fds) + " total Line feeds, and " +
# str(tot_htm_ends) + " marked up endings") # str(tot_htm_ends) + " marked up endings")
if percent > 1: if percent > 1:
percent = 1 percent = 1

View File

@ -177,7 +177,7 @@ class TextBlock(etree.XSLTExtension):
self.log.warn('Found deeply nested spans. Flattening.') self.log.warn('Found deeply nested spans. Flattening.')
# with open('/t/before.xml', 'wb') as f: # with open('/t/before.xml', 'wb') as f:
# f.write(etree.tostring(node, method='xml')) # f.write(etree.tostring(node, method='xml'))
spans = [(depth(span), span) for span in node.xpath('descendant::Span')] spans = [(depth(span), span) for span in node.xpath('descendant::Span')]
spans.sort(key=operator.itemgetter(0), reverse=True) spans.sort(key=operator.itemgetter(0), reverse=True)
@ -206,7 +206,7 @@ class TextBlock(etree.XSLTExtension):
gp.insert(pidx+1, child) gp.insert(pidx+1, child)
# with open('/t/after.xml', 'wb') as f: # with open('/t/after.xml', 'wb') as f:
# f.write(etree.tostring(node, method='xml')) # f.write(etree.tostring(node, method='xml'))
def add_text(self, text): def add_text(self, text):
if text: if text:
@ -377,8 +377,8 @@ class Styles(etree.XSLTExtension):
ans['font-weight'] = ('bold' if fw >= 700 else 'normal') ans['font-weight'] = ('bold' if fw >= 700 else 'normal')
# fn = getattr(obj, 'fontfacename', None) # fn = getattr(obj, 'fontfacename', None)
# if fn is not None: # if fn is not None:
# fn = cls.FONT_MAP[fn] # fn = cls.FONT_MAP[fn]
# item('font-family: %s;'%fn) # item('font-family: %s;'%fn)
fg = self.color(node.get('textcolor', None)) fg = self.color(node.get('textcolor', None))
if fg is not None: if fg is not None:
ans['color'] = fg ans['color'] = fg
@ -391,7 +391,7 @@ class Styles(etree.XSLTExtension):
ans['text-align'] = all.get(al, 'left') ans['text-align'] = all.get(al, 'left')
# lh = self.to_num(node.get('linespace', None), 0.1) # lh = self.to_num(node.get('linespace', None), 0.1)
# if lh is not None: # if lh is not None:
# ans['line-height'] = '%fpt'%lh # ans['line-height'] = '%fpt'%lh
pi = self.to_num(node.get('parindent', None), 0.1) pi = self.to_num(node.get('parindent', None), 0.1)
if pi is not None: if pi is not None:
ans['text-indent'] = '%fpt'%pi ans['text-indent'] = '%fpt'%pi

View File

@ -138,7 +138,7 @@ def get_metadata(stream, cover=True):
au = string_to_authors(au) au = string_to_authors(au)
mi = MetaInformation(title, au) mi = MetaInformation(title, au)
# if isbn is not None: # if isbn is not None:
# mi.isbn = isbn # mi.isbn = isbn
creator = info.get('Creator', None) creator = info.get('Creator', None)
if creator: if creator:

View File

@ -1775,7 +1775,7 @@ def manual_tests(domain, **kw): # {{{
from calibre.ebooks.metadata.sources.test import authors_test, comments_test, isbn_test, series_test, test_identify_plugin, title_test from calibre.ebooks.metadata.sources.test import authors_test, comments_test, isbn_test, series_test, test_identify_plugin, title_test
all_tests = {} all_tests = {}
all_tests['com'] = [ # {{{ all_tests['com'] = [ # {{{
( # # in title ( # in title
{'title': 'Expert C# 2008 Business Objects', {'title': 'Expert C# 2008 Business Objects',
'authors': ['Lhotka']}, 'authors': ['Lhotka']},
[title_test('Expert C#'), [title_test('Expert C#'),
@ -1970,7 +1970,7 @@ def manual_tests(domain, **kw): # {{{
[title_test('Parting Shot', exact=True), [title_test('Parting Shot', exact=True),
authors_test(['Mary Calmes'])] authors_test(['Mary Calmes'])]
), ),
( # # in title ( # in title
{'title': 'Expert C# 2008 Business Objects', {'title': 'Expert C# 2008 Business Objects',
'authors': ['Lhotka']}, 'authors': ['Lhotka']},
[title_test('Expert C# 2008 Business Objects'), [title_test('Expert C# 2008 Business Objects'),

View File

@ -108,7 +108,7 @@ class EXTHHeader: # {{{
except Exception: except Exception:
pass pass
# else: # else:
# print('unknown record', idx, repr(content)) # print('unknown record', idx, repr(content))
if title: if title:
self.mi.title = replace_entities(clean_xml_chars(clean_ascii_chars(title))) self.mi.title = replace_entities(clean_xml_chars(clean_ascii_chars(title)))
@ -184,7 +184,7 @@ class EXTHHeader: # {{{
if self.kf8_header == NULL_INDEX: if self.kf8_header == NULL_INDEX:
self.kf8_header = None self.kf8_header = None
# else: # else:
# print('unhandled metadata record', idx, repr(content)) # print('unhandled metadata record', idx, repr(content))
# }}} # }}}

View File

@ -140,7 +140,7 @@ class CoverManager:
self.log.warning('Failed to read cover dimensions') self.log.warning('Failed to read cover dimensions')
width, height = 600, 800 width, height = 600, 800
# if self.preserve_aspect_ratio: # if self.preserve_aspect_ratio:
# width, height = 600, 800 # width, height = 600, 800
self.svg_template = self.svg_template.replace('__viewbox__', self.svg_template = self.svg_template.replace('__viewbox__',
'0 0 %d %d'%(width, height)) '0 0 %d %d'%(width, height))
self.svg_template = self.svg_template.replace('__width__', self.svg_template = self.svg_template.replace('__width__',

View File

@ -199,7 +199,7 @@ class Text(Element):
self.font = {} self.font = {}
self.font_size = 0.0 self.font_size = 0.0
self.font_size_em = 0.0 self.font_size_em = 0.0
# self.color = 0 # self.color = 0
text.tail = '' text.tail = ''
self.text_as_string = etree.tostring(text, method='text', encoding='unicode') self.text_as_string = etree.tostring(text, method='text', encoding='unicode')
@ -373,9 +373,9 @@ class Text(Element):
self.raw = matchObj.group(1)+matchObj.group(3)+m2+matchObj.group(4)+m5+matchObj.group(6) self.raw = matchObj.group(1)+matchObj.group(3)+m2+matchObj.group(4)+m5+matchObj.group(6)
# This needs more work # This needs more work
# if sub_super < 0: # if sub_super < 0:
# other.raw = '<sup>' + other.raw + '</sup>' # other.raw = '<sup>' + other.raw + '</sup>'
# elif sub_super > 0: # elif sub_super > 0:
# other.raw = '<sub>' + other.raw + '</sub>' # other.raw = '<sub>' + other.raw + '</sub>'
if has_float: if has_float:
self.raw += has_float self.raw += has_float
@ -413,7 +413,7 @@ class Paragraph(Text):
else: else:
self.font = {} self.font = {}
self.font_size = 0 self.font_size = 0
# self.color = 0 # self.color = 0
text.tail = '' text.tail = ''
self.text_as_string = etree.tostring(text, method='text', self.text_as_string = etree.tostring(text, method='text',
@ -1106,8 +1106,8 @@ class Page:
t = self.texts[0] t = self.texts[0]
# match = self.find_match(t) # match = self.find_match(t)
# while match is not None: # while match is not None:
# self.texts.remove(match) # self.texts.remove(match)
# match = self.find_match(t) # match = self.find_match(t)
self.texts.remove(t) self.texts.remove(t)
if len(opts.pdf_footer_regex) > 0 \ if len(opts.pdf_footer_regex) > 0 \
@ -1121,8 +1121,8 @@ class Page:
t = self.texts[-1] t = self.texts[-1]
# match = self.find_match(t) # match = self.find_match(t)
# while match is not None: # while match is not None:
# self.texts.remove(match) # self.texts.remove(match)
# match = self.find_match(t) # match = self.find_match(t)
self.texts.remove(t) self.texts.remove(t)
def create_page_format(self, stats, opts): def create_page_format(self, stats, opts):
@ -1343,7 +1343,7 @@ class Page:
# self.elements = list(self.texts) # self.elements = list(self.texts)
# for img in page.xpath('descendant::img'): # for img in page.xpath('descendant::img'):
# self.elements.append(Image(img, self.opts, self.log, idc)) # self.elements.append(Image(img, self.opts, self.log, idc))
# self.elements.sort(cmp=lambda x,y:cmp(x.top, y.top)) # self.elements.sort(cmp=lambda x,y:cmp(x.top, y.top))
return return
@ -1802,7 +1802,7 @@ class PDFDocument:
break # Short page break # Short page
t = page.texts[head_ind].text_as_string t = page.texts[head_ind].text_as_string
# if len(page.texts) > 1 and page.texts[0].top == page.texts[1].top: # if len(page.texts) > 1 and page.texts[0].top == page.texts[1].top:
# t += ' ' + page.texts[1].text_as_string # t += ' ' + page.texts[1].text_as_string
if len(head_text[head_ind]) == 0: if len(head_text[head_ind]) == 0:
head_text[head_ind] = t head_text[head_ind] = t
else: else:
@ -1835,7 +1835,7 @@ class PDFDocument:
break # Short page break # Short page
t = page.texts[-foot_ind-1].text_as_string t = page.texts[-foot_ind-1].text_as_string
# if len(page.texts) > 1 and page.texts[-1].top == page.texts[-2].top: # if len(page.texts) > 1 and page.texts[-1].top == page.texts[-2].top:
# t += ' ' + page.texts[-2].text_as_string # t += ' ' + page.texts[-2].text_as_string
if len(foot_text[foot_ind]) == 0: if len(foot_text[foot_ind]) == 0:
foot_text[foot_ind] = t foot_text[foot_ind] = t
else: else:

View File

@ -356,7 +356,7 @@ class PMLMLizer:
text += self.close_tags(tags) text += self.close_tags(tags)
# if tag in SEPARATE_TAGS: # if tag in SEPARATE_TAGS:
# text.append('\n\n') # text.append('\n\n')
if style['page-break-after'] == 'always': if style['page-break-after'] == 'always':
text.append(r'\p') text.append(r'\p')

View File

@ -188,7 +188,7 @@ class Document:
if append: if append:
parent.append(sibling) parent.append(sibling)
# if output is not None: # if output is not None:
# output.append(best_elem) # output.append(best_elem)
return output.find('body') return output.find('body')
def select_best_candidate(self, candidates): def select_best_candidate(self, candidates):
@ -208,7 +208,7 @@ class Document:
for i in elem.findall('.//a'): for i in elem.findall('.//a'):
link_length += text_length(i) link_length += text_length(i)
# if len(elem.findall(".//div") or elem.findall(".//p")): # if len(elem.findall(".//div") or elem.findall(".//p")):
# link_length = link_length # link_length = link_length
total_length = text_length(elem) total_length = text_length(elem)
return float(link_length) / max(total_length, 1) return float(link_length) / max(total_length, 1)
@ -243,7 +243,7 @@ class Document:
content_score += len(inner_text.split(',')) content_score += len(inner_text.split(','))
content_score += min((inner_text_len / 100), 3) content_score += min((inner_text_len / 100), 3)
# if elem not in candidates: # if elem not in candidates:
# candidates[elem] = self.score_node(elem) # candidates[elem] = self.score_node(elem)
# WTF? candidates[elem]['content_score'] += content_score # WTF? candidates[elem]['content_score'] += content_score
candidates[parent_node]['content_score'] += content_score candidates[parent_node]['content_score'] += content_score
@ -384,16 +384,16 @@ class Document:
else: else:
content_score = 0 content_score = 0
# if parent_node is not None: # if parent_node is not None:
# pweight = self.class_weight(parent_node) + content_score # pweight = self.class_weight(parent_node) + content_score
# pname = describe(parent_node) # pname = describe(parent_node)
# else: # else:
# pweight = 0 # pweight = 0
# pname = "no parent" # pname = "no parent"
to_remove = False to_remove = False
reason = '' reason = ''
# if el.tag == 'div' and counts["img"] >= 1: # if el.tag == 'div' and counts["img"] >= 1:
# continue # continue
if counts['p'] and counts['img'] > counts['p']: if counts['p'] and counts['img'] > counts['p']:
reason = 'too many images (%s)' % counts['img'] reason = 'too many images (%s)' % counts['img']
to_remove = True to_remove = True
@ -415,24 +415,24 @@ class Document:
elif (counts['embed'] == 1 and content_length < 75) or counts['embed'] > 1: elif (counts['embed'] == 1 and content_length < 75) or counts['embed'] > 1:
reason = '<embed>s with too short content length, or too many <embed>s' reason = '<embed>s with too short content length, or too many <embed>s'
to_remove = True to_remove = True
# if el.tag == 'div' and counts['img'] >= 1 and to_remove: # if el.tag == 'div' and counts['img'] >= 1 and to_remove:
# imgs = el.findall('.//img') # imgs = el.findall('.//img')
# valid_img = False # valid_img = False
# self.debug(tounicode(el)) # self.debug(tounicode(el))
# for img in imgs: # for img in imgs:
# #
# height = img.get('height') # height = img.get('height')
# text_length = img.get('text_length') # text_length = img.get('text_length')
# self.debug ("height %s text_length %s" %(repr(height), repr(text_length))) # self.debug ("height %s text_length %s" %(repr(height), repr(text_length)))
# if to_int(height) >= 100 or to_int(text_length) >= 100: # if to_int(height) >= 100 or to_int(text_length) >= 100:
# valid_img = True # valid_img = True
# self.debug("valid image" + tounicode(img)) # self.debug("valid image" + tounicode(img))
# break # break
# if valid_img: # if valid_img:
# to_remove = False # to_remove = False
# self.debug("Allowing %s" %el.text_content()) # self.debug("Allowing %s" %el.text_content())
# for desnode in self.tags(el, "table", "ul", "div"): # for desnode in self.tags(el, "table", "ul", "div"):
# allowed[desnode] = True # allowed[desnode] = True
# find x non empty preceding and succeeding siblings # find x non empty preceding and succeeding siblings
i, j = 0, 0 i, j = 0, 0

View File

@ -188,7 +188,7 @@ class Hex2Utf8:
self.__dingbats_dict.update(ms_dingbats_dict) self.__dingbats_dict.update(ms_dingbats_dict)
# load dictionary for caps, and make a string for the replacement # load dictionary for caps, and make a string for the replacement
self.__caps_uni_dict = char_map_obj.get_char_map(map='caps_uni') self.__caps_uni_dict = char_map_obj.get_char_map(map='caps_uni')
# # print(self.__caps_uni_dict) # print(self.__caps_uni_dict)
# don't think I'll need this # don't think I'll need this
# keys = self.__caps_uni_dict.keys() # keys = self.__caps_uni_dict.keys()
# self.__caps_uni_replace = '|'.join(keys) # self.__caps_uni_replace = '|'.join(keys)

View File

@ -371,9 +371,9 @@ class MakeLists:
% (id) % (id)
) )
# sys.stderr.write(repr(self.__list_of_lists)) # sys.stderr.write(repr(self.__list_of_lists))
# if self.__run_level > 3: # if self.__run_level > 3:
# msg = 'level is "%s"\n' % self.__run_level # msg = 'level is "%s"\n' % self.__run_level
# self.__bug_handler # self.__bug_handler
def __write_start_item(self): def __write_start_item(self):
self.__write_obj.write('mi<mk<item_start\n') self.__write_obj.write('mi<mk<item_start\n')

View File

@ -34,15 +34,15 @@ class ParseOptions:
def __init__(self, system_string, options_dict): def __init__(self, system_string, options_dict):
self.__system_string = system_string[1:] self.__system_string = system_string[1:]
long_list = self.__make_long_list_func(options_dict) long_list = self.__make_long_list_func(options_dict)
# # print(long_list) # print(long_list)
short_list = self.__make_short_list_func(options_dict) short_list = self.__make_short_list_func(options_dict)
# # print(short_list) # print(short_list)
self.__legal_options = long_list + short_list self.__legal_options = long_list + short_list
# # print(self.__legal_options) # print(self.__legal_options)
self.__short_long_dict = self.__make_short_long_dict_func(options_dict) self.__short_long_dict = self.__make_short_long_dict_func(options_dict)
# # print(self.__short_long_dict) # print(self.__short_long_dict)
self.__opt_with_args = self.__make_options_with_arg_list(options_dict) self.__opt_with_args = self.__make_options_with_arg_list(options_dict)
# # print(self.__opt_with_args) # print(self.__opt_with_args)
self.__options_okay = 1 self.__options_okay = 1
def __make_long_list_func(self, options_dict): def __make_long_list_func(self, options_dict):
@ -256,16 +256,16 @@ class ParseOptions:
def parse_options(self): def parse_options(self):
self.__system_string = self.__sub_short_with_long() self.__system_string = self.__sub_short_with_long()
# # print('subbed list is %s' % self.__system_string) # print('subbed list is %s' % self.__system_string)
self.__system_string = self.__pair_arg_with_option() self.__system_string = self.__pair_arg_with_option()
# # print('list with pairing is %s' % self.__system_string) # print('list with pairing is %s' % self.__system_string)
options, arguments = self.__get_just_options() options, arguments = self.__get_just_options()
# # print('options are %s ' % options) # print('options are %s ' % options)
# # print('arguments are %s ' % arguments) # print('arguments are %s ' % arguments)
self.__is_legal_option_func() self.__is_legal_option_func()
if self.__options_okay: if self.__options_okay:
options_dict = self.__make_options_dict(options) options_dict = self.__make_options_dict(options)
# # print(options_dict) # print(options_dict)
return options_dict, arguments return options_dict, arguments
else: else:
return 0,0 return 0,0

View File

@ -285,7 +285,7 @@ class Sections:
my_string += f'<{key}>{self.__section_values[key]}' my_string += f'<{key}>{self.__section_values[key]}'
my_string += '\n' my_string += '\n'
my_string += self.__mark_end my_string += self.__mark_end
# # my_string += line # my_string += line
if self.__state == 'body': if self.__state == 'body':
self.__write_obj.write(my_string) self.__write_obj.write(my_string)
elif self.__state == 'sec_in_field': elif self.__state == 'sec_in_field':

View File

@ -127,8 +127,8 @@ class SNBFile:
return False return False
if self.rev80 != SNBFile.REV80: if self.rev80 != SNBFile.REV80:
return False return False
# if self.revA3 != SNBFile.REVA3: # if self.revA3 != SNBFile.REVA3:
# return False # return False
if self.revZ1 != SNBFile.REVZ1: if self.revZ1 != SNBFile.REVZ1:
return False return False
if self.revZ2 != SNBFile.REVZ2: if self.revZ2 != SNBFile.REVZ2:

View File

@ -57,7 +57,7 @@ CALIBRE_SNB_PRE_TAG = '<$$calibre_snb_pre_tag$$>'
class SNBMLizer: class SNBMLizer:
curSubItem = '' curSubItem = ''
# curText = [ ] # curText = [ ]
def __init__(self, log): def __init__(self, log):
self.log = log self.log = log
@ -86,7 +86,7 @@ class SNBMLizer:
output = [''] output = ['']
stylizer = Stylizer(self.item.data, self.item.href, self.oeb_book, self.opts, self.opts.output_profile) stylizer = Stylizer(self.item.data, self.item.href, self.oeb_book, self.opts, self.opts.output_profile)
content = etree.tostring(self.item.data.find(XHTML('body')), encoding='unicode') content = etree.tostring(self.item.data.find(XHTML('body')), encoding='unicode')
# content = self.remove_newlines(content) # content = self.remove_newlines(content)
trees = {} trees = {}
for subitem, subtitle in self.subitems: for subitem, subtitle in self.subitems:
snbcTree = etree.Element('snbc') snbcTree = etree.Element('snbc')

View File

@ -1521,8 +1521,7 @@ class Editor(QWidget): # {{{
self.editor.html = v self.editor.html = v
def change_tab(self, index): def change_tab(self, index):
# print('reloading:', (index and self.wyswyg_dirty) or (not index and # print('reloading:', (index and self.wyswyg_dirty) or (not index and self.source_dirty))
# self.source_dirty))
if index == 1: # changing to code view if index == 1: # changing to code view
if self.wyswyg_dirty: if self.wyswyg_dirty:
self.code_edit.setPlainText(self.editor.html) self.code_edit.setPlainText(self.editor.html)

View File

@ -89,7 +89,7 @@ class TabbedDeviceConfig(QTabWidget):
self.all_formats = set(self.all_formats) | set(BOOK_EXTENSIONS) self.all_formats = set(self.all_formats) | set(BOOK_EXTENSIONS)
self.base = QWidget(self) self.base = QWidget(self)
# self.insertTab(0, self.base, _('Configure %s') % self.device.current_friendly_name) # self.insertTab(0, self.base, _('Configure %s') % self.device.current_friendly_name)
self.insertTab(0, self.base, _('File formats')) self.insertTab(0, self.base, _('File formats'))
l = self.base.l = QGridLayout(self.base) l = self.base.l = QGridLayout(self.base)
self.base.setLayout(l) self.base.setLayout(l)
@ -392,9 +392,9 @@ if __name__ == '__main__':
app = Application([]) app = Application([])
dev = KOBO(None) dev = KOBO(None)
debug_print('KOBO:', KOBO) debug_print('KOBO:', KOBO)
# dev.startup() # dev.startup()
# cd = dev.detect_managed_devices(s.devices) # cd = dev.detect_managed_devices(s.devices)
# dev.open(cd, 'test') # dev.open(cd, 'test')
cw = dev.config_widget() cw = dev.config_widget()
d = QDialog() d = QDialog()
d.l = QVBoxLayout() d.l = QVBoxLayout()

View File

@ -1127,8 +1127,8 @@ class BooksModel(QAbstractTableModel): # {{{
cname = self.column_map[index.column()] cname = self.column_map[index.column()]
return self.styled_columns.get(cname) return self.styled_columns.get(cname)
# elif role == Qt.ItemDataRole.ToolTipRole and index.isValid(): # elif role == Qt.ItemDataRole.ToolTipRole and index.isValid():
# if self.column_map[index.column()] in self.editable_cols: # if self.column_map[index.column()] in self.editable_cols:
# return (_("Double click to <b>edit</b> me<br><br>")) # return (_("Double click to <b>edit</b> me<br><br>"))
return None return None
def headerData(self, section, orientation, role): def headerData(self, section, orientation, role):

View File

@ -71,5 +71,5 @@ class BeamEBooksDEStore(BasicStoreConfig, StorePlugin):
s.price = price s.price = price
s.drm = SearchResult.DRM_UNLOCKED s.drm = SearchResult.DRM_UNLOCKED
s.detail_item = id_ s.detail_item = id_
# s.formats = None # s.formats = None
yield s yield s

View File

@ -78,9 +78,9 @@ class EmpikStore(BasicStoreConfig, StorePlugin):
price = ''.join(data.xpath('.//div[@class="price ta-price-tile "]/text()')) price = ''.join(data.xpath('.//div[@class="price ta-price-tile "]/text()'))
# with closing(br.open('https://empik.com' + id.strip(), timeout=timeout/4)) as nf: # with closing(br.open('https://empik.com' + id.strip(), timeout=timeout/4)) as nf:
# idata = html.fromstring(nf.read()) # idata = html.fromstring(nf.read())
# crawled = idata.xpath('.//a[(@class="chosen hrefstyle") or (@class="connectionsLink hrefstyle")]/text()') # crawled = idata.xpath('.//a[(@class="chosen hrefstyle") or (@class="connectionsLink hrefstyle")]/text()')
# formats = ','.join([re.sub(r'ebook, ','', x.strip()) for x in crawled if 'ebook' in x]) # formats = ','.join([re.sub(r'ebook, ','', x.strip()) for x in crawled if 'ebook' in x])
counter -= 1 counter -= 1

View File

@ -56,7 +56,7 @@ def convert_single_ebook(parent, db, book_ids, auto_conversion=False, # {{{
if result == QDialog.DialogCode.Accepted: if result == QDialog.DialogCode.Accepted:
# if not convert_existing(parent, db, [book_id], d.output_format): # if not convert_existing(parent, db, [book_id], d.output_format):
# continue # continue
mi = db.get_metadata(book_id, True) mi = db.get_metadata(book_id, True)
in_file = PersistentTemporaryFile('.'+d.input_format) in_file = PersistentTemporaryFile('.'+d.input_format)

View File

@ -822,10 +822,10 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE;
func(self.conn) func(self.conn)
def close(self): def close(self):
# global _lock_file # global _lock_file
# _lock_file.close() # _lock_file.close()
# os.unlink(_lock_file.name) # os.unlink(_lock_file.name)
# _lock_file = None # _lock_file = None
self.conn.close() self.conn.close()
@property @property

View File

@ -99,7 +99,7 @@ def generate():
output = struct.pack('Iiiiiii', output = struct.pack('Iiiiiii',
0x950412de, # Magic 0x950412de, # Magic
0, # Version 0, # Version
len(keys), # # of entries len(keys), # of entries
7*4, # start of key index 7*4, # start of key index
7*4+len(keys)*8, # start of value index 7*4+len(keys)*8, # start of value index
0, 0) # size and offset of hash table 0, 0) # size and offset of hash table

View File

@ -38,9 +38,9 @@ class AllIpAddressesGetter(Thread):
def run(self): def run(self):
global _all_ip_addresses global _all_ip_addresses
# print('sleeping') # print('sleeping')
# time.sleep(15) # time.sleep(15)
# print('slept') # print('slept')
_all_ip_addresses = self.get_all_ips() _all_ip_addresses = self.get_all_ips()

View File

@ -424,8 +424,8 @@ class SearchQueryParser:
# return self.universal_set().difference(self.evaluate(argument[0])) # return self.universal_set().difference(self.evaluate(argument[0]))
return candidates.difference(self.evaluate(argument[0], candidates)) return candidates.difference(self.evaluate(argument[0], candidates))
# def evaluate_parenthesis(self, argument, candidates): # def evaluate_parenthesis(self, argument, candidates):
# return self.evaluate(argument[0], candidates) # return self.evaluate(argument[0], candidates)
def _check_saved_search_recursion(self, query): def _check_saved_search_recursion(self, query):
if query.startswith('='): if query.startswith('='):

View File

@ -1068,10 +1068,10 @@ class ZipFile:
zd = _ZipDecrypter(pwd) zd = _ZipDecrypter(pwd)
# The first 12 bytes in the cypher stream is an encryption header # The first 12 bytes in the cypher stream is an encryption header
# used to strengthen the algorithm. The first 11 bytes are # used to strengthen the algorithm. The first 11 bytes are
# completely random, while the 12th contains the MSB of the CRC, # completely random, while the 12th contains the MSB of the CRC,
# or the MSB of the file time depending on the header type # or the MSB of the file time depending on the header type
# and is used to check the correctness of the password. # and is used to check the correctness of the password.
byts = zef_file.read(12) byts = zef_file.read(12)
h = list(map(zd, bytearray(byts[0:12]))) h = list(map(zd, bytearray(byts[0:12])))
if zinfo.flag_bits & 0x8: if zinfo.flag_bits & 0x8:

View File

@ -104,7 +104,7 @@ Has content : %s
def is_same_as(self, other_article): def is_same_as(self, other_article):
# if self.title != getattr(other_article, 'title', False): # if self.title != getattr(other_article, 'title', False):
# return False # return False
if self.url: if self.url:
return self.url == getattr(other_article, 'url', False) return self.url == getattr(other_article, 'url', False)
return self.content == getattr(other_article, 'content', False) return self.content == getattr(other_article, 'content', False)

View File

@ -52,28 +52,28 @@ def Title(**args):
# these elements # these elements
# def Contributor(**args): # def Contributor(**args):
# return Element(qname = (DCNS,'contributor'), **args) # return Element(qname = (DCNS,'contributor'), **args)
# def Coverage(**args): # def Coverage(**args):
# return Element(qname = (DCNS,'coverage'), **args) # return Element(qname = (DCNS,'coverage'), **args)
# def Format(**args): # def Format(**args):
# return Element(qname = (DCNS,'format'), **args) # return Element(qname = (DCNS,'format'), **args)
# def Identifier(**args): # def Identifier(**args):
# return Element(qname = (DCNS,'identifier'), **args) # return Element(qname = (DCNS,'identifier'), **args)
# def Publisher(**args): # def Publisher(**args):
# return Element(qname = (DCNS,'publisher'), **args) # return Element(qname = (DCNS,'publisher'), **args)
# def Relation(**args): # def Relation(**args):
# return Element(qname = (DCNS,'relation'), **args) # return Element(qname = (DCNS,'relation'), **args)
# def Rights(**args): # def Rights(**args):
# return Element(qname = (DCNS,'rights'), **args) # return Element(qname = (DCNS,'rights'), **args)
# def Source(**args): # def Source(**args):
# return Element(qname = (DCNS,'source'), **args) # return Element(qname = (DCNS,'source'), **args)
# def Type(**args): # def Type(**args):
# return Element(qname = (DCNS,'type'), **args) # return Element(qname = (DCNS,'type'), **args)

File diff suppressed because it is too large Load Diff

View File

@ -424,22 +424,22 @@ class ODF2XHTML(handler.ContentHandler):
(OFFICENS, 'scripts'):(self.s_ignorexml, None), (OFFICENS, 'scripts'):(self.s_ignorexml, None),
(OFFICENS, 'settings'):(self.s_ignorexml, None), (OFFICENS, 'settings'):(self.s_ignorexml, None),
(PRESENTATIONNS, 'notes'):(self.s_ignorexml, None), (PRESENTATIONNS, 'notes'):(self.s_ignorexml, None),
# (STYLENS, "default-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout), # (STYLENS, "default-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout),
(STYLENS, 'default-page-layout'):(self.s_ignorexml, None), (STYLENS, 'default-page-layout'):(self.s_ignorexml, None),
(STYLENS, 'default-style'):(self.s_style_default_style, self.e_style_default_style), (STYLENS, 'default-style'):(self.s_style_default_style, self.e_style_default_style),
(STYLENS, 'drawing-page-properties'):(self.s_style_handle_properties, None), (STYLENS, 'drawing-page-properties'):(self.s_style_handle_properties, None),
(STYLENS, 'font-face'):(self.s_style_font_face, None), (STYLENS, 'font-face'):(self.s_style_font_face, None),
# (STYLENS, "footer"):(self.s_style_footer, self.e_style_footer), # (STYLENS, "footer"):(self.s_style_footer, self.e_style_footer),
# (STYLENS, "footer-style"):(self.s_style_footer_style, None), # (STYLENS, "footer-style"):(self.s_style_footer_style, None),
(STYLENS, 'graphic-properties'):(self.s_style_handle_properties, None), (STYLENS, 'graphic-properties'):(self.s_style_handle_properties, None),
(STYLENS, 'handout-master'):(self.s_ignorexml, None), (STYLENS, 'handout-master'):(self.s_ignorexml, None),
# (STYLENS, "header"):(self.s_style_header, self.e_style_header), # (STYLENS, "header"):(self.s_style_header, self.e_style_header),
# (STYLENS, "header-footer-properties"):(self.s_style_handle_properties, None), # (STYLENS, "header-footer-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "header-style"):(self.s_style_header_style, None), # (STYLENS, "header-style"):(self.s_style_header_style, None),
(STYLENS, 'master-page'):(self.s_style_master_page, None), (STYLENS, 'master-page'):(self.s_style_master_page, None),
(STYLENS, 'page-layout-properties'):(self.s_style_handle_properties, None), (STYLENS, 'page-layout-properties'):(self.s_style_handle_properties, None),
(STYLENS, 'page-layout'):(self.s_style_page_layout, self.e_style_page_layout), (STYLENS, 'page-layout'):(self.s_style_page_layout, self.e_style_page_layout),
# (STYLENS, "page-layout"):(self.s_ignorexml, None), # (STYLENS, "page-layout"):(self.s_ignorexml, None),
(STYLENS, 'paragraph-properties'):(self.s_style_handle_properties, None), (STYLENS, 'paragraph-properties'):(self.s_style_handle_properties, None),
(STYLENS, 'style'):(self.s_style_style, self.e_style_style), (STYLENS, 'style'):(self.s_style_style, self.e_style_style),
(STYLENS, 'table-cell-properties'):(self.s_style_handle_properties, None), (STYLENS, 'table-cell-properties'):(self.s_style_handle_properties, None),
@ -792,10 +792,10 @@ class ODF2XHTML(handler.ContentHandler):
return # Added by Kovid return # Added by Kovid
objhref = attrs[(XLINKNS,'href')] objhref = attrs[(XLINKNS,'href')]
# Remove leading "./": from "./Object 1" to "Object 1" # Remove leading "./": from "./Object 1" to "Object 1"
# objhref = objhref [2:] # objhref = objhref [2:]
# Not using os.path.join since it fails to find the file on Windows. # Not using os.path.join since it fails to find the file on Windows.
# objcontentpath = '/'.join([objhref, 'content.xml']) # objcontentpath = '/'.join([objhref, 'content.xml'])
for c in self.document.childnodes: for c in self.document.childnodes:
if c.folder == objhref: if c.folder == objhref:
@ -839,7 +839,7 @@ class ODF2XHTML(handler.ContentHandler):
if (FONS,'min-height') in attrs: if (FONS,'min-height') in attrs:
style = style + 'min-height:' + attrs[(FONS,'min-height')] + ';' style = style + 'min-height:' + attrs[(FONS,'min-height')] + ';'
self.opentag('div') self.opentag('div')
# self.opentag('div', {'style': style}) # self.opentag('div', {'style': style})
def e_draw_textbox(self, tag, attrs): def e_draw_textbox(self, tag, attrs):
''' End the <draw:text-box> ''' End the <draw:text-box>
@ -937,11 +937,11 @@ dl.notes dd:last-of-type { page-break-after: avoid }
self.opentag('dl', {'class':'notes'}) self.opentag('dl', {'class':'notes'})
for key in range(1,self.currentnote+1): for key in range(1,self.currentnote+1):
note = self.notedict[key] note = self.notedict[key]
# for key,note in self.notedict.items(): # for key,note in self.notedict.items():
self.opentag('dt', {'id':f'footnote-{key}'}) self.opentag('dt', {'id':f'footnote-{key}'})
# self.opentag('sup') # self.opentag('sup')
# self.writeout(escape(note['citation'])) # self.writeout(escape(note['citation']))
# self.closetag('sup', False) # self.closetag('sup', False)
self.writeout('[') self.writeout('[')
self.opentag('a', {'href': f'#citation-{key}'}) self.opentag('a', {'href': f'#citation-{key}'})
self.writeout(f'{key}') self.writeout(f'{key}')
@ -1030,7 +1030,7 @@ dl.notes dd:last-of-type { page-break-after: avoid }
family = attrs[(STYLENS,'family')] family = attrs[(STYLENS,'family')]
htmlfamily = self.familymap.get(family,'unknown') htmlfamily = self.familymap.get(family,'unknown')
self.currentstyle = htmlfamily self.currentstyle = htmlfamily
# self.stylestack.append(self.currentstyle) # self.stylestack.append(self.currentstyle)
self.styledict[self.currentstyle] = {} self.styledict[self.currentstyle] = {}
def e_style_default_style(self, tag, attrs): def e_style_default_style(self, tag, attrs):
@ -1475,7 +1475,7 @@ dl.notes dd:last-of-type { page-break-after: avoid }
'class': 'citation', 'class': 'citation',
'id':f'citation-{self.currentnote}', 'id':f'citation-{self.currentnote}',
}) })
# self.writeout( escape(mark) ) # self.writeout( escape(mark) )
# Since HTML only knows about endnotes, there is too much risk that the # Since HTML only knows about endnotes, there is too much risk that the
# marker is reused in the source. Therefore we force numeric markers # marker is reused in the source. Therefore we force numeric markers
self.writeout(str(self.currentnote)) self.writeout(str(self.currentnote))
@ -1672,11 +1672,11 @@ class ODF2XHTMLembedded(ODF2XHTML):
# Tags # Tags
self.generate_css = generate_css self.generate_css = generate_css
self.elements = { self.elements = {
# (DCNS, 'title'): (self.s_processcont, self.e_dc_title), # (DCNS, 'title'): (self.s_processcont, self.e_dc_title),
# (DCNS, 'language'): (self.s_processcont, self.e_dc_contentlanguage), # (DCNS, 'language'): (self.s_processcont, self.e_dc_contentlanguage),
# (DCNS, 'creator'): (self.s_processcont, self.e_dc_metatag), # (DCNS, 'creator'): (self.s_processcont, self.e_dc_metatag),
# (DCNS, 'description'): (self.s_processcont, self.e_dc_metatag), # (DCNS, 'description'): (self.s_processcont, self.e_dc_metatag),
# (DCNS, 'date'): (self.s_processcont, self.e_dc_metatag), # (DCNS, 'date'): (self.s_processcont, self.e_dc_metatag),
(DRAWNS, 'frame'): (self.s_draw_frame, self.e_draw_frame), (DRAWNS, 'frame'): (self.s_draw_frame, self.e_draw_frame),
(DRAWNS, 'image'): (self.s_draw_image, None), (DRAWNS, 'image'): (self.s_draw_image, None),
(DRAWNS, 'fill-image'): (self.s_draw_fill_image, None), (DRAWNS, 'fill-image'): (self.s_draw_fill_image, None),
@ -1685,48 +1685,48 @@ class ODF2XHTMLembedded(ODF2XHTML):
(DRAWNS, 'object'): (self.s_draw_object, None), (DRAWNS, 'object'): (self.s_draw_object, None),
(DRAWNS, 'object-ole'): (self.s_draw_object_ole, None), (DRAWNS, 'object-ole'): (self.s_draw_object_ole, None),
(DRAWNS, 'text-box'): (self.s_draw_textbox, self.e_draw_textbox), (DRAWNS, 'text-box'): (self.s_draw_textbox, self.e_draw_textbox),
# (METANS, 'creation-date'):(self.s_processcont, self.e_dc_metatag), # (METANS, 'creation-date'):(self.s_processcont, self.e_dc_metatag),
# (METANS, 'generator'):(self.s_processcont, self.e_dc_metatag), # (METANS, 'generator'):(self.s_processcont, self.e_dc_metatag),
# (METANS, 'initial-creator'): (self.s_processcont, self.e_dc_metatag), # (METANS, 'initial-creator'): (self.s_processcont, self.e_dc_metatag),
# (METANS, 'keyword'): (self.s_processcont, self.e_dc_metatag), # (METANS, 'keyword'): (self.s_processcont, self.e_dc_metatag),
(NUMBERNS, 'boolean-style'):(self.s_ignorexml, None), (NUMBERNS, 'boolean-style'):(self.s_ignorexml, None),
(NUMBERNS, 'currency-style'):(self.s_ignorexml, None), (NUMBERNS, 'currency-style'):(self.s_ignorexml, None),
(NUMBERNS, 'date-style'):(self.s_ignorexml, None), (NUMBERNS, 'date-style'):(self.s_ignorexml, None),
(NUMBERNS, 'number-style'):(self.s_ignorexml, None), (NUMBERNS, 'number-style'):(self.s_ignorexml, None),
(NUMBERNS, 'text-style'):(self.s_ignorexml, None), (NUMBERNS, 'text-style'):(self.s_ignorexml, None),
# (OFFICENS, "automatic-styles"):(self.s_office_automatic_styles, None), # (OFFICENS, "automatic-styles"):(self.s_office_automatic_styles, None),
# (OFFICENS, "document-content"):(self.s_office_document_content, self.e_office_document_content), # (OFFICENS, "document-content"):(self.s_office_document_content, self.e_office_document_content),
(OFFICENS, 'forms'):(self.s_ignorexml, None), (OFFICENS, 'forms'):(self.s_ignorexml, None),
# (OFFICENS, "master-styles"):(self.s_office_master_styles, None), # (OFFICENS, "master-styles"):(self.s_office_master_styles, None),
(OFFICENS, 'meta'):(self.s_ignorecont, None), (OFFICENS, 'meta'):(self.s_ignorecont, None),
# (OFFICENS, "presentation"):(self.s_office_presentation, self.e_office_presentation), # (OFFICENS, "presentation"):(self.s_office_presentation, self.e_office_presentation),
# (OFFICENS, "spreadsheet"):(self.s_office_spreadsheet, self.e_office_spreadsheet), # (OFFICENS, "spreadsheet"):(self.s_office_spreadsheet, self.e_office_spreadsheet),
# (OFFICENS, "styles"):(self.s_office_styles, None), # (OFFICENS, "styles"):(self.s_office_styles, None),
# (OFFICENS, "text"):(self.s_office_text, self.e_office_text), # (OFFICENS, "text"):(self.s_office_text, self.e_office_text),
(OFFICENS, 'scripts'):(self.s_ignorexml, None), (OFFICENS, 'scripts'):(self.s_ignorexml, None),
(PRESENTATIONNS, 'notes'):(self.s_ignorexml, None), (PRESENTATIONNS, 'notes'):(self.s_ignorexml, None),
# (STYLENS, "default-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout), # (STYLENS, "default-page-layout"):(self.s_style_default_page_layout, self.e_style_page_layout),
# (STYLENS, "default-page-layout"):(self.s_ignorexml, None), # (STYLENS, "default-page-layout"):(self.s_ignorexml, None),
# (STYLENS, "default-style"):(self.s_style_default_style, self.e_style_default_style), # (STYLENS, "default-style"):(self.s_style_default_style, self.e_style_default_style),
# (STYLENS, "drawing-page-properties"):(self.s_style_handle_properties, None), # (STYLENS, "drawing-page-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "font-face"):(self.s_style_font_face, None), # (STYLENS, "font-face"):(self.s_style_font_face, None),
# (STYLENS, "footer"):(self.s_style_footer, self.e_style_footer), # (STYLENS, "footer"):(self.s_style_footer, self.e_style_footer),
# (STYLENS, "footer-style"):(self.s_style_footer_style, None), # (STYLENS, "footer-style"):(self.s_style_footer_style, None),
# (STYLENS, "graphic-properties"):(self.s_style_handle_properties, None), # (STYLENS, "graphic-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "handout-master"):(self.s_ignorexml, None), # (STYLENS, "handout-master"):(self.s_ignorexml, None),
# (STYLENS, "header"):(self.s_style_header, self.e_style_header), # (STYLENS, "header"):(self.s_style_header, self.e_style_header),
# (STYLENS, "header-footer-properties"):(self.s_style_handle_properties, None), # (STYLENS, "header-footer-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "header-style"):(self.s_style_header_style, None), # (STYLENS, "header-style"):(self.s_style_header_style, None),
# (STYLENS, "master-page"):(self.s_style_master_page, None), # (STYLENS, "master-page"):(self.s_style_master_page, None),
# (STYLENS, "page-layout-properties"):(self.s_style_handle_properties, None), # (STYLENS, "page-layout-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "page-layout"):(self.s_style_page_layout, self.e_style_page_layout), # (STYLENS, "page-layout"):(self.s_style_page_layout, self.e_style_page_layout),
# (STYLENS, "page-layout"):(self.s_ignorexml, None), # (STYLENS, "page-layout"):(self.s_ignorexml, None),
# (STYLENS, "paragraph-properties"):(self.s_style_handle_properties, None), # (STYLENS, "paragraph-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "style"):(self.s_style_style, self.e_style_style), # (STYLENS, "style"):(self.s_style_style, self.e_style_style),
# (STYLENS, "table-cell-properties"):(self.s_style_handle_properties, None), # (STYLENS, "table-cell-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "table-column-properties"):(self.s_style_handle_properties, None), # (STYLENS, "table-column-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "table-properties"):(self.s_style_handle_properties, None), # (STYLENS, "table-properties"):(self.s_style_handle_properties, None),
# (STYLENS, "text-properties"):(self.s_style_handle_properties, None), # (STYLENS, "text-properties"):(self.s_style_handle_properties, None),
(SVGNS, 'desc'): (self.s_ignorexml, None), (SVGNS, 'desc'): (self.s_ignorexml, None),
(TABLENS, 'covered-table-cell'): (self.s_ignorexml, None), (TABLENS, 'covered-table-cell'): (self.s_ignorexml, None),
(TABLENS, 'table-cell'): (self.s_table_table_cell, self.e_table_table_cell), (TABLENS, 'table-cell'): (self.s_table_table_cell, self.e_table_table_cell),

View File

@ -402,8 +402,8 @@ class OpenDocument:
zi.external_attr = UNIXPERMS zi.external_attr = UNIXPERMS
self._z.writestr(zi, fileobj) self._z.writestr(zi, fileobj)
# According to section 17.7.3 in ODF 1.1, the pictures folder should not have a manifest entry # According to section 17.7.3 in ODF 1.1, the pictures folder should not have a manifest entry
# if hasPictures: # if hasPictures:
# self.manifest.addElement(manifest.FileEntry(fullpath=f"{folder}Pictures/", mediatype="")) # self.manifest.addElement(manifest.FileEntry(fullpath=f"{folder}Pictures/", mediatype=""))
# Look in subobjects # Look in subobjects
subobjectnum = 1 subobjectnum = 1
for subobject in object.childobjects: for subobject in object.childobjects: