|
- from json import loads
- from urllib.parse import unquote
- from time import sleep
-
- import requests
-
- 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 {}
-
- def getapikey(html: str):
- return html.split('"INNERTUBE_API_KEY":"', 1)[-1].split('"', 1)[0]
-
- #extract latest version automatically
- def getlver(initialdata: dict):
- try:
- return initialdata["responseContext"]["serviceTrackingParams"][2]["params"][2]["value"]
- except:
- return "2.20201016.02.00"
-
- def fullyexpand(inputdict: dict, mysession: requests.session, continuationheaders: dict):
- lastrequestj = inputdict
- while "continuations" in lastrequestj.keys():
- while True:
- lastrequest = mysession.get("https://www.youtube.com/browse_ajax?continuation="+unquote(lastrequestj["continuations"][0]["nextContinuationData"]["continuation"]), headers=continuationheaders)
- if lastrequest.status_code == 200:
- break
- else:
- print("Non-200 API status code, waiting 30 seconds before retrying...")
- sleep(30)
- lastrequestj = lastrequest.json()[1]["response"]["continuationContents"]["gridContinuation"]
- inputdict["items"].extend(lastrequestj["items"])
-
- return inputdict
|