From 91c0aa0b1ff954adb9195fa4b452404ff81d1b3a Mon Sep 17 00:00:00 2001
From: unkn0w7n <51942695+unkn0w7n@users.noreply.github.com>
Date: Sun, 6 Oct 2024 12:19:34 +0530
Subject: [PATCH 1/2] natgeo
---
recipes/natgeo.recipe | 182 ++++-----------------
recipes/natgeohis.recipe | 178 +++------------------
recipes/natgeomag.recipe | 212 ++++++-------------------
src/calibre/gui2/dialogs/trim_image.py | 8 +-
src/calibre/web/site_parsers/natgeo.py | 156 ++++++++++++++++++
5 files changed, 259 insertions(+), 477 deletions(-)
create mode 100644 src/calibre/web/site_parsers/natgeo.py
diff --git a/recipes/natgeo.recipe b/recipes/natgeo.recipe
index bb403978e3..3c46c7ae35 100644
--- a/recipes/natgeo.recipe
+++ b/recipes/natgeo.recipe
@@ -1,151 +1,11 @@
#!/usr/bin/env python
# vim:fileencoding=utf-8
-from __future__ import absolute_import, division, print_function, unicode_literals
-
-import json
from pprint import pformat
-
-from calibre import prepare_string_for_xml as escape
-from calibre.utils.iso8601 import parse_iso8601
-from calibre.web.feeds.news import BasicNewsRecipe
-
-
-def classes(classes):
- q = frozenset(classes.split(' '))
- return dict(attrs={
- 'class': lambda x: x and frozenset(x.split()).intersection(q)})
-
-
-def extract_json(raw):
- s = raw.find("window['__natgeo__']")
- script = raw[s:raw.find('', s)]
- return json.loads(script[script.find('{'):].rstrip(';'))['page']['content']['prismarticle']
-
-
-def parse_contributors(grp):
- for item in grp:
- line = '
' + escape(item['title']) + ' '
- for c in item['contributors']:
- line += escape(c['displayName'])
- yield line + '
'
-
-
-def parse_lead_image(media):
- if 'image' in media:
- yield ''
- if 'dsc' in media['image']:
- yield '
'.format(
- escape(media['image']['src'], True), escape(media['image']['dsc'], True)
- )
- else:
- yield ''.format(escape(media['image']['src'], True))
- if 'caption' in media and 'credit' in media:
- yield '' + media['caption'] + ' ' + media['credit'] + '
'
- elif 'caption' in media:
- yield '' + media['caption'] + '
'
- yield ''
-
-
-def parse_inline(inl):
- if inl.get('content', {}).get('name', '') == 'Image':
- props = inl['content']['props']
- yield ''
- if 'image' in props:
- yield '
'.format(props['image']['src'])
- if 'caption' in props:
- yield '{}{}
'.format(
- props['caption'].get('text', ''), ' ' + props['caption'].get('credit', '')
- )
- yield ''
- if inl.get('content', {}).get('name', '') == 'ImageGroup':
- if 'images' in inl['content']['props']:
- for imgs in inl['content']['props']['images']:
- yield ''
- if 'src' in imgs:
- yield '
'.format(imgs['src'])
- if 'caption' in imgs:
- yield '{}{}
'.format(
- imgs['caption'].get('text', ''), ' ' + imgs['caption'].get('credit', '')
- )
- yield ''
-
-
-def parse_cont(content):
- for cont in content.get('content', {}):
- if isinstance(cont, dict):
- yield from parse_body(cont)
- if isinstance(cont, str):
- yield cont
-
-
-def parse_body(x):
- if isinstance(x, dict):
- if 'type' in x:
- tag = x['type']
- if tag == 'inline':
- yield ''.join(parse_inline(x))
- elif 'attrs' in x and 'href' in x.get('attrs', ''):
- yield '<' + tag + ' href="{}">'.format(x['attrs']['href'])
- for yld in parse_cont(x):
- yield yld
- yield '' + tag + '>'
- else:
- yield '<' + tag + '>'
- for yld in parse_cont(x):
- yield yld
- yield '' + tag + '>'
- elif isinstance(x, list):
- for y in x:
- if isinstance(y, dict):
- yield from parse_body(y)
-
-
-def parse_article(edg):
- sc = edg['schma']
- yield '' + escape(edg['sctn']) + '
'
- yield '' + escape(sc['sclTtl']) + '
'
- yield '' + escape(sc['sclDsc']) + '
'
- yield ''
- for line in parse_contributors(edg.get('cntrbGrp', {})):
- yield line
- ts = parse_iso8601(edg['mdDt'], as_utc=False).strftime('%B %d, %Y')
- yield '
Published: ' + escape(ts) + '
'
- if 'readTime' in edg:
- yield '' + escape(edg['readTime']) + '
'
- yield ''
- if edg.get('ldMda', {}).get('cmsType') == 'image':
- for line in parse_lead_image(edg['ldMda']):
- yield line
- for main in edg['prismData']['mainComponents']:
- if main['name'] == 'Body':
- for item in main['props']['body']:
- if isinstance(item, dict):
- if item.get('type', '') == 'inline':
- yield ''.join(parse_inline(item))
- elif isinstance(item, list):
- for line in item:
- yield ''.join(parse_body(line))
-
-
-def article_parse(data):
- yield ""
- for frm in data['frms']:
- if not frm:
- continue
- for mod in frm.get('mods', ()):
- for edg in mod.get('edgs', ()):
- if edg.get('cmsType') == 'ImmersiveLeadTile':
- if 'image' in edg.get('cmsImage', {}):
- for line in parse_lead_image(edg['cmsImage']):
- yield line
- if edg.get('cmsType') == 'ArticleBodyTile':
- for line in parse_article(edg):
- yield line
- yield ""
+from calibre.web.feeds.news import BasicNewsRecipe, classes
class NatGeo(BasicNewsRecipe):
- title = u'National Geographic'
+ title = 'National Geographic'
description = 'News articles from The National Geographic, Download Monthly.'
language = 'en'
encoding = 'utf8'
@@ -167,26 +27,42 @@ class NatGeo(BasicNewsRecipe):
'res': {
'short': 'For hi-res images, select a resolution from the\nfollowing options: 800, 1000, 1200 or 1500',
'long': 'This is useful for non e-ink devices, and for a lower file size\nthan the default, use 400 or 300.',
- 'default': '600'
+ 'default': '600',
}
}
- extra_css = '''
+ @property
+ def natgeo_parser(self):
+ ans = getattr(self, '_natgeo_parser', None)
+ if ans is None:
+ from calibre.live import load_module
+
+ self._natgeo_parser = ans = load_module('calibre.web.site_parsers.natgeo')
+ return ans
+
+ def preprocess_raw_html(self, raw_html, url):
+ return self.natgeo_parser.extract_html(raw_html)
+
+ extra_css = """
blockquote { color:#404040; }
.byline, i { font-style:italic; color:#202020; }
.cap { font-size:small; }
img {display:block; margin:0 auto;}
.cred { font-style:italic; font-size:small; color:#404040; }
.auth, .time, .sub { font-size:small; color:#5c5c5c; }
- '''
+ """
def get_cover_url(self):
# soup = self.index_to_soup('https://www.nationalgeographic.com/magazine/')
# png = re.findall('https://i\.natgeofe\.com\S+?national-geographic-\S+?\.jpg', soup.decode('utf-8'))
from datetime import date
- url = 'https://www.nationalgeographic.com/magazine/issue/' + (date.today().strftime('%B-%Y')).lower()
+
+ url = (
+ 'https://www.nationalgeographic.com/magazine/issue/'
+ + (date.today().strftime('%B-%Y')).lower()
+ )
soup = self.index_to_soup(url)
- png = soup.find('meta', attrs={'property':'og:image'})['content'].split('?')
+ png = soup.find('meta', attrs={'property': 'og:image'})['content'].split('?')
return png[0] + '?w=1000&h=1000'
def parse_index(self):
@@ -195,7 +71,7 @@ class NatGeo(BasicNewsRecipe):
'https://www.nationalgeographic.com/environment',
'https://www.nationalgeographic.com/history',
'https://www.nationalgeographic.com/science',
- 'https://www.nationalgeographic.com/travel'
+ 'https://www.nationalgeographic.com/travel',
]
feeds = []
@@ -217,16 +93,14 @@ class NatGeo(BasicNewsRecipe):
section = self.tag_to_string(article.find(**classes('SectionLabel')))
if section.startswith('Paid Content'):
continue
- title = self.tag_to_string(article.find(**classes('PromoTile__Title--truncated')))
+ title = self.tag_to_string(
+ article.find(**classes('PromoTile__Title--truncated'))
+ )
articles = ans.setdefault(section, [])
articles.append({'title': title, 'url': url})
self.log(pformat(ans))
return list(ans.items())
- def preprocess_raw_html(self, raw_html, url):
- data = extract_json(raw_html)
- return '\n'.join(article_parse(data))
-
def preprocess_html(self, soup):
for h2 in soup.findAll('h2'):
h2.name = 'h4'
@@ -239,7 +113,7 @@ class NatGeo(BasicNewsRecipe):
return soup
def populate_article_metadata(self, article, soup, first):
- summ = soup.find(attrs={'class':'byline'})
+ summ = soup.find(attrs={'class': 'byline'})
if summ:
article.summary = self.tag_to_string(summ)
article.text_summary = self.tag_to_string(summ)
diff --git a/recipes/natgeohis.recipe b/recipes/natgeohis.recipe
index b95967520b..61012a18e1 100644
--- a/recipes/natgeohis.recipe
+++ b/recipes/natgeohis.recipe
@@ -1,150 +1,10 @@
#!/usr/bin/env python
# vim:fileencoding=utf-8
-from __future__ import absolute_import, division, print_function, unicode_literals
-
-import json
-
-from calibre import prepare_string_for_xml as escape
-from calibre.utils.iso8601 import parse_iso8601
-from calibre.web.feeds.news import BasicNewsRecipe
-
-
-def classes(classes):
- q = frozenset(classes.split(' '))
- return dict(attrs={
- 'class': lambda x: x and frozenset(x.split()).intersection(q)})
-
-
-def extract_json(raw):
- s = raw.find("window['__natgeo__']")
- script = raw[s:raw.find('', s)]
- return json.loads(script[script.find('{'):].rstrip(';'))['page']['content']['prismarticle']
-
-
-def parse_contributors(grp):
- for item in grp:
- line = '' + escape(item['title']) + ' '
- for c in item['contributors']:
- line += escape(c['displayName'])
- yield line + '
'
-
-
-def parse_lead_image(media):
- if 'image' in media:
- yield ''
- if 'dsc' in media['image']:
- yield '
'.format(
- escape(media['image']['src'], True), escape(media['image']['dsc'], True)
- )
- else:
- yield ''.format(escape(media['image']['src'], True))
- if 'caption' in media and 'credit' in media:
- yield '' + media['caption'] + ' ' + media['credit'] + '
'
- elif 'caption' in media:
- yield '' + media['caption'] + '
'
- yield ''
-
-
-def parse_inline(inl):
- if inl.get('content', {}).get('name', '') == 'Image':
- props = inl['content']['props']
- yield ''
- if 'image' in props:
- yield '
'.format(props['image']['src'])
- if 'caption' in props:
- yield '{}{}
'.format(
- props['caption'].get('text', ''), ' ' + props['caption'].get('credit', '')
- )
- yield ''
- if inl.get('content', {}).get('name', '') == 'ImageGroup':
- if 'images' in inl['content']['props']:
- for imgs in inl['content']['props']['images']:
- yield ''
- if 'src' in imgs:
- yield '
'.format(imgs['src'])
- if 'caption' in imgs:
- yield '{}{}
'.format(
- imgs['caption'].get('text', ''), ' ' + imgs['caption'].get('credit', '')
- )
- yield ''
-
-
-def parse_cont(content):
- for cont in content.get('content', {}):
- if isinstance(cont, dict):
- yield from parse_body(cont)
- if isinstance(cont, str):
- yield cont
-
-
-def parse_body(x):
- if isinstance(x, dict):
- if 'type' in x:
- tag = x['type']
- if tag == 'inline':
- yield ''.join(parse_inline(x))
- elif 'attrs' in x and 'href' in x.get('attrs', ''):
- yield '<' + tag + ' href="{}">'.format(x['attrs']['href'])
- for yld in parse_cont(x):
- yield yld
- yield '' + tag + '>'
- else:
- yield '<' + tag + '>'
- for yld in parse_cont(x):
- yield yld
- yield '' + tag + '>'
- elif isinstance(x, list):
- for y in x:
- if isinstance(y, dict):
- yield from parse_body(y)
-
-
-def parse_article(edg):
- sc = edg['schma']
- yield '' + escape(edg['sctn']) + '
'
- yield '' + escape(sc['sclTtl']) + '
'
- yield '' + escape(sc['sclDsc']) + '
'
- yield ''
- for line in parse_contributors(edg.get('cntrbGrp', {})):
- yield line
- ts = parse_iso8601(edg['mdDt'], as_utc=False).strftime('%B %d, %Y')
- yield '
Published: ' + escape(ts) + '
'
- if 'readTime' in edg:
- yield '' + escape(edg['readTime']) + '
'
- yield ''
- if edg.get('ldMda', {}).get('cmsType') == 'image':
- for line in parse_lead_image(edg['ldMda']):
- yield line
- for main in edg['prismData']['mainComponents']:
- if main['name'] == 'Body':
- for item in main['props']['body']:
- if isinstance(item, dict):
- if item.get('type', '') == 'inline':
- yield ''.join(parse_inline(item))
- elif isinstance(item, list):
- for line in item:
- yield ''.join(parse_body(line))
-
-
-def article_parse(data):
- yield ""
- for frm in data['frms']:
- if not frm:
- continue
- for mod in frm.get('mods', ()):
- for edg in mod.get('edgs', ()):
- if edg.get('cmsType') == 'ImmersiveLeadTile':
- if 'image' in edg.get('cmsImage', {}):
- for line in parse_lead_image(edg['cmsImage']):
- yield line
- if edg.get('cmsType') == 'ArticleBodyTile':
- for line in parse_article(edg):
- yield line
- yield ""
+from calibre.web.feeds.news import BasicNewsRecipe, classes
class NatGeo(BasicNewsRecipe):
- title = u'National Geographic History'
+ title = 'National Geographic History'
description = (
'From Caesar to Napoleon, the Pyramids to the Parthenon, the Trojan War to the Civil War—National Geographic '
'HISTORY draws readers in with more than 5,000 years of people, places, and things to explore.'
@@ -167,41 +27,53 @@ class NatGeo(BasicNewsRecipe):
'res': {
'short': 'For hi-res images, select a resolution from the\nfollowing options: 800, 1000, 1200 or 1500',
'long': 'This is useful for non e-ink devices, and for a lower file size\nthan the default, use 400 or 300.',
- 'default': '600'
+ 'default': '600',
}
}
- extra_css = '''
+ @property
+ def natgeo_parser(self):
+ ans = getattr(self, '_natgeo_parser', None)
+ if ans is None:
+ from calibre.live import load_module
+
+ self._natgeo_parser = ans = load_module('calibre.web.site_parsers.natgeo')
+ return ans
+
+ def preprocess_raw_html(self, raw_html, url):
+ return self.natgeo_parser.extract_html(raw_html)
+
+ extra_css = """
blockquote { color:#404040; }
.byline, i { font-style:italic; color:#202020; }
.cap { font-size:small; }
img {display:block; margin:0 auto;}
.cred { font-style:italic; font-size:small; color:#404040; }
.auth, .time, .sub { font-size:small; color:#5c5c5c; }
- '''
+ """
def get_cover_url(self):
soup = self.index_to_soup('https://ngsingleissues.nationalgeographic.com/history')
- wrap = soup.find(attrs={'class':'product-image-wrapper'})
+ wrap = soup.find(attrs={'class': 'product-image-wrapper'})
return wrap.img['src']
def parse_index(self):
- soup = self.index_to_soup('https://www.nationalgeographic.com/history/history-magazine')
+ soup = self.index_to_soup(
+ 'https://www.nationalgeographic.com/history/history-magazine'
+ )
ans = []
for article in soup.findAll('article'):
a = article.find('a')
url = a['href']
if url.startswith('/'):
url = 'https://www.nationalgeographic.com' + url
- title = self.tag_to_string(article.find(**classes('PromoTile__Title--truncated')))
+ title = self.tag_to_string(
+ article.find(**classes('PromoTile__Title--truncated'))
+ )
ans.append({'title': title, 'url': url})
self.log(title, ' ', url)
return [('Articles', ans)]
- def preprocess_raw_html(self, raw_html, url):
- data = extract_json(raw_html)
- return '\n'.join(article_parse(data))
-
def preprocess_html(self, soup):
for h2 in soup.findAll('h2'):
h2.name = 'h4'
@@ -214,7 +86,7 @@ class NatGeo(BasicNewsRecipe):
return soup
def populate_article_metadata(self, article, soup, first):
- summ = soup.find(attrs={'class':'byline'})
+ summ = soup.find(attrs={'class': 'byline'})
if summ:
article.summary = self.tag_to_string(summ)
article.text_summary = self.tag_to_string(summ)
diff --git a/recipes/natgeomag.recipe b/recipes/natgeomag.recipe
index f13e891493..97f9852961 100644
--- a/recipes/natgeomag.recipe
+++ b/recipes/natgeomag.recipe
@@ -1,152 +1,12 @@
#!/usr/bin/env python
# vim:fileencoding=utf-8
-from __future__ import absolute_import, division, print_function, unicode_literals
-
-import json
from datetime import date
from pprint import pformat
-
-from calibre import prepare_string_for_xml as escape
-from calibre.utils.iso8601 import parse_iso8601
-from calibre.web.feeds.news import BasicNewsRecipe
-
-
-def classes(classes):
- q = frozenset(classes.split(' '))
- return dict(attrs={
- 'class': lambda x: x and frozenset(x.split()).intersection(q)})
-
-
-def extract_json(raw):
- s = raw.find("window['__natgeo__']")
- script = raw[s:raw.find('', s)]
- return json.loads(script[script.find('{'):].rstrip(';'))['page']['content']['prismarticle']
-
-
-def parse_contributors(grp):
- for item in grp:
- line = '' + escape(item['title']) + ' '
- for c in item['contributors']:
- line += escape(c['displayName'])
- yield line + '
'
-
-
-def parse_lead_image(media):
- if 'image' in media:
- yield ''
- if 'dsc' in media['image']:
- yield '
'.format(
- escape(media['image']['src'], True), escape(media['image']['dsc'], True)
- )
- else:
- yield ''.format(escape(media['image']['src'], True))
- if 'caption' in media and 'credit' in media:
- yield '' + media['caption'] + ' ' + media['credit'] + '
'
- elif 'caption' in media:
- yield '' + media['caption'] + '
'
- yield ''
-
-
-def parse_inline(inl):
- if inl.get('content', {}).get('name', '') == 'Image':
- props = inl['content']['props']
- yield ''
- if 'image' in props:
- yield '
'.format(props['image']['src'])
- if 'caption' in props:
- yield '{}{}
'.format(
- props['caption'].get('text', ''), ' ' + props['caption'].get('credit', '')
- )
- yield ''
- if inl.get('content', {}).get('name', '') == 'ImageGroup':
- if 'images' in inl['content']['props']:
- for imgs in inl['content']['props']['images']:
- yield ''
- if 'src' in imgs:
- yield '
'.format(imgs['src'])
- if 'caption' in imgs:
- yield '{}{}
'.format(
- imgs['caption'].get('text', ''), ' ' + imgs['caption'].get('credit', '')
- )
- yield ''
-
-
-def parse_cont(content):
- for cont in content.get('content', {}):
- if isinstance(cont, dict):
- yield from parse_body(cont)
- if isinstance(cont, str):
- yield cont
-
-
-def parse_body(x):
- if isinstance(x, dict):
- if 'type' in x:
- tag = x['type']
- if tag == 'inline':
- yield ''.join(parse_inline(x))
- elif 'attrs' in x and 'href' in x.get('attrs', ''):
- yield '<' + tag + ' href="{}">'.format(x['attrs']['href'])
- for yld in parse_cont(x):
- yield yld
- yield '' + tag + '>'
- else:
- yield '<' + tag + '>'
- for yld in parse_cont(x):
- yield yld
- yield '' + tag + '>'
- elif isinstance(x, list):
- for y in x:
- if isinstance(y, dict):
- yield from parse_body(y)
-
-
-def parse_article(edg):
- sc = edg['schma']
- yield '' + escape(edg['sctn']) + '
'
- yield '' + escape(sc['sclTtl']) + '
'
- yield '' + escape(sc['sclDsc']) + '
'
- yield ''
- for line in parse_contributors(edg.get('cntrbGrp', {})):
- yield line
- ts = parse_iso8601(edg['mdDt'], as_utc=False).strftime('%B %d, %Y')
- yield '
Published: ' + escape(ts) + '
'
- if 'readTime' in edg:
- yield '' + escape(edg['readTime']) + '
'
- yield ''
- if edg.get('ldMda', {}).get('cmsType') == 'image':
- for line in parse_lead_image(edg['ldMda']):
- yield line
- for main in edg['prismData']['mainComponents']:
- if main['name'] == 'Body':
- for item in main['props']['body']:
- if isinstance(item, dict):
- if item.get('type', '') == 'inline':
- yield ''.join(parse_inline(item))
- elif isinstance(item, list):
- for line in item:
- yield ''.join(parse_body(line))
-
-
-def article_parse(data):
- yield ""
- for frm in data['frms']:
- if not frm:
- continue
- for mod in frm.get('mods', ()):
- for edg in mod.get('edgs', ()):
- if edg.get('cmsType') == 'ImmersiveLeadTile':
- if 'image' in edg.get('cmsImage', {}):
- for line in parse_lead_image(edg['cmsImage']):
- yield line
- if edg.get('cmsType') == 'ArticleBodyTile':
- for line in parse_article(edg):
- yield line
- yield ""
+from calibre.web.feeds.news import BasicNewsRecipe, classes
class NatGeo(BasicNewsRecipe):
- title = u'National Geographic Magazine'
+ title = 'National Geographic Magazine'
description = 'The National Geographic, an American monthly magazine'
language = 'en'
encoding = 'utf8'
@@ -163,26 +23,38 @@ class NatGeo(BasicNewsRecipe):
remove_empty_feeds = True
resolve_internal_links = True
- extra_css = '''
+ recipe_specific_options = {
+ 'date': {
+ 'short': 'The date of the edition to download (Month-YYYY format)',
+ 'long': 'For example, March-2023',
+ },
+ 'res': {
+ 'short': 'For hi-res images, select a resolution from the\nfollowing options: 800, 1000, 1200 or 1500',
+ 'long': 'This is useful for non e-ink devices, and for a lower file size\nthan the default, use 400 or 300.',
+ 'default': '600',
+ },
+ }
+
+ @property
+ def natgeo_parser(self):
+ ans = getattr(self, '_natgeo_parser', None)
+ if ans is None:
+ from calibre.live import load_module
+
+ self._natgeo_parser = ans = load_module('calibre.web.site_parsers.natgeo')
+ return ans
+
+ def preprocess_raw_html(self, raw_html, url):
+ return self.natgeo_parser.extract_html(raw_html)
+
+ extra_css = """
blockquote { color:#404040; }
.byline, i { font-style:italic; color:#202020; }
.cap { font-size:small; }
img {display:block; margin:0 auto;}
.cred { font-style:italic; font-size:small; color:#404040; }
.auth, .time, .sub { font-size:small; color:#5c5c5c; }
- '''
-
- recipe_specific_options = {
- 'date': {
- 'short': 'The date of the edition to download (Month-YYYY format)',
- 'long': 'For example, March-2023'
- },
- 'res': {
- 'short': 'For hi-res images, select a resolution from the\nfollowing options: 800, 1000, 1200 or 1500',
- 'long': 'This is useful for non e-ink devices, and for a lower file size\nthan the default, use 400 or 300.',
- 'default': '600'
- }
- }
+ """
def parse_index(self):
edition = date.today().strftime('%B-%Y')
@@ -195,11 +67,19 @@ class NatGeo(BasicNewsRecipe):
soup = self.index_to_soup(url)
# png = re.findall('https://i\.natgeofe\.com\S+?national-geographic-\S+?\.jpg', soup.decode('utf-8'))
# self.cover_url = png[0] + '?w=1000&h=1000'
- self.cover_url = soup.find('meta', attrs={'property':'og:image'})['content'].split('?')[0] + '?w=1000'
+ self.cover_url = (
+ soup.find('meta', attrs={'property': 'og:image'})['content'].split('?')[0]
+ + '?w=1000'
+ )
# self.title = 'National Geographic ' + self.tag_to_string(name)
ans = {}
- if photoart := soup.find(attrs={'class':lambda x: x and 'BgImagePromo__Container__Text__Link' in x.split()}):
+ if photoart := soup.find(
+ attrs={
+ 'class': lambda x: x
+ and 'BgImagePromo__Container__Text__Link' in x.split()
+ }
+ ):
section = 'Photo Essay'
title = self.tag_to_string(photoart)
url = photoart['href']
@@ -211,10 +91,12 @@ class NatGeo(BasicNewsRecipe):
if promo.find('a', attrs={'href': True}) and promo.a.get('href'):
url = promo.a['href']
section = self.tag_to_string(promo.find(**classes('SectionLabel')))
- title = self.tag_to_string(promo.find(**classes('Card__Content__Heading')))
+ title = self.tag_to_string(
+ promo.find(**classes('Card__Content__Heading'))
+ )
articles = ans.setdefault(section, [])
articles.append({'title': title, 'url': url})
- for gird in soup.findAll(attrs={'class':'GridPromoTile'}):
+ for gird in soup.findAll(attrs={'class': 'GridPromoTile'}):
for article in soup.findAll('article'):
a = article.find('a')
url = a['href']
@@ -223,16 +105,14 @@ class NatGeo(BasicNewsRecipe):
if '/graphics/' in url:
continue
section = self.tag_to_string(article.find(**classes('SectionLabel')))
- title = self.tag_to_string(article.find(**classes('PromoTile__Title--truncated')))
+ title = self.tag_to_string(
+ article.find(**classes('PromoTile__Title--truncated'))
+ )
articles = ans.setdefault(section, [])
articles.append({'title': title, 'url': url})
self.log(pformat(ans))
return list(ans.items())
- def preprocess_raw_html(self, raw_html, url):
- data = extract_json(raw_html)
- return '\n'.join(article_parse(data))
-
def preprocess_html(self, soup):
for h2 in soup.findAll('h2'):
h2.name = 'h4'
@@ -245,7 +125,7 @@ class NatGeo(BasicNewsRecipe):
return soup
def populate_article_metadata(self, article, soup, first):
- summ = soup.find(attrs={'class':'byline'})
+ summ = soup.find(attrs={'class': 'byline'})
if summ:
article.summary = self.tag_to_string(summ)
article.text_summary = self.tag_to_string(summ)
diff --git a/src/calibre/gui2/dialogs/trim_image.py b/src/calibre/gui2/dialogs/trim_image.py
index b3c039821d..2c576f506e 100644
--- a/src/calibre/gui2/dialogs/trim_image.py
+++ b/src/calibre/gui2/dialogs/trim_image.py
@@ -28,10 +28,10 @@ from calibre.gui2 import gprefs
from calibre.gui2.tweak_book.editor.canvas import Canvas
-def reduce_to_ratio(w, h, t):
- h = min(h, w / t)
- w = t * h
- return int(w), int(h)
+def reduce_to_ratio(w, h, r):
+ h = min(h, w / r)
+ w = r * h
+ return int(round(w)), int(round(h))
class Region(QDialog):
diff --git a/src/calibre/web/site_parsers/natgeo.py b/src/calibre/web/site_parsers/natgeo.py
new file mode 100644
index 0000000000..6990bd2fdc
--- /dev/null
+++ b/src/calibre/web/site_parsers/natgeo.py
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+
+from __future__ import (
+ absolute_import,
+ division,
+ print_function,
+ unicode_literals,
+)
+
+import json
+from pprint import pprint
+
+from calibre import prepare_string_for_xml as escape
+from calibre.utils.iso8601 import parse_iso8601
+
+
+module_version = 1 # needed for live updates
+pprint
+
+
+def extract_json(raw):
+ s = raw.find("window['__natgeo__']")
+ script = raw[s : raw.find('', s)]
+ return json.loads(script[script.find('{') :].rstrip(';'))['page']['content'][
+ 'prismarticle'
+ ]
+
+
+def parse_contributors(grp):
+ for item in grp:
+ line = '' + escape(item['title']) + ' '
+ for c in item['contributors']:
+ line += escape(c['displayName'])
+ yield line + '
'
+
+
+def parse_lead_image(media):
+ if 'image' in media:
+ yield ''
+ if 'dsc' in media['image']:
+ yield (
+ f'
'
+ )
+ else:
+ yield f''
+ if 'caption' in media and 'credit' in media:
+ yield (
+ ''
+ + media['caption']
+ + ' '
+ + media['credit']
+ + '
'
+ )
+ elif 'caption' in media:
+ yield '' + media['caption'] + '
'
+ yield ''
+
+
+def parse_inline(inl):
+ if inl.get('content', {}).get('name', '') == 'Image':
+ props = inl['content']['props']
+ yield ''
+ if 'image' in props:
+ yield f'
'
+ if 'caption' in props:
+ yield (
+ f'{props["caption"].get("text", "")} {props["caption"].get("credit", "")}
'
+ )
+ yield ''
+ if inl.get('content', {}).get('name', '') == 'ImageGroup':
+ if 'images' in inl['content']['props']:
+ for imgs in inl['content']['props']['images']:
+ yield ''
+ if 'src' in imgs:
+ yield f'
'
+ if 'caption' in imgs:
+ yield (
+ f'{imgs["caption"].get("text", "")} {imgs["caption"].get("credit", "")}
'
+ )
+ yield ''
+
+
+def parse_cont(content):
+ for cont in content.get('content', {}):
+ if isinstance(cont, dict):
+ yield from parse_body(cont)
+ if isinstance(cont, str):
+ yield cont
+
+
+def parse_body(x):
+ if isinstance(x, dict):
+ if 'type' in x:
+ tag = x['type']
+ if tag == 'inline':
+ yield ''.join(parse_inline(x))
+ elif 'attrs' in x and 'href' in x.get('attrs', ''):
+ yield '<' + tag + f' href="{x["attrs"]["href"]}">'
+ yield from parse_cont(x)
+ yield '' + tag + '>'
+ else:
+ yield '<' + tag + '>'
+ yield from parse_cont(x)
+ yield '' + tag + '>'
+ elif isinstance(x, list):
+ for y in x:
+ if isinstance(y, dict):
+ yield from parse_body(y)
+
+
+def parse_article(edg):
+ sc = edg['schma']
+ yield '' + escape(edg['sctn']) + '
'
+ yield '' + escape(sc['sclTtl']) + '
'
+ yield '' + escape(sc['sclDsc']) + '
'
+ yield ''
+ yield from parse_contributors(edg.get('cntrbGrp', {}))
+ ts = parse_iso8601(edg['mdDt'], as_utc=False).strftime('%B %d, %Y')
+ yield '
Published: ' + escape(ts) + '
'
+ if 'readTime' in edg:
+ yield '' + escape(edg['readTime']) + '
'
+ yield ''
+ if edg.get('ldMda', {}).get('cmsType') == 'image':
+ yield from parse_lead_image(edg['ldMda'])
+ for main in edg['prismData']['mainComponents']:
+ if main['name'] == 'Body':
+ for item in main['props']['body']:
+ if isinstance(item, dict):
+ if item.get('type', '') == 'inline':
+ yield ''.join(parse_inline(item))
+ elif isinstance(item, list):
+ for line in item:
+ yield ''.join(parse_body(line))
+
+
+def article_parse(data):
+ yield ''
+ for frm in data['frms']:
+ if not frm:
+ continue
+ for mod in frm.get('mods', ()):
+ for edg in mod.get('edgs', ()):
+ if edg.get('cmsType') == 'ImmersiveLeadTile':
+ if 'image' in edg.get('cmsImage', {}):
+ yield from parse_lead_image(edg['cmsImage'])
+ if edg.get('cmsType') == 'ArticleBodyTile':
+ yield from parse_article(edg)
+ yield ''
+
+
+def extract_html(raw_html):
+ data = extract_json(raw_html)
+ return '\n'.join(article_parse(data))
From 93032c98ee6996346b346a62ea96d57d7f33fe51 Mon Sep 17 00:00:00 2001
From: unkn0w7n <51942695+unkn0w7n@users.noreply.github.com>
Date: Sun, 6 Oct 2024 18:21:53 +0530
Subject: [PATCH 2/2] remove dead recipes
These recipes are based on RSS feeds that no longer work.
---
recipes/icons/jagran_josh.png | Bin 1044 -> 0 bytes
recipes/icons/jalopnik.png | Bin 1071 -> 0 bytes
recipes/icons/jb_online.png | Bin 706 -> 0 bytes
recipes/icons/jbpress.png | Bin 676 -> 0 bytes
recipes/icons/jezebel.png | Bin 70 -> 0 bytes
recipes/icons/joelonsoftware.png | Bin 140 -> 0 bytes
recipes/icons/joongang.png | Bin 1592 -> 0 bytes
recipes/icons/journalgazette.png | Bin 225 -> 0 bytes
recipes/icons/jp_dk.png | Bin 330 -> 0 bytes
recipes/icons/jpost_fr.png | Bin 132 -> 0 bytes
recipes/icons/jsonline.png | Bin 566 -> 0 bytes
recipes/icons/jurnalulnational.png | Bin 711 -> 0 bytes
recipes/icons/jutarnji.png | Bin 801 -> 0 bytes
recipes/icons/juve_la_stampa.png | Bin 697 -> 0 bytes
recipes/icons/jv_dk.png | Bin 638 -> 0 bytes
recipes/icons/kahokushinpo.png | Bin 1715 -> 0 bytes
recipes/icons/kaloeviglokalavisen_dk.png | Bin 801 -> 0 bytes
recipes/icons/kamikaze.png | Bin 250 -> 0 bytes
recipes/icons/karsi_gazete.png | Bin 1252 -> 0 bytes
recipes/icons/kathemerini.png | Bin 515 -> 0 bytes
recipes/icons/kellog_insight.png | Bin 708 -> 0 bytes
recipes/icons/kerrang.png | Bin 1472 -> 0 bytes
recipes/icons/kgsenghavebladet_dk.png | Bin 262 -> 0 bytes
recipes/icons/kholod.png | Bin 8337 -> 0 bytes
recipes/icons/kholod_en.png | Bin 707 -> 0 bytes
recipes/icons/kidney.png | Bin 348 -> 0 bytes
recipes/icons/kitsapun.png | Bin 2136 -> 0 bytes
recipes/icons/km_blog.png | Bin 317 -> 0 bytes
recipes/icons/knack_be.png | Bin 595 -> 0 bytes
recipes/icons/koegelokalavisen_dk.png | Bin 801 -> 0 bytes
recipes/icons/koldinglokalavisen_dk.png | Bin 801 -> 0 bytes
recipes/icons/komchadluek.png | Bin 451 -> 0 bytes
recipes/icons/kompas.png | Bin 1839 -> 0 bytes
recipes/icons/kotaku.png | Bin 158 -> 0 bytes
recipes/icons/kp.png | Bin 244 -> 0 bytes
recipes/icons/kristeligt_dagblad_dk.png | Bin 448 -> 0 bytes
recipes/icons/krstarica_en.png | Bin 484 -> 0 bytes
recipes/icons/ksiazka_pl.png | Bin 764 -> 0 bytes
recipes/icons/kukuburi.png | Bin 670 -> 0 bytes
recipes/icons/kurier_poranny.png | Bin 166 -> 0 bytes
recipes/icons/kurier_szczecinski.png | Bin 756 -> 0 bytes
recipes/icons/kyivpost_ar.png | Bin 636 -> 0 bytes
recipes/icons/l_espresso.png | Bin 1029 -> 0 bytes
recipes/icons/la_cuarta.png | Bin 335 -> 0 bytes
recipes/icons/la_gazetta_del_mezzogiorno.png | Bin 1679 -> 0 bytes
recipes/icons/la_gazzeta_dello_sport.png | Bin 1119 -> 0 bytes
recipes/icons/la_pausa_caffe.png | Bin 825 -> 0 bytes
recipes/icons/la_razon_bo.png | Bin 115 -> 0 bytes
recipes/icons/la_rioja.png | Bin 462 -> 0 bytes
recipes/icons/la_segunda.png | Bin 923 -> 0 bytes
recipes/icons/la_tercera.png | Bin 222 -> 0 bytes
recipes/icons/la_tribuna.png | Bin 1438 -> 0 bytes
recipes/icons/lameuse_be.png | Bin 1241 -> 0 bytes
recipes/icons/lanacion_chile.png | Bin 177 -> 0 bytes
recipes/icons/laprensa_hn.png | Bin 133 -> 0 bytes
recipes/icons/laprensa_ni.png | Bin 472 -> 0 bytes
recipes/icons/latribuna.png | Bin 355 -> 0 bytes
recipes/icons/lavanguardia.png | Bin 806 -> 0 bytes
.../icons/lavanguardia_corresponsales_es.png | Bin 806 -> 0 bytes
recipes/icons/lavenir_be.png | Bin 1709 -> 0 bytes
recipes/icons/le_journal.png | Bin 1621 -> 0 bytes
recipes/icons/le_temps.png | Bin 372 -> 0 bytes
recipes/icons/leduc.png | Bin 1076 -> 0 bytes
recipes/icons/legitymizm.png | Bin 469 -> 0 bytes
recipes/icons/leipzer_volkszeitung.png | Bin 1417 -> 0 bytes
recipes/icons/lequipe.png | Bin 570 -> 0 bytes
recipes/icons/les_echos.png | Bin 1279 -> 0 bytes
recipes/icons/lescienze.png | Bin 1678 -> 0 bytes
recipes/icons/lesoir_be.png | Bin 2022 -> 0 bytes
recipes/icons/levante.png | Bin 484 -> 0 bytes
recipes/icons/lidovky.png | Bin 1361 -> 0 bytes
recipes/icons/lifehacker_pl.png | Bin 832 -> 0 bytes
recipes/icons/limes.png | Bin 508 -> 0 bytes
recipes/icons/london_free_press.png | Bin 429 -> 0 bytes
recipes/icons/los_danieles.png | Bin 836 -> 0 bytes
recipes/icons/los_tiempos_bo.png | Bin 206 -> 0 bytes
recipes/icons/losservatoreromano_it.png | Bin 1574 -> 0 bytes
recipes/icons/luns_a_venres.png | Bin 1041 -> 0 bytes
.../icons/lyngby-taarbaeklokalavisen_dk.png | Bin 801 -> 0 bytes
recipes/icons/mac_world.png | Bin 280 -> 0 bytes
recipes/icons/mac_world_uk.png | Bin 1073 -> 0 bytes
recipes/icons/macity.png | Bin 1483 -> 0 bytes
recipes/icons/macleans.png | Bin 502 -> 0 bytes
recipes/icons/maekyung.png | Bin 342 -> 0 bytes
recipes/icons/maharashtra_times.png | Bin 764 -> 0 bytes
recipes/icons/malaya_business_insight.png | Bin 1480 -> 0 bytes
recipes/icons/mandidner.png | Bin 594 -> 0 bytes
recipes/icons/marine_corps_times.png | Bin 906 -> 0 bytes
recipes/icons/marketing_sensoriale.png | Bin 658 -> 0 bytes
recipes/icons/matichon.png | Bin 888 -> 0 bytes
recipes/icons/mayra.png | Bin 532 -> 0 bytes
recipes/icons/mediterraneo.png | Bin 1357 -> 0 bytes
recipes/icons/melbourne_herald_sun.png | Bin 1147 -> 0 bytes
recipes/icons/mens_day_out.png | Bin 2017 -> 0 bytes
recipes/icons/mens_health.png | Bin 245 -> 0 bytes
recipes/icons/metro_montreal.png | Bin 1424 -> 0 bytes
recipes/icons/metro_news_nl.png | Bin 651 -> 0 bytes
recipes/icons/metro_uk.png | Bin 661 -> 0 bytes
recipes/icons/military_times.png | Bin 1111 -> 0 bytes
recipes/icons/mlody_technik_pl.png | Bin 496 -> 0 bytes
recipes/icons/mobilenations.png | Bin 338 -> 0 bytes
recipes/icons/moldovaazi.png | Bin 241 -> 0 bytes
recipes/icons/monbiot.png | Bin 665 -> 0 bytes
recipes/icons/mondedurable.png | Bin 1397 -> 0 bytes
recipes/icons/money_pl.png | Bin 370 -> 0 bytes
recipes/icons/moneyro.png | Bin 132 -> 0 bytes
recipes/icons/more_intelligent_life.png | Bin 1009 -> 0 bytes
recipes/icons/movie_web.png | Bin 1026 -> 0 bytes
recipes/icons/msdnmag_en.png | Bin 525 -> 0 bytes
recipes/icons/msnsankei.png | Bin 278 -> 0 bytes
recipes/icons/nadacni_fond_proti_korupci.png | Bin 249 -> 0 bytes
recipes/icons/nation_ke.png | Bin 474 -> 0 bytes
recipes/icons/national_geographic_it.png | Bin 107 -> 0 bytes
recipes/icons/nationalgeoro.png | Bin 122 -> 0 bytes
recipes/icons/nationalreviewonline.png | Bin 768 -> 0 bytes
recipes/jagran_josh.recipe | 18 --
recipes/jakarta_globe.recipe | 29 ---
recipes/jalopnik.recipe | 42 ----
recipes/japaa.recipe | 102 --------
recipes/jb_online.recipe | 48 ----
recipes/jbpress.recipe | 55 ----
recipes/jezebel.recipe | 40 ---
recipes/joelonsoftware.recipe | 35 ---
recipes/joongang.recipe | 36 ---
recipes/journalgazette.recipe | 30 ---
recipes/jp_dk.recipe | 28 ---
recipes/jpost_fr.recipe | 66 -----
recipes/jsonline.recipe | 58 -----
recipes/jurnalulnational.recipe | 50 ----
recipes/jutarnji.recipe | 85 -------
recipes/juve_la_stampa.recipe | 20 --
recipes/jv_dk.recipe | 42 ----
recipes/kahokushinpo.recipe | 25 --
recipes/kaloeviglokalavisen_dk.recipe | 32 ---
recipes/kamikaze.recipe | 49 ----
recipes/karsi_gazete.recipe | 35 ---
recipes/kathemerini.recipe | 68 -----
recipes/kellog_insight.recipe | 52 ----
recipes/kerrang.recipe | 35 ---
recipes/kgsenghavebladet_dk.recipe | 28 ---
recipes/kholod.recipe | 47 ----
recipes/kholod_en.recipe | 31 ---
recipes/kidney.recipe | 115 ---------
recipes/kitsapun.recipe | 31 ---
recipes/klubknjige.recipe | 41 ---
recipes/km_blog.recipe | 29 ---
recipes/knack_be.recipe | 39 ---
recipes/koegelokalavisen_dk.recipe | 32 ---
recipes/koldinglokalavisen_dk.recipe | 32 ---
recipes/komchadluek.recipe | 66 -----
recipes/kompas.recipe | 86 -------
recipes/kotaku.recipe | 39 ---
recipes/kp.recipe | 29 ---
recipes/kristeligt_dagblad_dk.recipe | 28 ---
recipes/krstarica_en.recipe | 59 -----
recipes/ksiazka_pl.recipe | 33 ---
recipes/kukuburi.recipe | 39 ---
recipes/kurier_poranny.recipe | 58 -----
recipes/kurier_szczecinski.recipe | 51 ----
recipes/kyivpost_ar.recipe | 37 ---
recipes/l_espresso.recipe | 46 ----
recipes/l_vivs_ghazieta.recipe | 40 ---
recipes/la_cuarta.recipe | 48 ----
recipes/la_gazetta_del_mezzogiorno.recipe | 44 ----
recipes/la_gazzeta_dello_sport.recipe | 83 -------
recipes/la_pausa_caffe.recipe | 17 --
recipes/la_razon_bo.recipe | 68 -----
recipes/la_rioja.recipe | 51 ----
recipes/la_segunda.recipe | 50 ----
recipes/la_tercera.recipe | 59 -----
recipes/la_tribuna.recipe | 73 ------
recipes/lameuse_be.recipe | 55 ----
recipes/lanacion_chile.recipe | 57 -----
recipes/laprensa_hn.recipe | 64 -----
recipes/laprensa_ni.recipe | 71 ------
recipes/latribuna.recipe | 75 ------
recipes/lavanguardia.recipe | 76 ------
recipes/lavanguardia_corresponsales_es.recipe | 59 -----
recipes/lavenir_be.recipe | 47 ----
recipes/le_journal.recipe | 43 ----
recipes/le_temps.recipe | 119 ---------
recipes/leduc.recipe | 52 ----
recipes/legitymizm.recipe | 50 ----
recipes/leipzer_volkszeitung.recipe | 41 ---
recipes/lequipe.recipe | 46 ----
recipes/les_echos.recipe | 18 --
recipes/lescienze.recipe | 49 ----
recipes/lesoir_be.recipe | 51 ----
recipes/letsgetcritical.recipe | 96 -------
recipes/levante.recipe | 105 --------
recipes/liberation.recipe | 2 +-
recipes/libero.recipe | 58 -----
recipes/lidovky.recipe | 37 ---
recipes/lifehacker_pl.recipe | 29 ---
recipes/limes.recipe | 52 ----
recipes/living_stones.recipe | 27 --
recipes/london_free_press.recipe | 39 ---
recipes/los_danieles.recipe | 16 --
recipes/los_tiempos_bo.recipe | 62 -----
recipes/losservatoreromano_it.recipe | 40 ---
recipes/luns_a_venres.recipe | 46 ----
recipes/lvivs_ks_ghazieta.recipe | 29 ---
recipes/lyngby-taarbaeklokalavisen_dk.recipe | 32 ---
recipes/mac_world.recipe | 61 -----
recipes/mac_world_uk.recipe | 45 ----
recipes/macity.recipe | 25 --
recipes/macleans.recipe | 32 ---
recipes/maekyung.recipe | 35 ---
recipes/maharashtra_times.recipe | 18 --
recipes/malaya_business_insight.recipe | 69 ------
recipes/malaysian_mirror.recipe | 84 -------
recipes/mandidner.recipe | 18 --
recipes/manila_standard_today.recipe | 57 -----
recipes/marine_corps_times.recipe | 38 ---
recipes/marketing_sensoriale.recipe | 58 -----
recipes/matichon.recipe | 23 --
recipes/mayra.recipe | 48 ----
recipes/mediterraneo.recipe | 101 --------
recipes/melbourne_herald_sun.recipe | 84 -------
recipes/men24_gr.recipe | 53 ----
recipes/mens_day_out.recipe | 22 --
recipes/mens_health.recipe | 11 -
recipes/metro_montreal.recipe | 31 ---
recipes/metro_news_nl.recipe | 234 ------------------
recipes/metro_uk.recipe | 62 -----
recipes/metropol_tv.recipe | 29 ---
recipes/military_times.recipe | 39 ---
recipes/mlody_technik_pl.recipe | 38 ---
recipes/mobilenations.recipe | 18 --
recipes/moldovaazi.recipe | 47 ----
recipes/monbiot.recipe | 41 ---
recipes/mondedurable.recipe | 43 ----
recipes/money_pl.recipe | 82 ------
recipes/moneyro.recipe | 44 ----
recipes/more_intelligent_life.recipe | 34 ---
recipes/movie_web.recipe | 51 ----
recipes/msdnmag_en.recipe | 64 -----
recipes/msnsankei.recipe | 25 --
recipes/nacionred.recipe | 11 -
recipes/nadacni_fond_proti_korupci.recipe | 29 ---
recipes/nation_ke.recipe | 58 -----
recipes/national_geographic_it.recipe | 18 --
recipes/nationalgeoro.recipe | 46 ----
recipes/nationalreviewonline.recipe | 49 ----
244 files changed, 1 insertion(+), 6226 deletions(-)
delete mode 100644 recipes/icons/jagran_josh.png
delete mode 100644 recipes/icons/jalopnik.png
delete mode 100644 recipes/icons/jb_online.png
delete mode 100644 recipes/icons/jbpress.png
delete mode 100644 recipes/icons/jezebel.png
delete mode 100644 recipes/icons/joelonsoftware.png
delete mode 100644 recipes/icons/joongang.png
delete mode 100644 recipes/icons/journalgazette.png
delete mode 100644 recipes/icons/jp_dk.png
delete mode 100644 recipes/icons/jpost_fr.png
delete mode 100644 recipes/icons/jsonline.png
delete mode 100644 recipes/icons/jurnalulnational.png
delete mode 100644 recipes/icons/jutarnji.png
delete mode 100644 recipes/icons/juve_la_stampa.png
delete mode 100644 recipes/icons/jv_dk.png
delete mode 100644 recipes/icons/kahokushinpo.png
delete mode 100644 recipes/icons/kaloeviglokalavisen_dk.png
delete mode 100644 recipes/icons/kamikaze.png
delete mode 100644 recipes/icons/karsi_gazete.png
delete mode 100644 recipes/icons/kathemerini.png
delete mode 100644 recipes/icons/kellog_insight.png
delete mode 100644 recipes/icons/kerrang.png
delete mode 100644 recipes/icons/kgsenghavebladet_dk.png
delete mode 100644 recipes/icons/kholod.png
delete mode 100644 recipes/icons/kholod_en.png
delete mode 100644 recipes/icons/kidney.png
delete mode 100644 recipes/icons/kitsapun.png
delete mode 100644 recipes/icons/km_blog.png
delete mode 100644 recipes/icons/knack_be.png
delete mode 100644 recipes/icons/koegelokalavisen_dk.png
delete mode 100644 recipes/icons/koldinglokalavisen_dk.png
delete mode 100644 recipes/icons/komchadluek.png
delete mode 100644 recipes/icons/kompas.png
delete mode 100644 recipes/icons/kotaku.png
delete mode 100644 recipes/icons/kp.png
delete mode 100644 recipes/icons/kristeligt_dagblad_dk.png
delete mode 100644 recipes/icons/krstarica_en.png
delete mode 100644 recipes/icons/ksiazka_pl.png
delete mode 100644 recipes/icons/kukuburi.png
delete mode 100644 recipes/icons/kurier_poranny.png
delete mode 100644 recipes/icons/kurier_szczecinski.png
delete mode 100644 recipes/icons/kyivpost_ar.png
delete mode 100644 recipes/icons/l_espresso.png
delete mode 100644 recipes/icons/la_cuarta.png
delete mode 100644 recipes/icons/la_gazetta_del_mezzogiorno.png
delete mode 100644 recipes/icons/la_gazzeta_dello_sport.png
delete mode 100644 recipes/icons/la_pausa_caffe.png
delete mode 100644 recipes/icons/la_razon_bo.png
delete mode 100644 recipes/icons/la_rioja.png
delete mode 100644 recipes/icons/la_segunda.png
delete mode 100644 recipes/icons/la_tercera.png
delete mode 100644 recipes/icons/la_tribuna.png
delete mode 100644 recipes/icons/lameuse_be.png
delete mode 100644 recipes/icons/lanacion_chile.png
delete mode 100644 recipes/icons/laprensa_hn.png
delete mode 100644 recipes/icons/laprensa_ni.png
delete mode 100644 recipes/icons/latribuna.png
delete mode 100644 recipes/icons/lavanguardia.png
delete mode 100644 recipes/icons/lavanguardia_corresponsales_es.png
delete mode 100644 recipes/icons/lavenir_be.png
delete mode 100644 recipes/icons/le_journal.png
delete mode 100644 recipes/icons/le_temps.png
delete mode 100644 recipes/icons/leduc.png
delete mode 100644 recipes/icons/legitymizm.png
delete mode 100644 recipes/icons/leipzer_volkszeitung.png
delete mode 100644 recipes/icons/lequipe.png
delete mode 100644 recipes/icons/les_echos.png
delete mode 100644 recipes/icons/lescienze.png
delete mode 100644 recipes/icons/lesoir_be.png
delete mode 100644 recipes/icons/levante.png
delete mode 100644 recipes/icons/lidovky.png
delete mode 100644 recipes/icons/lifehacker_pl.png
delete mode 100644 recipes/icons/limes.png
delete mode 100644 recipes/icons/london_free_press.png
delete mode 100644 recipes/icons/los_danieles.png
delete mode 100644 recipes/icons/los_tiempos_bo.png
delete mode 100644 recipes/icons/losservatoreromano_it.png
delete mode 100644 recipes/icons/luns_a_venres.png
delete mode 100644 recipes/icons/lyngby-taarbaeklokalavisen_dk.png
delete mode 100644 recipes/icons/mac_world.png
delete mode 100644 recipes/icons/mac_world_uk.png
delete mode 100644 recipes/icons/macity.png
delete mode 100644 recipes/icons/macleans.png
delete mode 100644 recipes/icons/maekyung.png
delete mode 100644 recipes/icons/maharashtra_times.png
delete mode 100644 recipes/icons/malaya_business_insight.png
delete mode 100644 recipes/icons/mandidner.png
delete mode 100644 recipes/icons/marine_corps_times.png
delete mode 100644 recipes/icons/marketing_sensoriale.png
delete mode 100644 recipes/icons/matichon.png
delete mode 100644 recipes/icons/mayra.png
delete mode 100644 recipes/icons/mediterraneo.png
delete mode 100644 recipes/icons/melbourne_herald_sun.png
delete mode 100644 recipes/icons/mens_day_out.png
delete mode 100644 recipes/icons/mens_health.png
delete mode 100644 recipes/icons/metro_montreal.png
delete mode 100644 recipes/icons/metro_news_nl.png
delete mode 100644 recipes/icons/metro_uk.png
delete mode 100644 recipes/icons/military_times.png
delete mode 100644 recipes/icons/mlody_technik_pl.png
delete mode 100644 recipes/icons/mobilenations.png
delete mode 100644 recipes/icons/moldovaazi.png
delete mode 100644 recipes/icons/monbiot.png
delete mode 100644 recipes/icons/mondedurable.png
delete mode 100644 recipes/icons/money_pl.png
delete mode 100644 recipes/icons/moneyro.png
delete mode 100644 recipes/icons/more_intelligent_life.png
delete mode 100644 recipes/icons/movie_web.png
delete mode 100644 recipes/icons/msdnmag_en.png
delete mode 100644 recipes/icons/msnsankei.png
delete mode 100644 recipes/icons/nadacni_fond_proti_korupci.png
delete mode 100644 recipes/icons/nation_ke.png
delete mode 100644 recipes/icons/national_geographic_it.png
delete mode 100644 recipes/icons/nationalgeoro.png
delete mode 100644 recipes/icons/nationalreviewonline.png
delete mode 100644 recipes/jagran_josh.recipe
delete mode 100644 recipes/jakarta_globe.recipe
delete mode 100644 recipes/jalopnik.recipe
delete mode 100644 recipes/japaa.recipe
delete mode 100644 recipes/jb_online.recipe
delete mode 100644 recipes/jbpress.recipe
delete mode 100644 recipes/jezebel.recipe
delete mode 100644 recipes/joelonsoftware.recipe
delete mode 100644 recipes/joongang.recipe
delete mode 100644 recipes/journalgazette.recipe
delete mode 100644 recipes/jp_dk.recipe
delete mode 100644 recipes/jpost_fr.recipe
delete mode 100644 recipes/jsonline.recipe
delete mode 100644 recipes/jurnalulnational.recipe
delete mode 100644 recipes/jutarnji.recipe
delete mode 100644 recipes/juve_la_stampa.recipe
delete mode 100644 recipes/jv_dk.recipe
delete mode 100644 recipes/kahokushinpo.recipe
delete mode 100644 recipes/kaloeviglokalavisen_dk.recipe
delete mode 100644 recipes/kamikaze.recipe
delete mode 100644 recipes/karsi_gazete.recipe
delete mode 100644 recipes/kathemerini.recipe
delete mode 100644 recipes/kellog_insight.recipe
delete mode 100644 recipes/kerrang.recipe
delete mode 100644 recipes/kgsenghavebladet_dk.recipe
delete mode 100644 recipes/kholod.recipe
delete mode 100644 recipes/kholod_en.recipe
delete mode 100644 recipes/kidney.recipe
delete mode 100644 recipes/kitsapun.recipe
delete mode 100644 recipes/klubknjige.recipe
delete mode 100644 recipes/km_blog.recipe
delete mode 100644 recipes/knack_be.recipe
delete mode 100644 recipes/koegelokalavisen_dk.recipe
delete mode 100644 recipes/koldinglokalavisen_dk.recipe
delete mode 100644 recipes/komchadluek.recipe
delete mode 100644 recipes/kompas.recipe
delete mode 100644 recipes/kotaku.recipe
delete mode 100644 recipes/kp.recipe
delete mode 100644 recipes/kristeligt_dagblad_dk.recipe
delete mode 100644 recipes/krstarica_en.recipe
delete mode 100644 recipes/ksiazka_pl.recipe
delete mode 100644 recipes/kukuburi.recipe
delete mode 100644 recipes/kurier_poranny.recipe
delete mode 100644 recipes/kurier_szczecinski.recipe
delete mode 100644 recipes/kyivpost_ar.recipe
delete mode 100644 recipes/l_espresso.recipe
delete mode 100644 recipes/l_vivs_ghazieta.recipe
delete mode 100644 recipes/la_cuarta.recipe
delete mode 100644 recipes/la_gazetta_del_mezzogiorno.recipe
delete mode 100644 recipes/la_gazzeta_dello_sport.recipe
delete mode 100644 recipes/la_pausa_caffe.recipe
delete mode 100644 recipes/la_razon_bo.recipe
delete mode 100644 recipes/la_rioja.recipe
delete mode 100644 recipes/la_segunda.recipe
delete mode 100644 recipes/la_tercera.recipe
delete mode 100644 recipes/la_tribuna.recipe
delete mode 100644 recipes/lameuse_be.recipe
delete mode 100644 recipes/lanacion_chile.recipe
delete mode 100644 recipes/laprensa_hn.recipe
delete mode 100644 recipes/laprensa_ni.recipe
delete mode 100644 recipes/latribuna.recipe
delete mode 100644 recipes/lavanguardia.recipe
delete mode 100644 recipes/lavanguardia_corresponsales_es.recipe
delete mode 100644 recipes/lavenir_be.recipe
delete mode 100644 recipes/le_journal.recipe
delete mode 100644 recipes/le_temps.recipe
delete mode 100644 recipes/leduc.recipe
delete mode 100644 recipes/legitymizm.recipe
delete mode 100644 recipes/leipzer_volkszeitung.recipe
delete mode 100644 recipes/lequipe.recipe
delete mode 100644 recipes/les_echos.recipe
delete mode 100644 recipes/lescienze.recipe
delete mode 100644 recipes/lesoir_be.recipe
delete mode 100644 recipes/letsgetcritical.recipe
delete mode 100644 recipes/levante.recipe
delete mode 100644 recipes/libero.recipe
delete mode 100644 recipes/lidovky.recipe
delete mode 100644 recipes/lifehacker_pl.recipe
delete mode 100644 recipes/limes.recipe
delete mode 100644 recipes/living_stones.recipe
delete mode 100644 recipes/london_free_press.recipe
delete mode 100644 recipes/los_danieles.recipe
delete mode 100644 recipes/los_tiempos_bo.recipe
delete mode 100644 recipes/losservatoreromano_it.recipe
delete mode 100644 recipes/luns_a_venres.recipe
delete mode 100644 recipes/lvivs_ks_ghazieta.recipe
delete mode 100644 recipes/lyngby-taarbaeklokalavisen_dk.recipe
delete mode 100644 recipes/mac_world.recipe
delete mode 100644 recipes/mac_world_uk.recipe
delete mode 100644 recipes/macity.recipe
delete mode 100644 recipes/macleans.recipe
delete mode 100644 recipes/maekyung.recipe
delete mode 100644 recipes/maharashtra_times.recipe
delete mode 100644 recipes/malaya_business_insight.recipe
delete mode 100644 recipes/malaysian_mirror.recipe
delete mode 100644 recipes/mandidner.recipe
delete mode 100644 recipes/manila_standard_today.recipe
delete mode 100644 recipes/marine_corps_times.recipe
delete mode 100644 recipes/marketing_sensoriale.recipe
delete mode 100644 recipes/matichon.recipe
delete mode 100644 recipes/mayra.recipe
delete mode 100644 recipes/mediterraneo.recipe
delete mode 100644 recipes/melbourne_herald_sun.recipe
delete mode 100644 recipes/men24_gr.recipe
delete mode 100644 recipes/mens_day_out.recipe
delete mode 100644 recipes/mens_health.recipe
delete mode 100644 recipes/metro_montreal.recipe
delete mode 100644 recipes/metro_news_nl.recipe
delete mode 100644 recipes/metro_uk.recipe
delete mode 100644 recipes/metropol_tv.recipe
delete mode 100644 recipes/military_times.recipe
delete mode 100644 recipes/mlody_technik_pl.recipe
delete mode 100644 recipes/mobilenations.recipe
delete mode 100644 recipes/moldovaazi.recipe
delete mode 100644 recipes/monbiot.recipe
delete mode 100644 recipes/mondedurable.recipe
delete mode 100644 recipes/money_pl.recipe
delete mode 100644 recipes/moneyro.recipe
delete mode 100644 recipes/more_intelligent_life.recipe
delete mode 100644 recipes/movie_web.recipe
delete mode 100644 recipes/msdnmag_en.recipe
delete mode 100644 recipes/msnsankei.recipe
delete mode 100644 recipes/nacionred.recipe
delete mode 100644 recipes/nadacni_fond_proti_korupci.recipe
delete mode 100644 recipes/nation_ke.recipe
delete mode 100644 recipes/national_geographic_it.recipe
delete mode 100644 recipes/nationalgeoro.recipe
delete mode 100644 recipes/nationalreviewonline.recipe
diff --git a/recipes/icons/jagran_josh.png b/recipes/icons/jagran_josh.png
deleted file mode 100644
index bf07ef70c38765ea902e837a4fc0bff6f51778c4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1044
zcmV+v1nc{WP)=}ab>$%o`a#28}4RRkm1
ziVDG%?@o6@AO=M=n2qSpjkpW0vJHl8UR?MAf+B)hxKI!!j2JV?WIEH+Reh`Oxe^NE
zBxVQ%bYmWBajC`sf9?nWf(IUO(1JF!AO#2Mx<8KlR|VZmReXO_SN1yhO1u5xU~qmg
z_r>hCuV)uNo85M9F!w=!@V|C@&N+aMcVq54(FlNNTdkK`Gf&XyXGsFoQ40c!cqk|n
zF1zrRj?b(Pzsxcqg>0jO_2~zld$Zd=qG>u2zeU52$Sl%P<1j)D#0*`QxQPALxS^~z
z^+LIJ>dNvWzDl@zK^unfa;yDzr?+V}8ShXz6z#l93P1z}z*HY7x{Ci%%r~Z)%g>GC
zjcZrWXQTBU=8oCl>ULjm^faeD66%ksao|Bgi3$i6)CdS9;LsKF&!zEGl27T$<*Of$
zhPOJ*`t;Y@-P6rpjwa8?+72aySmk1-RHoIWDuOC87hSPe3%)
zvr%;)2B=ogrL8l)&6FfBhT2x*7=&1gv`ahhlbO<3#Q+dN$S<~ZMT~_2b@Vd+lSDmr
z%TVJBSAM_fGY8fIFo4s&er;9CV}-qy9;ofg?bh5NQHg~RtMr@exVA2Rh(DK*BMma8
zFUh-|-q9x))QRIN
z9U7omVHG`M(-W=k5bOxHId{y?EzI;)oh7_QJ~b;J^UKyWRIgZ*({`4l6lPkr}P;9}$ES+G-vdnbZ?N
zsgOVoU22U^4vMph*{x*6F@WqPJs6id<$;ebjh3;%)3$-d?p6X+1I~M6BnFsPIk1cY
zfBUO0!6TbS&G*8MU*`0COq=9U?EWZQv^30Hd;Ib4sZW>fKIe9+^IMP(1kmb5mN9_A
z>=_|Yg5fp>5*U%pXU%u6ubt}Eo+_jV5j;eq;qXoeB*)sVqp|6BA$uYvQISr#dHNG$
z`h{5-Q-I;_1STX4S(GVCp@b3yK!}O(-EW0`*w)jDkxsOh7(lU26$?h#6tED%upxz%
z`u4K8WV?iv$PSmZTnMx7NkQmq)D5jvOc|U0w_g8^|
zQrX%Tv*29nF>R;=px_YaQK&=0y$RTo@t@q~Yzar}+ret79{3Z`-l(RdlDu*N
O0000u0(3?VuIu5$2Y2i0&C#Pr
zmLU*nj-Nacv!05~(|cV`y_Bi}Q(5j`jzAcoSdKuQW5-{x
z{+_uS)(L&JBk7a(-qM(0Wf21`x_4MQ&RiaojAcohB<%-ixK?l6t-UcsR=gCOp_jbG?D0w%4+a_84nEFSQHCq
z9L}wP=G`|RG%8Mozzv{JMQBaCO4h!LBBs7JPR-*<|>+HyITpaUcL74(NktPXYe6-*Gdi1f<6=g*$_+4Zw_zGcD5@_$-mX`Z&B(h2q1133iF;Ho6BM4!0D*K+#!V6ve()0`w@8
zNw2P34d1c*I6t%)l6;t$R73HYmqHxk_S2_Nk)gc;=5AdN@izJuJMG_Y(D(mP*8B?N<@W_jVlEK!GA!YfiCT;%R+4_
zrBHPv?gC;{ifH`=QH`UTXg=F+&ZbFsrU~LAKVj*>>;7gEudhbI!eb*gx;S
zx-*x5*Bla&A8tIjJk#1cx@GU^;2*c=r>;Moe!4iZzd3b$U%ke*8$w>BPL9^Xiqg*c
zj(@#evgRFE2F0_5kMpbkmw#H5`n6X{@}3Ur0vCv5@|}Bm&t`B0#$1F(o(zF
zJv6YXUVAjxo_X1^c^N;&xK_kof`TIuJQt-#N{w1}_RyHE;MjO`W_IQ5<-4n8;5=$C
z2zg095x_|`L@g4laUtD$ym0MS>!&OCcWv$a@#OeOe`YxkSaCumF#t$0!bu2$fnJn<
zpSKs^^``%u9~)_$IkG4C$eZhZ6NkRpXziMdfOJd1i8u->>o~Dy6?kqfIMp;d+_015
zgBK_Foi2m-5yI1tm#msC)ykKB)q;5wnNF|VwR7Oa!O;l%ZMsDVE?oWj-1qg&E_U4C
z_m(dG^<>-dhN)9~nu85Ndh|Ab)h@?(^krmzz4_+<*$(wjTkTg7G8W3CaqLak*XkgQ6gd(03s1=42xC67Nn{PFe)I1
oLJ5R*0%av3tYauZP=Fwx0cv`W`ADDC-v9sr07*qoM6N<$f^|7b)c^nh
diff --git a/recipes/icons/jbpress.png b/recipes/icons/jbpress.png
deleted file mode 100644
index 77e35a3fc3a75ff99a66af5c18e62111d71f1466..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 676
zcmV;V0$crwP)hH4-|Gp0^D=SAwM?F0~NJvP1eSP%w^bimb
zKR-V~K|v7_5fTmoL_|bIMMXwNMiLSd1Ox<0Nl8jdN=r*iPEJk~6chmg0aR2}Sy@?J
zTwG#eVh0BY92^`S9UUSW0wg3P0s;bpf`WsCgM@^Hii(Phi;Iqqj*^m+larGQ3JR8%
zmYJEEnwpxVq@<^(r?9ZFDJdznwY9mqxxT)>z`(%D%F4^j%goHo(9qD-)YK{}D%{-M
z-KGuS-`@-j4CdzM=;-L_>FF>qFzc`m?d|Oj4h}XpHud%O_xJbt`T6?#`uqF){{H?C
z4-Y&%Jjl1M3jhEB0d!JMQvg8b*k%9#0TD?=K~#9!%+gb0L@^kK;e7w`7#*XwZQHhu
z{V$+7u8n!F-#F}j^tQqY$^)EK!PV1Qt;HL410QVdvGp0-r`nJGsCe~T;*4c>-jZP~d;FFxV?}*$xu3{j$XNh^DMU?H1Wif+0000<
KMNUMnLSTYj_Z*4<
diff --git a/recipes/icons/jezebel.png b/recipes/icons/jezebel.png
deleted file mode 100644
index df587e12b337e566f9cc29a923449d205382d490..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 70
zcmeAS@N?(olHy`uVBq!ia0vp^0wBx?BpA#)4xIr~yq+$OAr-fhfBc`X!ou*^PyXT6
RukNiN1)i>cF6*2Ung9&162Slf
diff --git a/recipes/icons/joelonsoftware.png b/recipes/icons/joelonsoftware.png
deleted file mode 100644
index 275fb22cd6e826c334ea65c20f1103df60b2424f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 140
zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAf<0XvLn>~Cp6ljhP~>5`IAz~b
z-}GIE@&yleJW2R0-!h@of`3Ds5
noi|tYNI?@2#qL
z(~$|l0cntayrBheBuCYB!&CFmAlUu3VJ(n}SHQ3=2aPO8
z+)|0KXBa7gse)^{NA^~*25Tuzsm&qY%o>0a6L%V8YhVm7kem;FXaQnlX2fGr5Dp$B
z8IOh$8?AvpI8SLRZOc+n!hLf_0Mg^9)5xN3V_-Urf&WAF{~r-c4dR->;UXT7A~IYG
z(f2>rmYe~ytk^+9J0Tsw*Z2ja_n$C&{|?dfH$?iDA{q(dNFgdG5$RdP+RDS|`wuA8
z|EvnYNsOU+ZtD6SsOz^#bo>>5*Fes(2ZKSZUbPB;|LfnfG3U$Sx3?kD{wL+ZUdHgk
zPN)Fkp~tE1C!qG9LT~#S0$q!cZ}Nda085uF!5@D6yR6IwO_#lG)1}8xl^1pV9F*`}
zYa(mGYHIlosO4KoH2oM}M=uQIhTreUyt#Anv!DDVD|3N0y<<&CH2#piB)`p{7jsP1
z^@l-f_!30@7ZKd`6GY=W^1;NbB5GtXu)A6VPE_4i1bACaC9DqoYRdn71o??kHRE;!6zLR`l|;fY5c
z&0szxbih&lk@UI~>?t4gZJLIpU*z^H1fe8
zO2A$EsPbY@(eULelj!;DUq!{$5am}PTzVU<-E}!Xh#U?_2EXvR&*84yZr?|Kp7(=j
zti253l3SG*d(zv6!o~yK#N8{I)kw_k&`I9U>e61+IGNuZO&qI98*)qiYauUu%{z>L`TBP|~
ztfe%ScHJYr6t!NS{YUAlaC4%HUc{{UW#uAL1)dn@er-?0PiM
z|ANdAJhD{Lc?hn(0=AMDR1lxftv;+o<{?vSyvH?M8(ec4_p(OX+`a9Isr@r@?|58P
z-|FJV{nIEqAK`+lF|q1eSPLG)WHPif1KY8jO
zKB)hO6dk>S4+{&VgPadtUR6pOXvG&nE4ftOU&4>o8t-vUMo;UHr&G*%(INdg<Rj
zmU~3~=L_~7&`c_`N#t7Y;a=7_h(D*ff~1b2#Kd{>uhu6-^LOTp4Ntd$FE((>0NWp;{5
z{*_buj~5A8T)Yo5s3gcQ`2V{zcmMBRHM65UE!4$WNl>n1#(bb$fTxRNNX4yWhX!rE
zc>&W-uqjEfi|st(n~-2Cu=C-m0@KDuONWAPMrLPb=Jj2ro{S+Ay_ly61|4|$h$G3z
rFk#0ehNKNUYa0wC)OJTG$uKflXNXvHdv5v%G@HTG)z4*}Q$iB}0)S1J
diff --git a/recipes/icons/jp_dk.png b/recipes/icons/jp_dk.png
deleted file mode 100644
index 65b87c65fbf9ef3835329918814d338b4e685d55..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 330
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}et=Ji>;M1X{{zAI@BhEQ|Ns5j
z|L^zyf4}zs{ki||_x^vs_5U*Jh=RVK^ZI_y>H9gW??-{i@cU8C??)BC?*$^s?|TLQKij*u)07=(^)ycx
z$B>F!rTxrIu8th8yKQeDEBGJ%$LySe_}_+~zwV^YNqF|Uc3ST2D)p0+HFGR9neOuY
z%9Op9SQ^TZw4{1E*UtWE{nmQFwkVy-tE-pZXZ~QhQs3qI0s$+=<_A}^XPrKiy}j_8
z;}vh^U7j7WXA%ul7wGs-GC8>|^Y*oscdHIfO_7XM*XeHf!DP9&dg~sZ0@>G$m*x8|
X3v!(Nr?2%1=t2fhS3j3^P6h-`M^8OIbMZMG_0BnotiZQ&%a;9j9zFT^{l}lLUw=J+@#W&x
z7n}CpCcy`xRa^hV!0C(6L__Dpr5a}+|M%}7Q2g!tZ=3hs-n#$J=g&VODoL3Bm3z`?7f{WjI@Xot@GnFmSPg(Kp+b_5jFt%6i
zyrCMulxh|LQ9|>s@85s_M*{CYe9!CMPc;jG$f02UjXQ7tqk`6XC#hxu5Q&E^Xq|uZ
z#}9;8e*OBZm$aN}7C?|~-nx4a-@#R8PdZ3t3xLQbXDwW1{gTs^S}g>iquW_r7Bfyl`Y`qAciJc@9lhHe!Kx{8H1@6?zHF#E?pI
z!WNiiujyKG7FaYQTi{>0g=#h0!zUkrCT`q+$1H6n#Psu5UkHa#ugbjt=sm>TS8u)n
z$wQ|esU|F?W}U2&urzPV;l|}>awi|M&RRX%Y@ve%0M%|xgiRe|NdN!<07*qoM6N<$
Ef?8G-lmGw#
diff --git a/recipes/icons/jurnalulnational.png b/recipes/icons/jurnalulnational.png
deleted file mode 100644
index 6cc5a6021c8abfba99d0479ad134c72227b7a596..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 711
zcmV;&0yzDNP)<`E?A_~-cilu;xKoIb?w}1$G@udhz
z2w3n*DhLC$v^95=+;zQociqkVH8Y*7oqJ$r?wQ}moP&$SBF1=bWSlMKFoM7?mh@8k
zOy)kNRPF}+C4>keU>^eDKnYnIdt7-t1GUJb(Gx?1jr?zH=uJJx;GXX|-uE1%GzbEs
zswyxcjN_dhxo4$#E`-%|iSMNzPn1Yy
zto8L2P9{+H6Mz0f5eV2r1=n@KlBO_<5dHt8a1nlhTbs?76Ou7LJwtpByaWQ4APkOn
z16m9e+;KG_L7(*Zpos@^x8!>s0ryZ2p$g*|0SHs-%ziFRzqe+x`B&41VI;0!`+IAs
zin*@q4CcTX3t_(R5d^_GPo@X7>>DUUi=hOY_Q{O-@D7ZNIly178HO$yaY?8wLU*BE
zxC%$0gC6+4uSN{mFx#%qefgH^Jg6a=V^~3`sa|JWc73}Ju*0dUD9OJbu~@VzQr@!mCE~yG>v%HNzY~x49cZqutR~WD`!eHZ
tazBhBUs#9!Fh(uA0@k%~n&ju|+CNXzR-x`#m9GE*002ovPDHLkV1hhVR2={S
diff --git a/recipes/icons/jutarnji.png b/recipes/icons/jutarnji.png
deleted file mode 100644
index 6be815f2faa8ce25ecb09b0680660b669a9916fa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 801
zcmV++1K#|JP)Cg9uPkktJ55P$`v-LN<0PED2F;ECnptSP>%GC{huG05bs0
zUo&ss|L1r`^40CU*FE1k-}z2g@edxod%xN9yuG34Eit6nMq{)FrAU;9T<(rC)*;{u
zkU;@FeA_f>nx6Xh{l``vM>ylgGPYDAZ|5*ZLkeLSG8~QYQy^bF2J8XQ075?Zy7^&i
z6b3leag_3Tv}KXxY*I_U3q?xft2h%J${NCcZ?|v`%RxPEeAxQzP2+4F1^F^!`0bzQ|Z-;u@>f>+k>EYBPJXg92>nY}tA8LLPVX
zJTgb-0bxXE?KWIz262+$b=wpxl|%Z?r>`@VRwzlz84Im7N=6wiTuyiO77$M$p|f%m
zU#fKm?G~0a(ZHzJTc*GFdT6Dy0um%H;VazGM;c_g#u$Rp5NqI$
zC`w`?q$Ej+(dcrCNDNdjo0yYV!3$x7j}r1NT}(V001
zw_MK18MNYGWGbbh&Kbi`&%^Zt21+shz(K~HI79vDQFIjXKN2x8{=E^oLu+(x>==53
zAzjzwORGct;x&=1vAJ_6rrqWb;!1_|AF}8BSj8fG!OZ$MUw*!HyK?$GU%QSp2pD(k
z7BfTzfIDjz-NlQEhC}=y#PxheLByExwWrqf$&(Jxoi_RSlg39v@#4XXRru0v{*7yR
zOPAp;T*%jr8wrd>Jah@9c(4DH+LS4j%H@6Pk-P&j^3ugyx7WV=-ePL4%7lqEDl*2H
zoFSL9utgzZkiCbWqGEit%Djb(P6Im>z~guCOJNjUxPI^c`X_Ij6!SI{#+0cPYzoGp
zNwbxS3Cx^cXYSm&=M-!Q(!aYACCV7HtMU2EuE(z%^{<^Sv6xk`w5TaE)u}Oi`t+Ah
fb^HZi`xam1KjPZi}Lwu)w9Z#iqB$)!pRV;^^Y&
z?d$LI@$~lh`TF_#`wcy097%2c{{A3La4lAN>Fx0@S9$I6^X~EVO>c}*bB{%8hec|L
z7)EPbe3o5(mtKCDVu6}tf}06BVPu1xWrUm=M{FBNZ3#MIbC0EVk*9Z&r+Jg9e3q+&
zo3DkPv5us+j-|JgsJfS{yqd1Ro36i`ufLqHzaC3(pR&QAv%;aX!lJapA4_ivI%21}
z$Emr;s=LUnyvnV;%C5f4w8PK1#nHLP(!R^pzs%Ob&DX=v*~Zb@$kW`()7;C|-OkwH
z&)DG5+2PaN<0(^h+2H38KV{wI=@dd}K~#9!
z&C3It13?gm;lE5q`WOvkHkAvH0v8#~tvay$-6O9dJDAv5(H
ze&~XqO6YyM-DN<^HMkWi6pPTCA{v6=cpHuq3(CP|yzr>8a*&Y&>P5jh2d7G4sYg!R
z0|)a;K*`AyzNa?$@$HlYWC+KiF#yyk>tBAs>s$o@9n
fTs4|6P+I-~Sw$dOE>K2&00000NkvXXu0mjf$N6%*
diff --git a/recipes/icons/jv_dk.png b/recipes/icons/jv_dk.png
deleted file mode 100644
index b9fb2bc9b8967a04aac16cc73cabff6fe8195e8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 638
zcmV-^0)hRBP)F3+<@8a|F{Qdn3os+TO+y|SI44sq`pq8@W-OcOi(d_Eh?(Em^
z?Hr_=C8wY3_V#?r#jD-fzU1Ocwy#aMuuizKM6|55;NBCUmr%K~QMs~GxwBTgv{}5i
zUB9?(#J+IFzj4OEdC9|i$;1wxm4wa6iOHv*8l##7nvk^N-nHT0x8mQq;^4XC;JV}ByW`;f{{Fw^E<1z
zo6G9x%Cfxw(Cq3Bo|Mw<>(uS+Dyg9>s-f8L?%D9}GOeWD@$caB@!|9G
zHLj-T_4GKer|kFk?f3TX_xJDk`0)7n@cH=h`S|kr`Sbeu^!obs`ug?z`u6+#`273%
z{QUa-{QCX<`~Cemu&6z-sYA1@ksG+U0002#Nklik-}!AYZBRC?%s?zWP@)ZW^W~{iYEN7eTC_b&@&%hs&)rIHHS@}Dl
z${kF?;##-T1aVtJev*6HXabsKH_J0M;n4>72}$K9%FzbCQL$5Y?5|*2@vQ91J+J4t
zv<&eg78PfM-z;h5RqbZ0;+M(gqe5PF#+&)A;byxHz4rBszA-ZJMoJ#XJFqF1qWo|WBW@BLwN6GLJbKxHpfFx1wn`QXwB4~*Kzkztbv
zpYY15anGhq*)7T?4=4fxD4fo+017k)tgmxC
z?LGC0^7{EI>l;Ik3sa;3dJ&c1P>c>xsr?f5cjMWDqXpzwAO05@p?k!yd#}v1k^OJ+
zJ*l!T@f_!7S#!*^HGTz=HxO+k<2h6xzD@v^pC03>qeJB5l&&*lJa%$~K>>uD*BaQf
zv=qLLathS~UY|yFDHAZ6Dw%2nUY}T0G;_0*xTnNMg>GZP8VJqA^JW+Xj5$hZe~gfT
zehkkOh!hdQgvN;XdN+nIENTQR>>4QZ=S!nds=)aQ^o_uUF|fka2w(y4ITzO;O~J}8
z0`nRQc>f@(D*;@!R0(M;JbHUhnOjHI!;TXrMo*
zhZ7J1%P<)`@cKEd1Z4UMM)x{~N^=S9T??k?c)#1nQvMNLwcTDp6b|*nlDSX}xRzH?
zz*!IhEXY-(E-(j4w1-;SLBPGJ%yNuYZ{zH6>u+7e~<8HZ}~gI=7DFJKK=Ws0=fYsPcaqV
z!})W7K+|-{S;&-0Dd6-c56%lWESLuUmvob(wH3Sv0BZzcY68c?&$P2*8fD56&gf;3k52_cC0C{xV#Q;cNmqu1G!P1GsZGTpWiJ
zCAbtrAbh|Bfni=~`IH9~E?D8PsSoI1Jd6F)@-SLsK_z8rsvrie1!o~2!i6eq?e-ih
zL#q+47H7~_fP3eG1$sx7p;#HNDWi!JXJBAi!7<+o27Q5A_cF
zAoYOol0xj7a%kpx!@%yq@qjU`5ySSukz~g}Ii)LC2LPGJ1cn<)J+#$d`D|4WCQ-PY
ztfH2DcEB12>ddR1^K$zeLU6`{6-sf9XZi+fi>pc2W<)lO)%?G5f%IURpy0VNnF#Sg
zgW@3;xs~SdNjxE{XQ=p}cAXe6W55XzSQxCNe|zQc13zLUeV#yWBTau!=iILm$q=gC
z3{|Kpvj@lhFNpjn5voMN29opuqZt@*R|cCxh%`*~ty85Xu&lei
zjX%xIaSxc21i5b#GUpPiBd7QvKMCi6NvuT&hN85oz7J7l26;QxW
z6php~zaip|9IS1MxG%C~^P1VlY1xeO7UrvXF2UhjD`^&B$Lg;4Rzr2c<9{tuO~<|{q7D+d4o002ov
JPDHLkV1kPW7D@mB
diff --git a/recipes/icons/kaloeviglokalavisen_dk.png b/recipes/icons/kaloeviglokalavisen_dk.png
deleted file mode 100644
index 70464fce89f6a09dfde9717982aa2e0b0901dfd2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 801
zcmV++1K#|JP)K;?EmdAg2pJ4kv>DYmLC|x#>I*FbVwbW38eN
z{}}HqGXVG9bP8yv2`_}&en372$`O%T%-WXzshDy#9J8(lVwb!hIy*aA|EvQP_<9Nj
z4D$y9&IRoF^y^rAp?Da`KKf-lgTZg|KuHDrPRJX$f%|GA1)~lysy=o#>$;D!&
zbU2pY48&o1H(0ty;+s{P*mK1MHGmR4AKMq&4LOE`E%Ag7=d
z*A=bs;SWHN^;S!m`
z#dC&>=L!(9iCp25Im0J&Mo8w0l*|=5AX2#^rE*0~NmHiGnxhz#_y=eT
zV@Z%-FoVOh8)-mJnx~6nNX4yOe^#bL4m{j>FAoL%_#ghfu2fv)fzs;GEvpO@xOQy)
zWEz?>``0DI?H(4vHOW_nrcGbCGXCrpnGKV|)?5o(-nC0#)Z|9j*~IH%HDS6xy1!-R
oYG>M+?{C?*e?izYX7>yRTNyTmjh9X~0&QgQboFyt=akR{00V1Q#sB~S
diff --git a/recipes/icons/karsi_gazete.png b/recipes/icons/karsi_gazete.png
deleted file mode 100644
index bd44458ff79079d90ce3ff78b6bd218807de3e4c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1252
zcmV$
z^WZl({`dFaFE8ICBi|}2-!n7*{QUgt>f%B|{`K|#`T68bOyWaB|NQ*?@bLWa@8LN)
z-3bZ$-QE1|?(B|^{qgbM931`h^x!!;?2C)t3=H2gGXDDd_sYuO9vO?1F;zzP|qW`26eZ`r6vxhW_?d|&I*4Fd4x9fX*?v|F`6cqgI?Cp$<>wtjlii+YjHRMrI;V>}z+1d5L
z!1ArF_t4P&^78JPnfJ}j=U!g&s;d0)@%-fE`r_j4lau9GSn;H!{tgQFU%;ZZ;;yyn7=H~g*((ICw{ORfQudnHEZ}-W`@t&UN
zTU+_q*!kDj@u8vSTwMF+=JdV2_}SU>v9b8i&+eX{>w$s#*x3E=@8L5u;4d%w-rnz`
zqT)+S-4+(_oSgpi^X-j|^0c((Wo7&2<^KEo_Qb^QkB|QG@!~;2;3z2m_V)F^zvygi
z1RCwBrlLLR`K@32X{IRxGZf)DP+p}%kwr$(Ct57YdM6gU#ya=APqhUdZ+X$f)a;Sv-T0<L>qSVCpog%+ZQEtMfqE0ri?L;At02Z1dJ~#mwZ>+w-B)}-Am}cHc?8$NLoMwn
zIdb%vBT>dt55d)b{6xVi8@f)PIcw2!J^#UYF1xAmqTMEOUdn4Q`)|Q~wKMZ_u=Gmu
zHAH(s>vhEqV1iZV3D(V9x9N?KB%(#gQs2c@srd-9Fw$NIUS#Q%a{7E@v4f7
z?>~a2CZe8cPoUrhQ4|H4wD-dKDHT$^?O$dS&|piCEneW%-nN>9!SNf_vwT+Q5(LQr
O0000nIa5goe@+H4aE_6wl$KFsWPpKOW~(aJ$11ZdbV0mAeuGJ(hdHi`%(b+RV*x90
z(-L^h{l(DBiWSWB61y(HU2>*Wg??-tKUjgaulf${W1OcA?Lj;%fAtl{T`D>HCeGY(
zOkf3xy2kxFvv}VKKGcn1V2Bs6PqV5~o^R<6cS9kIU7qv?-8o7JxSuPOGcb5NTQr%K
zndN4Pz?B56C@fdmXwW8hkmI#xnRA#~w@H)wQtwm-1n@IaS*^U-JsKN5i7Hb|Bm=k-6`5j6t=3*mEHoCworGHw%0M5q`XA8Tfb9o
ztK?y|^%9Txo@i_UOGn6AhuTU2!!S?!fWZ{4sk&2?S14STJ0+Urqz07s;<769&|qND
z3s>79vs@5HQ
diff --git a/recipes/icons/kellog_insight.png b/recipes/icons/kellog_insight.png
deleted file mode 100644
index df0d0e5d0da396980e226f6f85c56593e0d7c682..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 708
zcmV;#0z3VQP){r+!CivIroS1Wf>Byv+HbgGoP
za!!p;B5-t1j&x9tR48C30FWd8?MYtd_j3m%Oc*ysw(Ru$#ZJoxrl4
zz*;YPTQGUIrNz3Z#=NS?ysOE*tjWHt%D%12zOKr@uFJr%%)_(J!?e%Fx6oWMddgwd~VK{&9>+-{RR+ib|)8
z>R(Y5(@xhA1M#YgFSZ^17T`XA5d%Lxp*PRN7p=pnoY&MM?ia8x|&2;sY%ZlYGPn>iknrj`%=bF*;@919d^!
zlZg*%H!?`H^1)9yA^?|fT!5=OT>Q1bbYmrN~S;K9U^tACLg^30000v&{jQKQEt)0EA7JgXO>;A^8ps-LH
z)Rxs$h#w1!i^^*&>$;j+Row$VHNOiA3x585K~ZV(kACX5NNPJ9Nszv}q)eEJ+iC2#
zt^{>s4rSb=h#9@RQ=XlPqLSjDOF#(sj`;UB6%-T{mllVQPx$txRY|jFSJJZJAG*0>
zn)S*f`pmY9x+=?3ps=X$N8(mCR@e75^FXJZ>@@TfH1oB`E{mL)aBPXH(^luUSVM1%
zfB%quLs$~fniu?H4{=o~i*d&D^ZEwPzbyKEc6VjI9(mIK;R`;SDgXsGt?Ns%LUbIfY^HZkB;_j^=eQdV6q;#9ZRnP+|9kKQcnAcSGk&2yhiQP9;9YQmM=Vx5o279d1T->T!Y6FKycxhW70$JWz7X6xGTX|h2Wr{sO
zRNvi92V@dKJ52+4B98zHnRvW4c6J5_0$i@}DO^0PHQG!OrIls5XJui1o4T6^^ol^)
z>D)Ro}(#V9bs5}cb3vhymN2MVh8pp%d
zS^4vS)
zgv+g+l#vsY!NViSNz6VR4nEY8yt07rctiQIv(wSjQ|TK^74=n&Ti5n@i=s1cxFaO(
zuzm8`wv3!vBx9&S4?~Ugxj>axm7C{$!b&COrDzFr0W4iIXdRoP89#k7H*&Ub3=iF2
zp_|Nmv>!Y&ietM>1L0%ijHcY0A}1$o>%%R|PRt)VI>wZQ9`Tj(aW1`P2N5y_N8NbV
zAOO;;?ArS68De*$J~d#oBnf>lDn-^raf`{-O9kh5$euf
z5!@b>Z?n=9so$&e?;BDNSsB{RvQ=%+
z;=;%MbMN-FYkHW{mNlbs^MsC$Vfu>pINfHJWQ
z<>SPrfi?;+-)PWfLAu*gEX#(`GuuZ-m3AEjp66%+e6ENDRExEy{02Zx2y|B?j=m@DVS
aKkGa0OEIOJ*+ISl0000Fy9%f4|e+@AUR?o3b!&kYJFhAY+FFf%@VA
z0053jL_t(|+U?Rs5&|&*MA7cJ0{1^{6dzr~ubSwaUBI1w2WS9-EdfBAI!KOV)q$EP
zq-`m98<)V`=Q@gIU{T|x4tg1+2D);~p#R*yz!h-CNUQ-f
zfnEb{0`~$SYkmR-v;tp2E8c-XORR!mW)c`$!a0KEtWIk)?T-2eap
M07*qoM6N<$g3Oz77XSbN
diff --git a/recipes/icons/kholod.png b/recipes/icons/kholod.png
deleted file mode 100644
index 2e03216b620f13d1635e703934bb57cdcbbd6891..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 8337
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
diff --git a/recipes/icons/kidney.png b/recipes/icons/kidney.png
deleted file mode 100644
index 76555e1476c9b0f15b99b82d3c2065c02addd123..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 348
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
O0000;M1%|NQ&&=hvSv-+<`L
zmrq~b0MWZQPhP!w^6br>M^EnDdvXPcZUNDqGuQ5%xpd{oxhqFbUD*Rf$IfgybY{!G
zBWrdYS+fm@_AJ@7XUV!fbJlH{vuewfWm~2!TGKOcP0y?)Ez_3NOqx^EH>aj+P6-gT
zO-U*1d3&ba0_Y6Jk|4ie28U-i(tw--PZ!6Kid$gxH<&h@CN`P9_+y}tLs
z!tO^(`OwktVr2a6?Des-_O-VA+}!^A`~Up>|NZ^#8YA(4f%dq#@NRJTyS(?jz4yJn
z@NaSVzrXju!0>Q!_`<{Z!^8N-#`wp`@NshRYi;jPRQc7_?JYC)s;l_P$@<#c`{U#C
ziHq$eEc)5m`q|p?fPw8BBko8{`OwhqCoS-Eb@;q;!M?_*{BFV!fX8h~x^{uY`>+AKdul@1y{q*$pu(AI2_5Szw{`mO*`ugrTJoU1(_O!L`
zLPqwtxHikZlmGw#%}GQ-RCwBAU?u?QsbEwAfJ%8-j3A1_Ae{eP4%_b7wr$%s-+v!#
zYFpm}=X{0piPCYx_kKWo3LR)1l!6|JAHX&dwp}%hFK3;ZGA1|H7^|A~JSFO~jX$86
zn`fgyf=o^BG#R!5J*h+i=RaT@{`1HgDvrjSYXeP~>gcRg(>uLgKj6v2V)+HuBiFn%
z;o_0W0aZZ2KEd1|^1Cq>wh%`C&7p<-{arEMzddeEGoN6Uh`Q+``-Q59T8R3W`f3d#
h`8HL}!4z4e3IJDkBIx9#s9XR5002ovPDHLkV1ksbYd8P^
diff --git a/recipes/icons/koegelokalavisen_dk.png b/recipes/icons/koegelokalavisen_dk.png
deleted file mode 100644
index 70464fce89f6a09dfde9717982aa2e0b0901dfd2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 801
zcmV++1K#|JP)K;?EmdAg2pJ4kv>DYmLC|x#>I*FbVwbW38eN
z{}}HqGXVG9bP8yv2`_}&en372$`O%T%-WXzshDy#9J8(lVwb!hIy*aA|EvQP_<9Nj
z4D$y9&IRoF^y^rAp?Da`KKf-lgTZg|KuHDrPRJX$f%|GA1)~lysy=o#>$;D!&
zbU2pY48&o1H(0ty;+s{P*mK1MHGmR4AKMq&4LOE`E%Ag7=d
z*A=bs;SWK;?EmdAg2pJ4kv>DYmLC|x#>I*FbVwbW38eN
z{}}HqGXVG9bP8yv2`_}&en372$`O%T%-WXzshDy#9J8(lVwb!hIy*aA|EvQP_<9Nj
z4D$y9&IRoF^y^rAp?Da`KKf-lgTZg|KuHDrPRJX$f%|GA1)~lysy=o#>$;D!&
zbU2pY48&o1H(0ty;+s{P*mK1MHGmR4AKMq&4LOE`E%Ag7=d
z*A=bs;SW3g|Ns9$#lKFR
z{5EOw$LN?JYuEk0cJ1$zCm($M|9$-UbNBAgW##Ye9ly_C@TH~ot&xdbN=gIJ4uO&&
zzhH*_0uATiC){7}5YVqsFyCNZ!UIzV21X`N7srr_TS*G61x#G(t6g{i)W`ikXQGL9xK%
zc@!Ic_~VDeKRoC?9oQ;{Zx+p;ZpuI3x|g}TajaMn{vQc81#8n*>{xGYNa%#{up7)C
zA9Og&I9~GYjAP*~%ZlX<;Vt1^67D<&oAla?fw^w`u4x9Q?zfsx()v*9%dFg=ODoBl
z`eP@;idYcgJtg+hr;s$Q)^S(qq&cP@Qt#<%+eng#OWanc`nZ=3_KGLV#VE^03z-Q5
z7K9(MmVXgI684^;RA!Pd;7EBJLYI0FWE&Y$?Idp4FT0)m!JtSN3q4)r$#gc)agKMe
z2tOb|f;O0z7%Nd_!Lt%Qc&JmFM^PRid$?AsskX{R;>z|i>*f@t1c8dC#uvB($w2s#
zM6z2tJ=@t5Wx%td6c{j$c?sk)`zby5~cMdPS)WI93%RF;sLGAE@RQQUzq^^i!
z%YuA@d&S7QLIArw4<>yF2ZcxqiLK^L$3w?zMYq
zXBtb7c+Q7D2S{WYfX!Y^tO>K!7ZsW>H%HvDwJi*PWmf~h~wyf=I`-|<8e)9=_}uamazc%J>`
z`I%N~f7rRVH~9GR-K&{v&Tbb)DJu5cmZ*q8^;FG&uP#4RXOH6RysBO-${pP7HP9|8Y8QLO9$T)V22^nwF&%`a$kC^TROOtxsxqelnkaKIQX?
zKg}E)2_Rsw2O-~&v$okgi@tEp`OUJJXIh&=nwb+<`P1>Da@EPjSSdBmMVi{u-1p0;
z?re}9A1}|p%%WXC;FSR&PsP0Y9eTbNvu{<`S0@TJMU2%
zV=z9g=52Rr7svDI(aG)PZ*$9h9r6S6J{2(t%0~qeBH&|WB?j-7e)5v*
z=koeg_?`#6fZ+KL32$jgX?AfBSstpv38{+;f+2ze4beBXFEgg+GJ3)FGejV@co0B%
z2hE0N#Tden>>=~VxE`LhXxLD!m6=RVWb_S_Q$$$vSpEymTQ$Z*4|mAoF?pYw4TAzj
zY^avZFS&lf<#VzLq^!vr2=AuZ5HCeERn(p64&vf&%)2zKDXm**gE*O<$>;@>mq^B%
z2h0DGuu%wC6-RkfG|hxX$&6%up_J)4qa()0xH)TwgA@h6W&NIB?*=|Njh8
z{I6aDrMx^{978G?dk>uCJ;cCp#KHRYzwBpTEHwg${r&7@v@K;HWU(g{JF4<;6*a32
z3fIWbEhK-ugI(
z36Qw94@^c-%cGm1LF0C*6d{yam#Ejea5i;{i?W1Nz&F%}GEbaYw|HkjF
roEL>c0|O?`a#+#gB*LJ;xZnf-CRvxK86RwJg1qDD>gTe~DWM4f6y;u#
diff --git a/recipes/icons/kristeligt_dagblad_dk.png b/recipes/icons/kristeligt_dagblad_dk.png
deleted file mode 100644
index ef138b9cafeae5a792e45b92332028da8b9ec065..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 448
zcmV;x0YCnUP)kwb0#%j+Qj`N#mjzgu30avIVxJmip#V~oBWa@}Yoq{Dl`C+kEODp+M~yXitT%bB
zK7Fu0ey>1$u0(*bSB<${k-TG;ziXVrZJfe%qQ-ou$%L)Vp1#+fzSynE-LcEyw$9?i
z*XPOG>df8i-s$q+>+<00^8ied>+<;Q^7rxf`T$Cg08o_t{r>*`|Nj5~0Z)_S>-6L7
z^d)DZ9%rHfRF>fD^EgbD(}PfPyZ>!WKfO6yQq0QDrO`Voa6cPK5m!C09a42;&$rVhq;(9o!mO_1{
zHOostAH+C=23?d*%Jf4RCsdomi_p@j7co%j6@g6|?eRb@GZ`Bn85PYA0HneARi(k9ugHHD=Hl?Ff%VNG%qeSEG{+^6(KM&G!+*g
z7#biK7a&qh7gS9cTvZocRuy4d7Gqo#WnC0zUKDa^5_4)2bZZiIYZ7;C6Mu9Ng?bQ&
zdk}|w4~c#ci+>N0gAI{|4UvWolZOqHhz+Eb45*k2tD6e6q6x;b2hh9(*TMth%L3xe
z0`S-X^4b9O+yM990Qlel`QZTk;{g8T0RQCx|KqxKqW>pg
z1Sw|Kki$2@AFRh1W1^O{+yrfL*MgbZC`|7{VcQ4|rzsBI1b1HU_V;BS(mVvRAZ;_l
z;-|1A9owrQ_XebC@~Liu^)wn8&vWQLx<1{~(rOZyZh|*ZjY@pBlICxM!Y(*Pk4tcf
a;0H&W)DsM?55SiI0000b|>duPt^X69w)oc}v;n85%*2m<2VuhqIsr5U*#XUrJG
zcyt&5BLWV9Xo1%sGRhJ%?dx}M-nJJCr%$#1`0-uJsE%QD0Wq|FJ-sG0h{Wrh875gY
zth=v!WFBtrwRX6J1|^8D&aS|>W+-52jUW8GcmHAedyhBDwSExl;LqT|
z`(jZEdHh7n-1+k%q)P7}5?o<4mW!dmzx{pvW8Kkg#7e0qPM(~fHEZ#brCnX6jhoiL
zeDwkp_^g&_^xSk@0zjp=|87hBVl~}RI4n^#s8l)`f|L8%-pA7=CU^xK_
z5-FZQK+noX>t!ZnNO51+jvYCA{B$di01*Ni1y)ih8BmN2H&Me9tGYIw9gm@|jZ`z)
zNspdBsspK{WIR$JoQnNh)TK|nT%iF=0VTx5>?FmVUHkT5ynJbDrb$L1*^pEXo{9Da
z(>YG>ICsDg_3a%O1ao2&y{0Ky;izrfwuf3DJam}XK_WFanIsAo>LD|D_3pK^ZRb5E
z5WP+5Gc=+$+*EVjK@36KVP>!ZItoZnGHtbyRRQ+j^$f7
zZxKRH&SVfsBH8G}T-AV_3&(ZhSK15JUzIQCo_wa-igl~5-@Gv@Jq8Uru^0ew1K>)>
z7s2P+&-Z;Fatmhf-MM?t!a0>`POf?7g+g1D4vYc8fsg@7iJVEuuUR%S{dZ$}%#yXs
u0btpRWh=V|x?ZwmC){W81c8+TF2juVWjVI63L5FBRj~cQ#dZeXnxi_(gJj
z3W*pQN5trOa_1If)w!^0ome!Emv9OiLv5@`T+Q`!H&AkXiZBg{CUQ&yS+fefie6=@
z@D}Ou8Lv
zM9Qf%r%73uDT=Bzhi)DbLs_+(@&XIy&OsPk_@HVrpVZC;kc4lQ9pDL^D2&)Tko1uGq=R!)G|U=Qz$H7rDU&6fds8s&dLXdC`E3Bx+Ow
zxigEX53~sC0-6L?wM%+^0mZvS(tsH0q{*2ysU7d$2RX{kn`jyw^~8XfF6?^uJ9nba
zzll}N%XHzyMG68-#X6@<&3dQe<3Vi(YTonz128)S0I7twmk(D-UH||907*qoM6N<$
Ef}R^MPXGV_
diff --git a/recipes/icons/kurier_poranny.png b/recipes/icons/kurier_poranny.png
deleted file mode 100644
index 0ed02efdd8759392bef561ab15ef0f74da6943ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 166
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!M1W6->wh44_wN7hng2V|{&$4_
zFAx21tn{COp{6v&9jM0B)5S5Q;#TjOtBeN>I9vlCcz&P1<6YhVBBmp;ts76VzR=V=
zly=T~1N%X?jyImw9ddgbP2UtSt#$v*5O$2MBW51A&fg}b(2pVPRkxYi>bB|V01ajE
MboFyt=akR{00G=TtN;K2
diff --git a/recipes/icons/kurier_szczecinski.png b/recipes/icons/kurier_szczecinski.png
deleted file mode 100644
index 2c8a3684dd70b5890a05acc32a42f59c4a97084e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 756
zcmV
z!*oCKk<+RdoApYOQ7aRfbPAE(tQ9#dx^?J#k;`rrQLn&1n+2ZXZHAO%hxRV{`FPBS
z1o_Wjy>xEgsFlyF<^QguRf^|Hc%FI}=uG9hfYqpe_rlo|{VmN+n4X@--0Uo-rlxS|
z!dd+G^SAi>kDnm<_jkx8e?hGf!E8{0oOrDZ?A^(03i5N8R##UM7aNQ6@-hhJ@8^S`
zfA|{iZnsfTkO%6)wJR5)*T`ncg@zse^7Ho}IJAG)o!p#kR905P-TfX02L~`qE{+~K
zgk3v$jE|2o!G*;|+`D%dMxC;qGI@&$xNL@($WpOhtHkbI+fiFv!
z6rg5`#`_&Xw_9|NI;{GD;2=M;xqzOY9-KUJ48Q&Q1H!{YFgiMl(2x*JOiW;IZVuP4
zUxP`ftaDm*uMixklKuULx5wSusi{c_)!*MwY3Cz3IT2%HqnMeQL1$+NR##WBw6p|o
zFAs8{4%o$;A0ar7lKe9$z;~jqt`;>lH7vlo+FA-Ohvm@R+{~sS)WE=i;9$*eHSh!{
zz|k^Xrk?<_Q3I`74z*HBNT8I7*aY_M-j43>E-X_vVWFYm9o7+-!}JNk5p0D^$c3;N
zP|5xgHfjB1&AdcgBZR>2?4C=55Y6i7!yHRc1w(YRCZM$##y=3k(4?Fw#
zPd>r$x86dLNJXd+gvt_s(H@R8RFmdb7IV`Kq@b)-0I~RAXbw0o1z6$0yb*e5AP}8#
zS~1y#RcMBC(%j<6Mn8-3zpz%U+X!hWqPz#FqIjhfV3X>4QZ1yh7ZB{!O-Sw62{2W$
zc?Q0UaobSZ>8F6&t`lIW&iEv}6JzF~XkPoq>T%_Ednb+C<&|`9w^#B5?B3&*+}NG~
z+jIi-voSUrFJQu${PtZ{ll<858Z;XwxFvwt{3T52B=_z1N?K=YbHTK?dQyr@0jMxM
z742g!*I<*6&=iI{9e@hN1F1dCMu6X{0NfXooe9tfA-HGJeh9@aF2N1u8SqZ-=1hQ-
z_@vXfNM2)4jpWga0H1f%i1%_lfU&^^Pl0b*88*6Ped?265w5r-xMF>HbUYzLgGG1;y+2>F*M>=TH;z_;&6B4H9_M%
zO5;aT-$YB_NKW5PPv1^f-&tMZS6ks(S>aw`-~a&P7bxNwDBuYk<$i)q@P2p-}cF5(?8;R_(%LrUTvFybF9-cD2D6D8dN4B{v>>7=LXo1E&jx9qI1?6I`$
zx4P`Px$V2Y?%2}r)Yb6b;q%tn^Wfq1%+2)Z=k@>p_u=FB`1$wx{P+F-;wdrWDK+{3
z|N8&``~UyqD>LFOH~;zh;w?YjDJI=7Fk$8xJpcd!n@L1LRCwCF(ZiY~Q4m1kigae#
z9^1CYIjX+4TF=3>`4zk05lV>Xce_k?t`T9paV2M7RgPI=8{Fr3MSFiOi=WWSY~
zfih=)@;4P<(r5rz!PGr=2F5r=K!fs-9$?g$(l2g@{b{1D`hm-#?tMQNRh{00000NkvXXu0mjfa<%IG
diff --git a/recipes/icons/la_cuarta.png b/recipes/icons/la_cuarta.png
deleted file mode 100644
index e13b93235480575c931dc403ea039770ccbf8c56..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 335
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}X@F0NE0F&G|NmVjrMrTH|KGj4
z8yb4o*!bP<-FKA)-_4vk6UaVu=H1=9?>ahm3o`6xV7P0nbOwmh(#|L;odGKD=s06+
ze78L9U3vLkkf7ihLBZXEf_KwG-|b%YZf3_SW8*U}F1uY^?z*_V1A(T0q8
zfBR_lHTUwC_DqSeTmcV*_e;f_d6;S&4VlCZI5!=TN@8`9P~6PJdd?-f@4M6mr(;rm
ze=Za~EM(-rZ=vsBI!$7Y-h*
diff --git a/recipes/icons/la_gazetta_del_mezzogiorno.png b/recipes/icons/la_gazetta_del_mezzogiorno.png
deleted file mode 100644
index 42b17a5a29e98a237942a9cd477208247869b6e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1679
zcmV;A25|X_P)Sz+4AMfSInM0
zr%RWv5C{~e3Qo}LKhS@`pwnm08VrUMF4gCgL{TQpah4AsK3uqPVaSkSL{h8O`adW?
zf*koXXy8D@t5-?@`L%-s*WbQei~0kPvr+m0O%)sogZS*Zj?XbCa`)-7hB_t%58o
zzF-)zABLt)En2k59fK@Yt5$+k6l!hUs>e2H5qzNl
zguPxLc2iQgMvWSUVjwt}|MACP=Gd4kW*@c5s0}mUrdaOeOgeI5{J#&9rS=3oUDGVAj%lweHUPm=PneXb?Y}`&z9k9a5@nHg^#hx=_1h;YZG2`p7$2-2dnVzix=y%oUL7!
zWPFOj;{9k9-f|ujk8ouhq0@y?gdRSO#xX8ksCJU2_R#+v`<$c#z}=JYTdJL6e>=#0
ze}JL(n7Uj^79>Sdy#cbh#R?}_O_=$o1I&Min03$XB*zHAix;mb(0~6GHpawZ?iR$R
zXA=RSJ;2a*fw;)+ldW#41}xK=wEN5$VUQ{;W4sohPVJz7Imlq#`<54EM3}^x)SbC%
z)v8qc_U%y}s(purS=Jnw`w=tjH?F~FI1&+M3b1+_#~07^&0OTeylg5^D#4x}Bz_Xo_H
zeP*n~g2M)04gioO1$NAwIV%eQnG4Ul1i9(CBuLjh#X39^wBP`|0RXixnczMAxv3Vp
z?hQ|Er>U<1M_@rP0Gh|NY143%bmX{H)oKaj(;Vr%I`OHKgN6T5fsk^LZe{P?Ngh(PuTG9Zo`cxd6$
zMNDw{pcpl~X|!H!Ee-`BpO1^$pj9agpnv}Xqyj?#Z~#hAe@fHnObl8Lsore~l~1zh
z6WCg+&jL97j>pswFlNkH(yqyclZkQR!o?6H{PDOD>jZ!;BlDzFkpDTvEY({{oYp+D
zYIbJU=E;v~n7TbajN#!CLANHkGLf(G@pK3Vx`j1E-15wh`g+V}q));_h}Rj;-r
zr*C372MfR(9@~UeGofP+eikxTVk9dt8#`Q
zV?~w}@EL>Eer(0w!i1lG`iYzZQ3WTG!i4_#;}3N8#fz7$UcCmqWXV#zO8)uhzubgF
Z>3>=~k$&TdANv3R002ovPDHLkV1g&GRCR(`+UEW_+I{ytuh0AaeE$A?@_cgk-)fgnf^>y7aP
zZT|mgYl6ho-XDP=#F{VO-wUjU2D;{E#^z=w=BG{Utk2k=wL&@CqmT|Lq$AGR8Rv?^
zxuNiASG+smhWBv8d!q3ecf6NJu(x*z78~j7mlPbD{o~E-sF>`iSaNh6IVPSQ8&8f)
zAjjV#CnQpC5h;m8%Izddax#T^$Ev*B3
zr1bz(22h!@CqS>P0bt2!09)1waAZvYS4QW`0S3U6Hv@h0mOgoFzq}0?khcSa@(y4~
z(J`n1*$E6Qx`q|qz=)y;7*#NVF-0#hu3(KT0X8t9T!X3VnIC#EUNjyl6ndds;7nOnPqquSb?94;5iXI
zzX}V0HFyD7hnF^B;j;rk^!z}yb+Ed1u(5sc3=mU;k5a&a5x4z(u0ZH*VFUzeIAAgE
z{^u_T%yVdu0`w`HDd~$WtcAAWx0Y7l*?g6px$jJf+Ol}z{SNNxp=J&_Nbdi!5X(JeH=+HKZBUk5V;|c7koify{mO$p!ATNMSCz}py+Jr}3K?M?9neEf
zS-CIIg<>8futu8_15?SSL{fCpNXW;F>ga{rlI@5x_u$kuWc+6=56(Z5(O1
zd_m+5o!2jWWAc5@Ib@|N!E6U%f^dP2%8LkvPU(3U=?J?l8a#1=p%OXE^6F)-+0O!^zAGNXw|8YLZ=a*Kdgh
zx;K*)Z{Ef#{d-v#!fN-pFD&4nucCia_2E}h>1t!%z4Vcnv`5w8ksz#>4~F4E$ovnw
CmUVal
diff --git a/recipes/icons/la_pausa_caffe.png b/recipes/icons/la_pausa_caffe.png
deleted file mode 100644
index 1c60c8b20277053b7d66aaff0fd4ee3cf5b9e603..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 825
zcmV-91IGM`P)%%Re5nT5!c;CMrA2N@W
zlrV&V1e`!RaZ1~jyTjG={#O=f#b6TpUce7D(mnQmAPM~E`o*(OhXu}mH-|%9ZAFtdFGrgq&ydl6E|DGgOO)wrlpNCZ
zSKC}ln(F)D)cto4)!C^8gqT7u-CJ6+nuw)}ag|cFO~uhE+c$zC#IkWNx+^#JdmeKcItC!iuQSZE1TH7`-gz|B$-Gm5d~whWEu|xi9#j?0OETp
ziY6^1c9)M$Y>Fv5H$PiJ5%WG4mr7T?fki|n$5}(3#)k-!!VRSiA(P7@QNEDLA|eqU
z0zx1rmwalKY-4F@i$=F47Is7>;k6jpWc&JtDT@3JU{qUN3+VMDv{pMoYyuMhPN!u1z8TXdZC57~$W|C``v(7?%1Hc3YP*W|@JfO;4_
MUHx3vIVCg!0QjmSumAu6
diff --git a/recipes/icons/la_rioja.png b/recipes/icons/la_rioja.png
deleted file mode 100644
index 0322d1c0d13d5bc85076047e21ea931c3cdb6d7d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 462
zcmV;<0WtoGP)bbxP9JlU3-?JaumhBK)cLE#^D03GAnr`h<+qM%@zacPx{RVj%pM50~Vckpq}c%JWlpXWXAL8L`am}RFF0FK}b)k;q(F!&k4
zi4YLAQqnBrn9GxxfDK_PJ23))Lq-Xz7NE)kq~YPv@{vKr0iPU3b2tHp(C`RDNoG@>
z)YhW6cWArX`7atT-BBYI7u6J#iT|FMfP_yi-(Y_|wYn6JM0Vp=aBK6O*LB6BLRCcx
z5E2oPaP~@m>*xL`VkC|rwqFPa((h^roq#-`RtFN`#H)(3Tk8RZ4u_-1|FOK#>+^V~
zzekw06$-({{z)HF=CLLKs~|PEV`LD3Li7#*SzXTL@*Je(B3YK8tuek_=?|)rPDq+$
zEC{f3G`tTJV{q~iO#_OqvketyAbl~S#Bi(0>F61AcX@{FUf0$78it^ZWdI=nMJ`h0Vpg^y;|#QXLHpBq4WcXXYr{45?NMKM
zW}^u+QDXA=F4FK`?z;%Q17ZMKj0sBDOj88UGAJV>6yF|%zn71!$d1Ss1(q42(*cJFZ4sLQ{y7}Wqu1e;rJkAamP
z0VF{hN-h|slZ$gP=fpoAVn5%w2SFI}7=1v1XgWa}CAAKJ-1xn<``2382;O&eB4s`t
zg*e_kz+xCgV4lksRe4AAGpEDq9Tc&7Oc%ETk
zP&4z;wDeLkc6AC!Fm(ydW@6H@_Ej-)`|{;mKx~exnTM{e-|ydlG|W9ilZz8`tJd7i
zvjrLz<>}%WQgN&GG&`5GBMq&cwi#C28~%LKmnq#+(7NhV*~PQsHzLGz>MF`LGMwZ?WSDgm
T=bU{3w1vUb)z4*}Q$iB}L(Nd%
diff --git a/recipes/icons/la_tribuna.png b/recipes/icons/la_tribuna.png
deleted file mode 100644
index ccb85fe1b7fdb2c17343520992a047e1ffcfb804..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1438
zcmV;P1!4M$P)