Fix subtitles proxying, every URL is unique and beautiful

This commit is contained in:
southerntofu 2021-07-28 21:21:08 -04:00 committed by metalune
parent 0b47bda1aa
commit 90a7a03b34
2 changed files with 12 additions and 3 deletions

10
main.py
View file

@ -415,7 +415,15 @@ async def video_channels__about(domain, name):
@app.route("/<string:domain>/videos/watch/<string:id>/<string:lang>.vtt") @app.route("/<string:domain>/videos/watch/<string:id>/<string:lang>.vtt")
async def subtitles(domain, id, lang): async def subtitles(domain, id, lang):
try: 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: except Exception as e:
return await render_template( return await render_template(
"error.html", "error.html",

View file

@ -26,10 +26,11 @@ def video_captions(domain, id):
url = "https://" + domain + "/api/v1/videos/" + id + "/captions" url = "https://" + domain + "/api/v1/videos/" + id + "/captions"
return json.loads(requests.get(url).text) 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 # 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 # 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 return requests.get(url).text
def search(domain, term, start=0, count=10): def search(domain, term, start=0, count=10):