from requests import session from json import loads from urllib.parse import unquote def getinitialdata(html: str): for line in html.splitlines(): if line.strip().startswith('window["ytInitialData"] = '): return loads(line.split('window["ytInitialData"] = ', 1)[1].strip()[:-1]) return {} mysession = session() #extract latest version automatically try: lver = getinitialdata(mysession.get("https://www.youtube.com/").text)["responseContext"]["serviceTrackingParams"][2]["params"][2]["value"] except: lver = "2.20201002.02.01" mysession.headers.update({"x-youtube-client-name": "1", "x-youtube-client-version": lver, "Accept-Language": "en-US"}) def fullyexpand(inputdict: dict): lastrequestj = inputdict while "continuations" in lastrequestj.keys(): lastrequest = mysession.get("https://www.youtube.com/browse_ajax?continuation="+unquote(lastrequestj["continuations"][0]["nextContinuationData"]["continuation"])) lastrequestj = lastrequest.json()[1]["response"]["continuationContents"]["gridContinuation"] inputdict["items"].extend(lastrequestj["items"]) return inputdict