zulip/zerver/lib/url_preview/parsers/open_graph.py

37 lines
1.0 KiB
Python
Raw Normal View History

from urllib.parse import urlparse
from typing_extensions import override
from zerver.lib.url_preview.types import UrlEmbedData
from .base import BaseParser
class OpenGraphParser(BaseParser):
@override
def extract_data(self) -> UrlEmbedData:
meta = self._soup.findAll("meta")
data = UrlEmbedData()
for tag in meta:
if not tag.has_attr("property"):
continue
if not tag.has_attr("content"):
continue
if tag["property"] == "og:title":
data.title = tag["content"]
elif tag["property"] == "og:description":
data.description = tag["content"]
elif tag["property"] == "og:image":
try:
# We use urlparse and not URLValidator because we
# need to support relative URLs.
urlparse(tag["content"])
except ValueError:
continue
data.image = tag["content"]
return data