24 lines
864 B
Python
24 lines
864 B
Python
from django.core.cache import cache
|
|
from django.template.defaultfilters import truncatewords
|
|
|
|
from judge.jinja2.markdown import markdown
|
|
from judge.jinja2.reference import reference
|
|
|
|
|
|
def generate_opengraph(cache_key, data, style):
|
|
metadata = cache.get(cache_key)
|
|
if metadata is None:
|
|
description = None
|
|
tree = reference(markdown(data, style)).tree
|
|
for p in tree.iterfind(".//p"):
|
|
text = p.text_content().strip()
|
|
if text:
|
|
description = text
|
|
break
|
|
if description:
|
|
for remove in (r"\[", r"\]", r"\(", r"\)"):
|
|
description = description.replace(remove, "")
|
|
img = tree.xpath(".//img")
|
|
metadata = truncatewords(description, 60), img[0].get("src") if img else None
|
|
cache.set(cache_key, metadata, 86400)
|
|
return metadata
|