Spaces:
Runtime error
Runtime error
| import os | |
| import re | |
| import aiofiles | |
| import aiohttp | |
| from PIL import Image, ImageDraw, ImageEnhance, ImageFilter, ImageFont | |
| from unidecode import unidecode | |
| from youtubesearchpython.__future__ import VideosSearch | |
| from Devine import app | |
| from config import YOUTUBE_IMG_URL | |
| def changeImageSize(maxWidth, maxHeight, image): | |
| widthRatio = maxWidth / image.size[0] | |
| heightRatio = maxHeight / image.size[1] | |
| newWidth = int(widthRatio * image.size[0]) | |
| newHeight = int(heightRatio * image.size[1]) | |
| newImage = image.resize((newWidth, newHeight)) | |
| return newImage | |
| def clear(text): | |
| list = text.split(" ") | |
| title = "" | |
| for i in list: | |
| if len(title) + len(i) < 60: | |
| title += " " + i | |
| return title.strip() | |
| async def get_thumb(videoid): | |
| if os.path.isfile(f"cache/{videoid}.png"): | |
| return f"cache/{videoid}.png" | |
| url = f"https://www.youtube.com/watch?v={videoid}" | |
| try: | |
| results = VideosSearch(url, limit=1) | |
| for result in (await results.next())["result"]: | |
| try: | |
| title = result["title"] | |
| title = re.sub("\W+", " ", title) | |
| title = title.title() | |
| except: | |
| title = "Unsupported Title" | |
| try: | |
| duration = result["duration"] | |
| except: | |
| duration = "Unknown Mins" | |
| thumbnail = result["thumbnails"][0]["url"].split("?")[0] | |
| try: | |
| views = result["viewCount"]["short"] | |
| except: | |
| views = "Unknown Views" | |
| try: | |
| channel = result["channel"]["name"] | |
| except: | |
| channel = "Unknown Channel" | |
| async with aiohttp.ClientSession() as session: | |
| async with session.get(thumbnail) as resp: | |
| if resp.status == 200: | |
| f = await aiofiles.open(f"cache/thumb{videoid}.png", mode="wb") | |
| await f.write(await resp.read()) | |
| await f.close() | |
| youtube = Image.open(f"cache/thumb{videoid}.png") | |
| image1 = changeImageSize(1280, 720, youtube) | |
| image2 = image1.convert("RGBA") | |
| background = image2.filter(filter=ImageFilter.BoxBlur(10)) | |
| enhancer = ImageEnhance.Brightness(background) | |
| background = enhancer.enhance(0.5) | |
| draw = ImageDraw.Draw(background) | |
| arial = ImageFont.truetype("Devine/assets/font2.ttf", 30) | |
| font = ImageFont.truetype("Devine/assets/font.ttf", 30) | |
| draw.text((1110, 8), unidecode(app.name), fill="white", font=arial) | |
| draw.text( | |
| (55, 560), | |
| f"{channel} | {views[:23]}", | |
| (255, 255, 255), | |
| font=arial, | |
| ) | |
| draw.text( | |
| (57, 600), | |
| clear(title), | |
| (255, 255, 255), | |
| font=font, | |
| ) | |
| draw.line( | |
| [(55, 660), (1220, 660)], | |
| fill="white", | |
| width=5, | |
| joint="curve", | |
| ) | |
| draw.ellipse( | |
| [(918, 648), (942, 672)], | |
| outline="white", | |
| fill="white", | |
| width=15, | |
| ) | |
| draw.text( | |
| (36, 685), | |
| "00:00", | |
| (255, 255, 255), | |
| font=arial, | |
| ) | |
| draw.text( | |
| (1185, 685), | |
| f"{duration[:23]}", | |
| (255, 255, 255), | |
| font=arial, | |
| ) | |
| try: | |
| os.remove(f"cache/thumb{videoid}.png") | |
| except: | |
| pass | |
| background.save(f"cache/{videoid}.png") | |
| return f"cache/{videoid}.png" | |
| except Exception as e: | |
| print(e) | |
| return YOUTUBE_IMG_URL | |