mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
comment formating (extra-edit)
This commit is contained in:
parent
dba73b96b7
commit
0ce6645f15
@ -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
|
||||||
]
|
]
|
||||||
|
@ -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
|
||||||
|
@ -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'}),
|
||||||
|
@ -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'
|
||||||
|
@ -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!
|
||||||
|
@ -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
|
||||||
|
@ -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')
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
|
||||||
|
@ -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))
|
||||||
|
@ -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
|
||||||
|
@ -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'
|
||||||
|
@ -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'
|
||||||
|
@ -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'
|
||||||
|
@ -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'
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
]
|
]
|
||||||
|
@ -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/'),
|
||||||
|
@ -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
|
||||||
|
@ -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/'),
|
||||||
|
@ -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'
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
]
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
]
|
||||||
|
@ -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/'),
|
|
||||||
#
|
|
||||||
]
|
]
|
||||||
|
@ -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 )|(?:: ))(.*?): (.*?)$')
|
||||||
|
|
||||||
|
@ -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/')
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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/')
|
||||||
]
|
]
|
||||||
|
@ -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'
|
||||||
|
@ -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'
|
||||||
|
@ -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'}),
|
||||||
|
@ -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'),
|
||||||
]
|
]
|
||||||
|
@ -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+'),
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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()
|
||||||
|
@ -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):
|
||||||
|
@ -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',
|
'ff': 'ff',
|
||||||
'fi': 'fi',
|
'fi': 'fi',
|
||||||
'fl': 'fl',
|
'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)]
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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'),
|
||||||
|
@ -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))
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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__',
|
||||||
|
@ -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:
|
||||||
|
@ -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')
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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')
|
||||||
|
@ -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
|
||||||
|
@ -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':
|
||||||
|
@ -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:
|
||||||
|
@ -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')
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
@ -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('='):
|
||||||
|
@ -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:
|
||||||
|
@ -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)
|
||||||
|
@ -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
@ -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),
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user