use high res picture in meta

This commit is contained in:
Roy Olav Purser 2021-05-25 13:39:39 +02:00
parent e942d73474
commit 007aafafd5
Signed by: roypur
GPG Key ID: E14D26A036F21656

View File

@ -119,10 +119,6 @@ class MetaParser(html.parser.HTMLParser):
self.accepted_attrs.append("og:title") self.accepted_attrs.append("og:title")
self.accepted_attrs.append("og:description") self.accepted_attrs.append("og:description")
self.accepted_attrs.append("og:image") self.accepted_attrs.append("og:image")
self.accepted_attrs.append("og:video:height")
self.accepted_attrs.append("og:video:width")
self.accepted_attrs.append("og:image:height")
self.accepted_attrs.append("og:image:width")
super().__init__() super().__init__()
def handle_starttag(self, tag, attrs): def handle_starttag(self, tag, attrs):
if tag == "meta": if tag == "meta":
@ -218,10 +214,6 @@ class UpstreamHandler():
data_new["og:title"] = data_raw.get("title") data_new["og:title"] = data_raw.get("title")
data_new["og:description"] = data_raw.get("author_name") data_new["og:description"] = data_raw.get("author_name")
data_new["og:image"] = data_raw.get("thumbnail_url") data_new["og:image"] = data_raw.get("thumbnail_url")
data_new["og:video:height"] = data_raw.get("height")
data_new["og:video:width"] = data_raw.get("width")
data_new["og:image:height"] = data_raw.get("thumbnail_height")
data_new["og:image:width"] = data_raw.get("thumbnail_width")
data_filtered = {} data_filtered = {}
for key in data_new: for key in data_new:
value = data_new.get(key) value = data_new.get(key)
@ -229,6 +221,16 @@ class UpstreamHandler():
data_filtered[key] = value data_filtered[key] = value
data_filtered.update(parser.meta_data) data_filtered.update(parser.meta_data)
data = data_filtered data = data_filtered
image = data.get("og:image")
if isinstance(image, str):
if self.provider == "youtube":
full_image = re.sub(r'\/[a-zA-Z0-9]+\.([a-zA-Z0-9]+)$', r'/maxresdefault.\1', image)
image_status = None
if full_image != image:
image_status = await session.head(full_image)
if hasattr(image_status, "status") and (image_status.status < 400):
data["og:image"] = full_image
except Exception as e: except Exception as e:
logger.info(e) logger.info(e)
return data return data
@ -369,13 +371,6 @@ class MainHandler(tornado.web.RequestHandler):
meta = await handler.meta() meta = await handler.meta()
image = meta.get("og:image") image = meta.get("og:image")
if isinstance(image, str): if isinstance(image, str):
if handler.provider == "youtube":
full_image = re.sub(r'\/[a-zA-Z0-9]+\.([a-zA-Z0-9]+)$', r'/maxresdefault.\1', image)
image_type = None
if full_image != image:
image_type = await handler.proxy.content_type(full_image)
if isinstance(image_type, str) and image_type.startswith("image"):
image = full_image
image = await handler.proxy.proxy_url(image, None) image = await handler.proxy.proxy_url(image, None)
if isinstance(image, str): if isinstance(image, str):
self.set_header("Custom-Poster", image) self.set_header("Custom-Poster", image)