feat: check for playback errors and return them in invidious api fashion

This commit is contained in:
2025-09-22 10:50:33 +02:00
parent be697bb572
commit c20d4c34aa

View File

@@ -93,19 +93,21 @@ def trending():
def popular():
return send(200, [{}])
def getError(idata: dict):
def getError(wdata: dict):
unknown_error = {"status": "Unknown error", "reason": "This is a generic ythdd error."}
error = ""
try:
playabilityStatus = safeTraverse(idata, ['stage1', 'playabilityStatus'], default=unknown_error)
print(playabilityStatus)
playabilityStatus = safeTraverse(wdata, ['ec1', 'playabilityStatus'], default=unknown_error)
# check for error
if safeTraverse(playabilityStatus, ["status"], default="error") == "OK":
return None # no error? return None
error += f"({playabilityStatus['status']}) {playabilityStatus['reason']}"
except:
error += f"Generic error"
try:
errorScreen = safeTraverse(idata, ['stage1', 'playabilityStatus', 'errorScreen', 'playerErrorMessageRenderer', 'subreason', 'runs'], default=[])
errorScreen = safeTraverse(wdata, ['ec1', 'playabilityStatus', 'errorScreen', 'playerErrorMessageRenderer', 'subreason', 'runs'], default=[])
error += " - "
for x in errorScreen:
error += f"{x['text']} "
@@ -349,9 +351,14 @@ def videos(data):
else:
del ythdd_globals.video_cache[data[3]]
ydata = ythdd_extractor.extract(data[3], manifest_fix=True)
wdata = ythdd_extractor.WEBextractSinglePage(data[3])
error = getError(wdata)
if error is not None:
return send(500, {"status": "error", "error": error})
ydata = ythdd_extractor.extract(data[3], manifest_fix=True)
#return send(200, {'ydata': ydata, 'wdata': wdata})
#return send(200, {'idata': idata, 'wdata': wdata})