| import re | |
| from typing import Union | |
| import aiohttp | |
| from bs4 import BeautifulSoup | |
| from youtubesearchpython.__future__ import VideosSearch | |
| class RessoAPI: | |
| def __init__(self): | |
| self.regex = r"^(https:\/\/m.resso.com\/)(.*)$" | |
| self.base = "https://m.resso.com/" | |
| async def valid(self, link: str): | |
| if re.search(self.regex, link): | |
| return True | |
| else: | |
| return False | |
| async def track(self, url, playid: Union[bool, str] = None): | |
| if playid: | |
| url = self.base + url | |
| async with aiohttp.ClientSession() as session: | |
| async with session.get(url) as response: | |
| if response.status != 200: | |
| return False | |
| html = await response.text() | |
| soup = BeautifulSoup(html, "html.parser") | |
| for tag in soup.find_all("meta"): | |
| if tag.get("property", None) == "og:title": | |
| title = tag.get("content", None) | |
| if tag.get("property", None) == "og:description": | |
| des = tag.get("content", None) | |
| try: | |
| des = des.split("·")[0] | |
| except: | |
| pass | |
| if des == "": | |
| return | |
| results = VideosSearch(title, limit=1) | |
| for result in (await results.next())["result"]: | |
| title = result["title"] | |
| ytlink = result["link"] | |
| vidid = result["id"] | |
| duration_min = result["duration"] | |
| thumbnail = result["thumbnails"][0]["url"].split("?")[0] | |
| track_details = { | |
| "title": title, | |
| "link": ytlink, | |
| "vidid": vidid, | |
| "duration_min": duration_min, | |
| "thumb": thumbnail, | |
| } | |
| return track_details, vidid | |