From 2ba4fd8994e6b82adae2316257868844208e657e Mon Sep 17 00:00:00 2001 From: James Taylor Date: Fri, 6 Jul 2018 18:34:11 -0700 Subject: channel playlists: fix error when 0 playlists, correct stats for playlist --- youtube/channel.py | 12 +++++++++++- youtube/common.py | 11 ++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/youtube/channel.py b/youtube/channel.py index 3238341..4d7b563 100644 --- a/youtube/channel.py +++ b/youtube/channel.py @@ -178,7 +178,15 @@ def channel_playlists_html(polymer_json): except KeyError: items = [] else: - items = contents['twoColumnBrowseResultsRenderer']['tabs'][2]['tabRenderer']['content']['sectionListRenderer']['contents'][0]['itemSectionRenderer']['contents'][0]['gridRenderer']['items'] + item_section = contents['twoColumnBrowseResultsRenderer']['tabs'][2]['tabRenderer']['content']['sectionListRenderer']['contents'][0]['itemSectionRenderer']['contents'][0] + try: + items = item_section['gridRenderer']['items'] + except KeyError: + if "messageRenderer" in item_section: + items = [] + else: + raise + items_html = grid_items_html(items, {'author': microformat['title']}) return yt_channel_items_template.substitute( @@ -256,6 +264,8 @@ def get_channel_page(url, query_string=''): return channel_about_page(polymer_json) elif tab == 'playlists': polymer_json = common.fetch_url('https://www.youtube.com/channel/' + channel_id + '/playlists?pbj=1', headers_1) + '''with open('debug/channel_playlists_debug', 'wb') as f: + f.write(polymer_json)''' polymer_json = json.loads(polymer_json) return channel_playlists_html(polymer_json) else: diff --git a/youtube/common.py b/youtube/common.py index d9429a2..42d1381 100644 --- a/youtube/common.py +++ b/youtube/common.py @@ -60,7 +60,7 @@ medium_playlist_item_template = Template(''' $title -
$author
+
$stats
''') medium_video_item_template = Template(''' @@ -446,7 +446,7 @@ stat_templates = ( Template('''$views'''), Template(''''''), ) -def get_video_stats(html_ready): +def get_stats(html_ready): stats = [] if 'author' in html_ready: if 'author_url' in html_ready: @@ -479,7 +479,7 @@ def video_item_html(item, template, html_exclude=set()): for key in html_exclude: del html_ready[key] - html_ready['stats'] = get_video_stats(html_ready) + html_ready['stats'] = get_stats(html_ready) return template.substitute(html_ready) @@ -489,6 +489,11 @@ def playlist_item_html(item, template, html_exclude=set()): html_ready['url'] = URL_ORIGIN + "/playlist?list=" + html_ready['id'] html_ready['datetime'] = '' #TODO + + for key in html_exclude: + del html_ready[key] + html_ready['stats'] = get_stats(html_ready) + return template.substitute(html_ready) -- cgit v1.2.3