From 43679efff5c44c41e7e8c6ca46da145becbe7c03 Mon Sep 17 00:00:00 2001 From: James Taylor Date: Thu, 17 Dec 2020 13:46:29 -0800 Subject: channel: replace page #s w/ next page button using provided ctoken MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since yt doesn't accept page #'s when sorting by oldest Signed-off-by: Jesús --- youtube/channel.py | 28 +++++++++++----------------- youtube/templates/channel.html | 6 +++++- youtube/templates/common_elements.html | 14 ++++++++++++++ youtube/yt_data_extract/everything_else.py | 2 ++ 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/youtube/channel.py b/youtube/channel.py index 97afa6e..eed3253 100644 --- a/youtube/channel.py +++ b/youtube/channel.py @@ -113,26 +113,18 @@ def channel_ctoken_v1(channel_id, page, sort, tab, view=1): return base64.urlsafe_b64encode(pointless_nest).decode('ascii') -def get_channel_tab(channel_id, page="1", sort=3, tab='videos', view=1, print_status=True): +def get_channel_tab(channel_id, page="1", sort=3, tab='videos', view=1, + ctoken=None, print_status=True): message = 'Got channel tab' if print_status else None - if int(sort) == 2 and int(page) > 1: - ctoken = channel_ctoken_v1(channel_id, page, sort, tab, view) - ctoken = ctoken.replace('=', '%3D') - url = ('https://www.youtube.com/channel/' + channel_id + '/' + tab - + '?action_continuation=1&continuation=' + ctoken - + '&pbj=1') - content = util.fetch_url( - url, headers_desktop + real_cookie, - debug_name='channel_tab', report_text=message) - else: + if not ctoken: ctoken = channel_ctoken_v3(channel_id, page, sort, tab, view) ctoken = ctoken.replace('=', '%3D') - url = 'https://www.youtube.com/browse_ajax?ctoken=' + ctoken - content = util.fetch_url( - url, - headers_desktop + generic_cookie, - debug_name='channel_tab', report_text=message) + url = 'https://www.youtube.com/browse_ajax?ctoken=' + ctoken + content = util.fetch_url( + url, + headers_desktop + generic_cookie, + debug_name='channel_tab', report_text=message) return content @@ -220,11 +212,13 @@ def get_channel_page_general_url(base_url, tab, request, channel_id=None): sort = request.args.get('sort', '3') view = request.args.get('view', '1') query = request.args.get('query', '') + ctoken = request.args.get('ctoken', '') if tab == 'videos' and channel_id: tasks = ( gevent.spawn(get_number_of_videos_channel, channel_id), - gevent.spawn(get_channel_tab, channel_id, page_number, sort, 'videos', view) + gevent.spawn(get_channel_tab, channel_id, page_number, sort, + 'videos', view, ctoken) ) gevent.joinall(tasks) util.check_gevent_exceptions(*tasks) diff --git a/youtube/templates/channel.html b/youtube/templates/channel.html index 780b651..252d017 100644 --- a/youtube/templates/channel.html +++ b/youtube/templates/channel.html @@ -105,7 +105,11 @@