diff options
-rw-r--r-- | settings.py | 18 | ||||
-rw-r--r-- | youtube/comments.py | 4 | ||||
-rw-r--r-- | youtube/local_playlist.py | 4 | ||||
-rw-r--r-- | youtube/playlist.py | 13 | ||||
-rw-r--r-- | youtube/templates/base.html | 3 | ||||
-rw-r--r-- | youtube/util.py | 13 |
6 files changed, 35 insertions, 20 deletions
diff --git a/settings.py b/settings.py index fffe6f2..dfab369 100644 --- a/settings.py +++ b/settings.py @@ -128,6 +128,13 @@ For security reasons, enabling this is not recommended.''', 'comment': '', }), + ('proxy_images', { + 'label': 'proxy images', + 'type': bool, + 'default': True, + 'comment': '', + }), + ('use_comments_js', { 'label': 'Enable comments.js', 'type': bool, @@ -264,7 +271,7 @@ else: if type(node) != ast.Assign: log_ignored_line(node.lineno, "only assignments are allowed") continue - + if len(node.targets) > 1: log_ignored_line(node.lineno, "only simple single-variable assignments allowed") continue @@ -273,11 +280,11 @@ else: if type(target) != ast.Name: log_ignored_line(node.lineno, "only simple single-variable assignments allowed") continue - + if target.id not in acceptable_targets: log_ignored_line(node.lineno, target.id + " is not a valid setting") continue - + if type(node.value) not in attributes: log_ignored_line(node.lineno, "only literals allowed for values") continue @@ -305,6 +312,11 @@ else: globals().update(current_settings_dict) +if proxy_images: + img_prefix = "/" +else: + img_prefix = "" + if route_tor: diff --git a/youtube/comments.py b/youtube/comments.py index 032ce8a..a7a93cc 100644 --- a/youtube/comments.py +++ b/youtube/comments.py @@ -92,7 +92,7 @@ def post_process_comments_info(comments_info): comment['author_url'] = concat_or_none( util.URL_ORIGIN, comment['author_url']) comment['author_avatar'] = concat_or_none( - '/', comment['author_avatar']) + settings.img_prefix, comment['author_avatar']) comment['permalink'] = concat_or_none(util.URL_ORIGIN, '/watch?v=', comments_info['video_id'], '&lc=', comment['id']) @@ -139,7 +139,7 @@ def post_process_comments_info(comments_info): comments_info['video_url'] = concat_or_none(util.URL_ORIGIN, '/watch?v=', comments_info['video_id']) - comments_info['video_thumbnail'] = concat_or_none('/i.ytimg.com/vi/', + comments_info['video_thumbnail'] = concat_or_none(settings.img_prefix, 'https://i.ytimg.com/vi/', comments_info['video_id'], '/mqdefault.jpg') diff --git a/youtube/local_playlist.py b/youtube/local_playlist.py index 3a058b3..891bb76 100644 --- a/youtube/local_playlist.py +++ b/youtube/local_playlist.py @@ -35,7 +35,7 @@ def add_to_playlist(name, video_info_list): file.write(info + "\n") missing_thumbnails.append(id) gevent.spawn(util.download_thumbnails, os.path.join(thumbnails_directory, name), missing_thumbnails) - + def get_local_playlist_videos(name, offset=0, amount=50): try: @@ -52,7 +52,7 @@ def get_local_playlist_videos(name, offset=0, amount=50): try: info = json.loads(video_json) if info['id'] + ".jpg" in thumbnails: - info['thumbnail'] = "/youtube.com/data/playlist_thumbnails/" + name + "/" + info['id'] + ".jpg" + info['thumbnail'] = "/https://youtube.com/data/playlist_thumbnails/" + name + "/" + info['id'] + ".jpg" else: info['thumbnail'] = util.get_thumbnail_url(info['id']) missing_thumbnails.append(info['id']) diff --git a/youtube/playlist.py b/youtube/playlist.py index 2e2af98..e596eae 100644 --- a/youtube/playlist.py +++ b/youtube/playlist.py @@ -1,5 +1,6 @@ from youtube import util, yt_data_extract, proto, local_playlist from youtube import yt_app +import settings import base64 import urllib @@ -14,15 +15,15 @@ import flask -def playlist_ctoken(playlist_id, offset): - +def playlist_ctoken(playlist_id, offset): + offset = proto.uint(1, offset) # this is just obfuscation as far as I can tell. It doesn't even follow protobuf offset = b'PT:' + proto.unpadded_b64encode(offset) offset = proto.string(15, offset) continuation_info = proto.string( 3, proto.percent_b64encode(offset) ) - + playlist_id = proto.string(2, 'VL' + playlist_id ) pointless_nest = proto.string(80226972, playlist_id + continuation_info) @@ -51,7 +52,7 @@ def playlist_first_page(playlist_id, report_text = "Retrieved playlist"): content = json.loads(util.uppercase_escape(content.decode('utf-8'))) return content - + #https://m.youtube.com/playlist?itct=CBMQybcCIhMIptj9xJaJ2wIV2JKcCh3Idwu-&ctoken=4qmFsgI2EiRWTFBMT3kwajlBdmxWWlB0bzZJa2pLZnB1MFNjeC0tN1BHVEMaDmVnWlFWRHBEUWxFJTNE&pbj=1 def get_videos(playlist_id, page): @@ -84,7 +85,7 @@ def get_playlist_page(): this_page_json = first_page_json else: tasks = ( - gevent.spawn(playlist_first_page, playlist_id, report_text="Retrieved playlist info" ), + gevent.spawn(playlist_first_page, playlist_id, report_text="Retrieved playlist info" ), gevent.spawn(get_videos, playlist_id, page) ) gevent.joinall(tasks) @@ -103,7 +104,7 @@ def get_playlist_page(): util.prefix_urls(item) util.add_extra_html_info(item) if 'id' in item: - item['thumbnail'] = '/https://i.ytimg.com/vi/' + item['id'] + '/default.jpg' + item['thumbnail'] = settings.img_prefix + 'https://i.ytimg.com/vi/' + item['id'] + '/default.jpg' item['url'] += '&list=' + playlist_id if item['index']: diff --git a/youtube/templates/base.html b/youtube/templates/base.html index 44aef20..f325f86 100644 --- a/youtube/templates/base.html +++ b/youtube/templates/base.html @@ -3,7 +3,8 @@ <head> <meta charset="utf-8"> <title>{{ page_title }}</title> - <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline'; media-src 'self' https://*.googlevideo.com"> + <meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline'; media-src 'self' https://*.googlevideo.com; + {{ "img-src https://*.googleusercontent.com https://*.ggpht.com https://*.ytimg.com;" if not settings.proxy_images else "" }}"> <link href="{{ theme_path }}" type="text/css" rel="stylesheet"> <link href="/youtube.com/static/shared.css" type="text/css" rel="stylesheet"> <link href="/youtube.com/static/comments.css" type="text/css" rel="stylesheet"> diff --git a/youtube/util.py b/youtube/util.py index 3c32ddb..579f512 100644 --- a/youtube/util.py +++ b/youtube/util.py @@ -342,8 +342,8 @@ def video_id(url): # default, sddefault, mqdefault, hqdefault, hq720 def get_thumbnail_url(video_id): - return "/i.ytimg.com/vi/" + video_id + "/mqdefault.jpg" - + return settings.img_prefix + "https://i.ytimg.com/vi/" + video_id + "/mqdefault.jpg" + def seconds_to_timestamp(seconds): seconds = int(seconds) hours, seconds = divmod(seconds,3600) @@ -394,10 +394,11 @@ def concat_or_none(*strings): def prefix_urls(item): - try: - item['thumbnail'] = prefix_url(item['thumbnail']) - except KeyError: - pass + if settings.proxy_images: + try: + item['thumbnail'] = prefix_url(item['thumbnail']) + except KeyError: + pass try: item['author_url'] = prefix_url(item['author_url']) |