From 90a7a03b34421e3a1aef15ec9f2c2ee57ad11e4b Mon Sep 17 00:00:00 2001 From: southerntofu Date: Wed, 28 Jul 2021 21:21:08 -0400 Subject: [PATCH] Fix subtitles proxying, every URL is unique and beautiful --- main.py | 10 +++++++++- peertube.py | 5 +++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 9175bf2..03cd995 100644 --- a/main.py +++ b/main.py @@ -415,7 +415,15 @@ async def video_channels__about(domain, name): @app.route("//videos/watch//.vtt") async def subtitles(domain, id, lang): try: - return peertube.video_captions_download(domain, id, lang) + captions = peertube.video_captions(domain, id) + print(captions) + for entry in captions["data"]: + if entry["language"]["id"] == lang: return peertube.video_captions_download(domain, entry["captionPath"].split('/')[-1]) + return await render_template( + "error.html", + error_number = "404", + error_reason = "This video has no subtitles/captions inthe requested language" + ), 404 except Exception as e: return await render_template( "error.html", diff --git a/peertube.py b/peertube.py index 186c473..d938ac9 100644 --- a/peertube.py +++ b/peertube.py @@ -26,10 +26,11 @@ def video_captions(domain, id): url = "https://" + domain + "/api/v1/videos/" + id + "/captions" return json.loads(requests.get(url).text) -def video_captions_download(domain, id, lang): +def video_captions_download(domain, caption_id): # URL is hardcoded to prevent further proxying. URL may change with updates, see captions API # eg. https://kolektiva.media/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/captions - url = "https://" + domain + "/lazy-static/video-captions/" + id + '-' + lang + ".vtt" + # TODO: What if the captionPath doesn't follow this format on an instance? Should we really proxy ANYTHING returned by API? + url = "https://" + domain + "/lazy-static/video-captions/" + caption_id return requests.get(url).text def search(domain, term, start=0, count=10):