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): """Check if the link is a valid Resso mobile URL.""" return bool(re.search(self.regex, link)) async def track(self, url, playid: Union[bool, str] = None): """Extract track info from a Resso link and find a matching YouTube video.""" 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") title, des = None, None 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 Exception: pass if not title or not des: return None results = VideosSearch(title, limit=1) yt_results = (await results.next()).get("result", []) if not yt_results: return None result = yt_results[0] track_details = { "title": result["title"], "link": result["link"], "vidid": result["id"], "duration_min": result["duration"], "thumb": result["thumbnails"][0]["url"].split("?")[0], } return track_details, result["id"]