Support for custom channel urls
This commit is contained in:
parent
804b7e8d84
commit
7c97a17053
@ -359,23 +359,32 @@ def get_channel_page(url, query_string=''):
|
|||||||
else:
|
else:
|
||||||
raise ValueError('Unknown channel tab: ' + tab)
|
raise ValueError('Unknown channel tab: ' + tab)
|
||||||
|
|
||||||
def get_user_page(url, query_string=''):
|
# youtube.com/user/[username]/[page]
|
||||||
|
# youtube.com/c/[custom]/[page]
|
||||||
|
# youtube.com/[custom]/[page]
|
||||||
|
def get_channel_page_general_url(url, query_string=''):
|
||||||
path_components = url.rstrip('/').lstrip('/').split('/')
|
path_components = url.rstrip('/').lstrip('/').split('/')
|
||||||
username = path_components[0]
|
is_toplevel = not path_components[0] in ('user', 'c')
|
||||||
try:
|
|
||||||
page = path_components[1]
|
if len(path_components) + int(is_toplevel) == 3: # has /[page] after it
|
||||||
except IndexError:
|
page = path_components[2]
|
||||||
|
base_url = 'https://www.youtube.com/' + '/'.join(path_components[0:-1])
|
||||||
|
elif len(path_components) + int(is_toplevel) == 2: # does not have /[page] after it, use /videos by default
|
||||||
page = 'videos'
|
page = 'videos'
|
||||||
|
base_url = 'https://www.youtube.com/' + '/'.join(path_components)
|
||||||
|
else:
|
||||||
|
raise ValueError()
|
||||||
|
|
||||||
if page == 'videos':
|
if page == 'videos':
|
||||||
polymer_json = common.fetch_url('https://www.youtube.com/user/' + username + '/videos?pbj=1&view=0', common.desktop_ua + headers_1)
|
polymer_json = common.fetch_url(base_url + '/videos?pbj=1&view=0', common.desktop_ua + headers_1)
|
||||||
polymer_json = json.loads(polymer_json)
|
polymer_json = json.loads(polymer_json)
|
||||||
return channel_videos_html(polymer_json)
|
return channel_videos_html(polymer_json)
|
||||||
elif page == 'about':
|
elif page == 'about':
|
||||||
polymer_json = common.fetch_url('https://www.youtube.com/user/' + username + '/about?pbj=1', common.desktop_ua + headers_1)
|
polymer_json = common.fetch_url(base_url + '/about?pbj=1', common.desktop_ua + headers_1)
|
||||||
polymer_json = json.loads(polymer_json)
|
polymer_json = json.loads(polymer_json)
|
||||||
return channel_about_page(polymer_json)
|
return channel_about_page(polymer_json)
|
||||||
elif page == 'playlists':
|
elif page == 'playlists':
|
||||||
polymer_json = common.fetch_url('https://www.youtube.com/user/' + username + '/playlists?pbj=1&view=1', common.desktop_ua + headers_1)
|
polymer_json = common.fetch_url(base_url+ '/playlists?pbj=1&view=1', common.desktop_ua + headers_1)
|
||||||
polymer_json = json.loads(polymer_json)
|
polymer_json = json.loads(polymer_json)
|
||||||
return channel_playlists_html(polymer_json)
|
return channel_playlists_html(polymer_json)
|
||||||
elif page == 'search':
|
elif page == 'search':
|
||||||
|
@ -41,9 +41,9 @@ def youtube(env, start_response):
|
|||||||
start_response('200 OK', (('Content-type','text/html'),) )
|
start_response('200 OK', (('Content-type','text/html'),) )
|
||||||
return channel.get_channel_page(path[9:], query_string=query_string).encode()
|
return channel.get_channel_page(path[9:], query_string=query_string).encode()
|
||||||
|
|
||||||
elif path.startswith("/user/"):
|
elif path.startswith("/user/") or path.startswith("/c/"):
|
||||||
start_response('200 OK', (('Content-type','text/html'),) )
|
start_response('200 OK', (('Content-type','text/html'),) )
|
||||||
return channel.get_user_page(path[6:], query_string=query_string).encode()
|
return channel.get_channel_page_general_url(path, query_string=query_string).encode()
|
||||||
|
|
||||||
elif path.startswith("/playlists"):
|
elif path.startswith("/playlists"):
|
||||||
start_response('200 OK', (('Content-type','text/html'),) )
|
start_response('200 OK', (('Content-type','text/html'),) )
|
||||||
@ -71,8 +71,8 @@ def youtube(env, start_response):
|
|||||||
return f.read().replace(b'$port_number', str(settings.port_number).encode())
|
return f.read().replace(b'$port_number', str(settings.port_number).encode())
|
||||||
|
|
||||||
else:
|
else:
|
||||||
start_response('404 Not Found', () )
|
start_response('200 OK', (('Content-type','text/html'),) )
|
||||||
return b'404 Not Found'
|
return channel.get_channel_page_general_url(path, query_string=query_string).encode()
|
||||||
|
|
||||||
elif method == "POST":
|
elif method == "POST":
|
||||||
fields = urllib.parse.parse_qs(env['wsgi.input'].read().decode())
|
fields = urllib.parse.parse_qs(env['wsgi.input'].read().decode())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user