aboutsummaryrefslogtreecommitdiffstats
path: root/youtube
diff options
context:
space:
mode:
authorJames Taylor <user234683@users.noreply.github.com>2021-03-02 17:08:20 -0800
committerJesús <heckyel@hyperbola.info>2021-03-03 10:33:45 -0500
commitf7ed8159cd50a034bae0231cd61ebad6e3e2ceec (patch)
treed4f5df8c193b99e47a0076e76d120cbe1ab51b9b /youtube
parent2d9aca4b8b9b733f54af4a24b9c4b5961d78de1e (diff)
downloadyt-local-f7ed8159cd50a034bae0231cd61ebad6e3e2ceec.tar.lz
yt-local-f7ed8159cd50a034bae0231cd61ebad6e3e2ceec.tar.xz
yt-local-f7ed8159cd50a034bae0231cd61ebad6e3e2ceec.zip
Channel: use general pbj=1 endpoint to get first page of videos
YouTube disabled the browse_ajax endpoint. Quick fix for first channel page. In general, this will be more robust against api endpoint changes. As YouTube continues to change api endpoints, at least the subscriptions and first page will no longer break. Signed-off-by: Jesús <heckyel@hyperbola.info>
Diffstat (limited to 'youtube')
-rw-r--r--youtube/channel.py17
-rw-r--r--youtube/subscriptions.py2
2 files changed, 15 insertions, 4 deletions
diff --git a/youtube/channel.py b/youtube/channel.py
index eed3253..64b6612 100644
--- a/youtube/channel.py
+++ b/youtube/channel.py
@@ -198,6 +198,13 @@ def post_process_channel_info(info):
util.add_extra_html_info(item)
+def get_channel_first_page(base_url=None, channel_id=None):
+ if channel_id:
+ base_url = 'https://www.youtube.com/channel/' + channel_id
+ return util.fetch_url(base_url + '/videos?pbj=1&view=0', headers_desktop,
+ debug_name='gen_channel_videos')
+
+
playlist_sort_codes = {'2': "da", '3': "dd", '4': "lad"}
# youtube.com/[channel_id]/[tab]
@@ -214,7 +221,7 @@ def get_channel_page_general_url(base_url, tab, request, channel_id=None):
query = request.args.get('query', '')
ctoken = request.args.get('ctoken', '')
- if tab == 'videos' and channel_id:
+ if tab == 'videos' and channel_id and page_number > 1:
tasks = (
gevent.spawn(get_number_of_videos_channel, channel_id),
gevent.spawn(get_channel_tab, channel_id, page_number, sort,
@@ -224,9 +231,13 @@ def get_channel_page_general_url(base_url, tab, request, channel_id=None):
util.check_gevent_exceptions(*tasks)
number_of_videos, polymer_json = tasks[0].value, tasks[1].value
elif tab == 'videos':
+ if channel_id:
+ num_videos_call = (get_number_of_videos_channel, channel_id)
+ else:
+ num_videos_call = (get_number_of_videos_general, base_url)
tasks = (
- gevent.spawn(get_number_of_videos_general, base_url),
- gevent.spawn(util.fetch_url, base_url + '/videos?pbj=1&view=0', headers_desktop, debug_name='gen_channel_videos')
+ gevent.spawn(*num_videos_call),
+ gevent.spawn(get_channel_first_page, base_url=base_url),
)
gevent.joinall(tasks)
util.check_gevent_exceptions(*tasks)
diff --git a/youtube/subscriptions.py b/youtube/subscriptions.py
index b841f5d..c18f822 100644
--- a/youtube/subscriptions.py
+++ b/youtube/subscriptions.py
@@ -484,7 +484,7 @@ def _get_upstream_videos(channel_id):
tasks = (
# channel page, need for video duration
- gevent.spawn(_get_channel_tab, channel_id, channel_status_name),
+ gevent.spawn(channel.get_channel_first_page, channel_id=channel_id),
# need atoma feed for exact published time
gevent.spawn(_get_atoma_feed, channel_id)
)