From 7d37665a8372445ffc39534b6eebf0c8faa5580e Mon Sep 17 00:00:00 2001 From: unkn0w7n <51942695+unkn0w7n@users.noreply.github.com> Date: Sun, 16 Jul 2023 23:59:05 +0530 Subject: [PATCH] Update bloomberg-business-week.recipe --- recipes/bloomberg-business-week.recipe | 58 ++++++++++++++++++++------ 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/recipes/bloomberg-business-week.recipe b/recipes/bloomberg-business-week.recipe index 941604dfb0..8b241b1dee 100644 --- a/recipes/bloomberg-business-week.recipe +++ b/recipes/bloomberg-business-week.recipe @@ -1,5 +1,6 @@ from calibre.web.feeds.news import BasicNewsRecipe, classes from calibre import browser +from html5_parser import parse import json import re @@ -19,7 +20,7 @@ class Bloomberg(BasicNewsRecipe): #auth {font-size:small; font-weight:bold;} #time, .chart {font-size:small;} #subhead {font-style:italic; color:#404040;} - .news-figure-caption-text, #cap {font-size:small; text-align:center;} + .news-figure-caption-text, #cap, #img {font-size:small; text-align:center;} .news-figure-credit {font-size:small; text-align:center; color:#202020;} ''' @@ -70,17 +71,22 @@ class Bloomberg(BasicNewsRecipe): return feeds def preprocess_raw_html(self, raw, *a): - m = re.search('data-component-props="ArticleBody">', raw) + root = parse(raw) + m = root.xpath('//script[@data-component-props="ArticleBody"]') if not m: - m = re.search('data-component-props="FeatureBody">', raw) + m = root.xpath('//script[@data-component-props="FeatureBody"]') if not m: - return raw - - raw = raw[m.start():] - raw = raw.split('>', 1)[1] - data = json.JSONDecoder().raw_decode(raw)[0] - data = data['story'] + m2 = root.xpath('//script[@id="__NEXT_DATA__"]') + if not m2: + return raw + if m: + data = json.loads(m[0].text) + data = data['story'] + else: + data = json.loads(m2[0].text) + data = data['props']['pageProps']['story'] + title = '
'.format(data['ledeImageUrl'])
+
+ if 'ledeDescription' in data:
+ if data['ledeDescription'] is not None:
+ caption = '' + data['ledeDescription'] + ''
+ else:
+ if 'lede' in data:
+ if data['lede'] is not None:
+ if 'alt' in data['lede']:
+ if data['lede']['alt'] is not None:
+ caption = '' + data['lede']['alt'] + ''
- if data['ledeDescription'] is not None:
- caption = '' + data['ledeDescription'] + ''
+ if m:
+ body = data['body']
+ else:
+ body = ''
+ body_data = data['body']['content']
+ for objects in body_data:
+ if objects['type'] == 'media':
+ if objects['subType'] == 'photo':
+ body += '
'.format(objects['data']['photo']['src'])
+ body += '' + objects['data']['photo']['caption'] + '
' + if not 'content' in objects: + continue + for content in objects['content']: + if 'value' in content: + body += content['value'] + elif 'content' in content: + for val_cont in content['content']: + if 'value' in val_cont: + body += val_cont['value'] - body = data['body'] html = '
' + cat + title + subhead + auth + lede + caption + '