51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
|
#!/usr/bin/env python3.11
|
||
|
|
||
|
# Jesus Meme Generator (requires Catbox uploader)
|
||
|
|
||
|
import aiohttp # Not part of Python core
|
||
|
import asyncio # Part of Python core
|
||
|
import regex # Not part of Python core
|
||
|
import os # Part of Python core
|
||
|
import random # Part of Python core
|
||
|
import traceback
|
||
|
from urllib.parse import quote as urlquote
|
||
|
from catbox import Catbox # Not part of Python core
|
||
|
|
||
|
|
||
|
class JesusMemeGenerator():
|
||
|
def __init__(self):
|
||
|
self.MEMEAPIURL = "https://apimeme.com/meme?meme="
|
||
|
self.MEMESTORAGEDIR = os.path.join(os.path.expanduser("~"), "memes") # Save memes "temporarily" to the home directory-->'memes' subfolder; cleanup must be done externally
|
||
|
|
||
|
async def create_meme(self, top_line='', bottom_line='', meme="Jesus-Talking-To-Cool-Dude"):
|
||
|
try:
|
||
|
top_line = regex.sub('[^\p{Letter}\p{Number}\p{Punctuation}\p{Horiz_Space}\p{Currency_Symbol}]', '', top_line.strip())
|
||
|
bottom_line = regex.sub('[^\p{Letter}\p{Number}\p{Punctuation}\p{Horiz_Space}\p{Currency_Symbol}]', '', bottom_line.strip())
|
||
|
OUT_FNAME = ''
|
||
|
|
||
|
if len(top_line) < 1 or len(bottom_line) < 1:
|
||
|
return None
|
||
|
|
||
|
formed_url = f"{self.MEMEAPIURL}{meme}&top={top_line.strip()}&bottom={bottom_line.strip()}"
|
||
|
formed_url = regex.sub('\p{Horiz_Space}', '+', regex.sub('#', '%23', formed_url.strip()))
|
||
|
timeout = aiohttp.ClientTimeout(total=15)
|
||
|
async with aiohttp.ClientSession(timeout=timeout) as session:
|
||
|
async with session.get(formed_url) as response:
|
||
|
UUID = f"{random.getrandbits(8)}-{random.getrandbits(8)}"
|
||
|
OUT_FNAME = f"{UUID}.jpg"
|
||
|
with open(f"{self.MEMESTORAGEDIR}/{OUT_FNAME}", 'wb') as f:
|
||
|
f.write(await response.read())
|
||
|
|
||
|
if len (OUT_FNAME) > 0:
|
||
|
uploader = Catbox()
|
||
|
meme_link = uploader.upload(f"{self.MEMESTORAGEDIR}/{OUT_FNAME}")
|
||
|
return meme_link
|
||
|
except:
|
||
|
print(traceback.format_exc())
|
||
|
pass
|
||
|
return None
|
||
|
|
||
|
|
||
|
|
||
|
|