Add option for reloading video without invidious

For faster usage of new identity button as an alternative
This commit is contained in:
James Taylor 2020-05-27 11:55:47 -07:00
parent 3d5293ba4a
commit d7a4b03fdf
2 changed files with 54 additions and 38 deletions

View File

@ -288,7 +288,14 @@
{% block main %}
{% if playability_error %}
<div class="playability-error"><span>{{ 'Error: ' + playability_error }}</span></div>
<div class="playability-error">
<span>{{ 'Error: ' + playability_error }}
{% if invidious_reload_button %}
<a href="{{ video_url }}&use_invidious=0"><br>
Reload without invidious (for usage of new identity button).</a>
{% endif %}
</span>
</div>
{% else %}
<video controls autofocus class="video">
{% for video_source in video_sources %}

View File

@ -207,7 +207,7 @@ headers = (
('X-YouTube-Client-Version', '2.20180830'),
) + util.mobile_ua
def extract_info(video_id, playlist_id=None, index=None):
def extract_info(video_id, use_invidious, playlist_id=None, index=None):
# bpctr=9999999999 will bypass are-you-sure dialogs for controversial
# videos
url = 'https://m.youtube.com/watch?v=' + video_id + '&pbj=1&bpctr=9999999999'
@ -244,6 +244,7 @@ def extract_info(video_id, playlist_id=None, index=None):
# check for 403
info['invidious_used'] = False
info['invidious_reload_button'] = False
if settings.route_tor and info['formats'] and info['formats'][0]['url']:
try:
response = util.head(info['formats'][0]['url'],
@ -254,8 +255,9 @@ def extract_info(video_id, playlist_id=None, index=None):
return info
if response.status == 403:
print(('Access denied (403) for video urls.'
' Retrieving urls from Invidious...'))
print('Access denied (403) for video urls.')
if use_invidious:
print(' Retrieving urls from Invidious...')
info['invidious_used'] = True
try:
video_info = util.fetch_url(
@ -273,7 +275,8 @@ def extract_info(video_id, playlist_id=None, index=None):
info['playability_error'] += '\n' + playability_error
else:
info['playability_error'] = playability_error
# include button to reload without invidious
info['invidious_reload_button'] = True
return info
video_info = json.loads(video_info.decode('utf-8'))
@ -291,6 +294,9 @@ def extract_info(video_id, playlist_id=None, index=None):
+ itag + ' not found in invidious urls'))
continue
fmt['url'] = itag_to_url[itag]
else:
info['playability_error'] = ('Access denied (403) for video '
'urls')
elif 300 <= response.status < 400:
print('Error: exceeded max redirects while checking video URL')
return info
@ -345,9 +351,10 @@ def get_watch_page(video_id=None):
lc = request.args.get('lc', '')
playlist_id = request.args.get('list')
index = request.args.get('index')
use_invidious = bool(int(request.args.get('use_invidious', '1')))
tasks = (
gevent.spawn(comments.video_comments, video_id, int(settings.default_comment_sorting), lc=lc ),
gevent.spawn(extract_info, video_id, playlist_id=playlist_id,
gevent.spawn(extract_info, video_id, use_invidious, playlist_id=playlist_id,
index=index)
)
gevent.joinall(tasks)
@ -456,6 +463,8 @@ def get_watch_page(video_id=None):
allowed_countries = info['allowed_countries'],
ip_address = info['ip_address'] if settings.route_tor else None,
invidious_used = info['invidious_used'],
invidious_reload_button = info['invidious_reload_button'],
video_url = util.URL_ORIGIN + '/watch?v=' + video_id,
)