import datetime
import os
import hashlib
import time
from playwright.sync_api import sync_playwright
from jinja2 import Template
from config.config import TMP
# configuration
TIMEZONE = 8
IMAGE_WIDTH = 1280
IMAGE_HEIGHT = 1280
def render(text, filename, width=IMAGE_WIDTH, height=IMAGE_HEIGHT, font_size=60, text_color="black", margin=50) -> int:
err = 0
browser = None
page = None
context = None
try:
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context()
page = context.new_page()
# template
template = Template("{{ text }}")
processed_text = template.render(text=text)
html_content = f"""
{processed_text}
"""
page.set_content(html_content)
# set window size
page.set_viewport_size({"width": width, "height": height})
# screenshot
page.screenshot(path=filename)
except Exception as e:
# exception
print(e)
err = 1
finally:
if page:
try: page.close()
except: pass
if context:
try: context.close()
except: pass
if browser:
try: browser.close()
except: pass
return err
def gen(context:dict) -> str | None:
"""
Generate a image that has the content of the post in it.
Args:
context (dict): data of a post
Returns:
str: filename of the generated image.
None: An error occurred, and nothing was returned.
"""
# data preparation
content = context["content"]["text"]
# generate image
filename = TMP + hashlib.sha512( str(time.time()).encode() ).hexdigest() + ".jpg"
filename = os.path.abspath(filename)
err = render(content, filename, width=IMAGE_WIDTH, height=IMAGE_HEIGHT)
if err:
return None
return filename
def gen_caption(context:dict) -> str:
"""
Generate caption of the IG post.
Args:
context (dict): data of a post
Returns:
str: caption.
"""
caption = f"""[TCIVS Niming #{context["id"]}]
{context["content"]["text"]}
"""
return caption