From a6b9bcf8547c25cf3807e7db6b2c3afc9b9cf045 Mon Sep 17 00:00:00 2001 From: girst Date: Sat, 29 Apr 2023 14:40:07 +0000 Subject: [PATCH] use redirect.invidious.io instead of hard-coding a fallback-instance. note that some instances provide a redirect feature; this would be cool to have on redirect. or api.invidious.io, but it isn't. https://invidious.snopyta.org/redirect?referer=%2Fwatch%3Fv%3D{video_id} removed from reddit completely (who even used that?). --- app/reddit/lib.py | 4 ++-- app/youtube/__init__.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/reddit/lib.py b/app/reddit/lib.py index f1b77d2..70c892e 100644 --- a/app/reddit/lib.py +++ b/app/reddit/lib.py @@ -47,11 +47,11 @@ def parse_reddit_videos(data): reverse=True) for entry in entries: e = entry['data'] - if e['domain'] not in ['youtube.com', 'youtu.be', 'invidio.us', 'invidious.snopyta.org']: + if e['domain'] not in ['youtube.com', 'youtu.be', 'youtube-nocookie.com']: continue try: # Note: youtube.com/ is not valid (404s), but seen in the wild. - match = re.match(r'^https?://(?:www.|m.)?(?:youtube.com/watch\?(?:.*&)?v=|youtu.be/|youtube.com/(?:embed|shorts|live)/|youtube.com/)([-_0-9A-Za-z]+)(?:[?&#]t=([0-9hms:]+))?', e['url']) + match = re.match(r'^https?://(?:www.|m.)?(?:youtube.com/watch\?(?:.*&)?v=|youtu.be/|youtube(?:-nocookie)?.com/(?:embed|shorts|live)/|youtube.com/)([-_0-9A-Za-z]+)(?:[?&#]t=([0-9hms:]+))?', e['url']) video_id = match.group(1) timestamp = match.group(2) maybe_length = re.match(r'.*[\[(](?:00:)?(\d\d?(?::\d\d){1,2})[\])]', e['title']) # .* to match last occurence in line (probably terrible for performance?) diff --git a/app/youtube/__init__.py b/app/youtube/__init__.py index 8b07dd8..81f01e3 100644 --- a/app/youtube/__init__.py +++ b/app/youtube/__init__.py @@ -108,8 +108,6 @@ def watch(): None: "", # proxy disabled globally True: "", # proxy is available to this user }[proxy_on] - extra = {'geolocked':'local=1', 'livestream':'raw=0'}.get(error,'') - invidious_url = f"https://invidious.snopyta.org/watch?v={video_id}&{extra}" errdetails = { 'banned': "Instance is being rate limited.", 'malformed': "Video ID is invalid.", @@ -183,6 +181,8 @@ def watch(): parsed = microformat_parser(metadata) return {'microformat': metadata.get('microformat'),'cards':metadata.get('cards'), '_':parsed} else: + extra = {'geolocked':'local=1', 'livestream':'raw=0'}.get(error,'') + invidious_url = f"https://redirect.invidious.io/watch?v={video_id}&{extra}" if error and not metadata: # e.g. malformed, private/deleted video, ... return render_template('video-error.html.j2', video_id=video_id, video_error=error, errdetails=errdetails, invidious_url=invidious_url) -- 2.39.3