File size: 3,669 Bytes
80287e2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
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
|