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