import json import re import requests from .. import config from .. import util from ..exceptions import InvalidVideoIdException headers = config.headers pattern=re.compile(r"yt\.setConfig\({'PLAYER_CONFIG': ({.*})}\);") def _parse(html): result = re.search(pattern, html) res= json.loads(result.group(1)) response = res["args"].get("embedded_player_response") if response is None: raise InvalidVideoIdException("Invalid video_id.") renderer = (json.loads(response))["embedPreview"]["thumbnailPreviewRenderer"] return { "duration": int(renderer["videoDurationSeconds"]), "title" : [''.join(run["text"]) for run in renderer["title"]["runs"]][0], "channelId" : renderer["videoDetails"]["embeddedPlayerOverlayVideoDetailsRenderer"]["channelThumbnailEndpoint"]["channelThumbnailEndpoint"]["urlEndpoint"]["urlEndpoint"]["url"][9:] } def get_info(video_id): url = f"https://www.youtube.com/embed/{video_id}" resp= requests.get(url, headers = headers) resp.raise_for_status() return _parse(resp.text)