support gridShowRenderers

This commit is contained in:
James Taylor 2018-07-16 18:53:03 -07:00
parent ac1319e720
commit 09125c9573

View File

@ -366,7 +366,7 @@ dispatch = {
'lengthText': ('duration', get_text), 'lengthText': ('duration', get_text),
'thumbnail': ('thumbnail', get_thumbnail), 'thumbnail': ('thumbnail', get_thumbnail),
'thumbnails': ('thumbnail', lambda node: node[0]['thumbnails'][0]['url']), 'thumbnails': ('thumbnail', lambda node: node[0]['thumbnails'][0]['url']),
'videoCountText': ('size', get_text), 'videoCountText': ('size', get_text),
'playlistId': ('id', lambda node: node), 'playlistId': ('id', lambda node: node),
@ -400,12 +400,17 @@ def renderer_info(renderer):
pass pass
else: else:
for overlay in overlays: for overlay in overlays:
try: if 'thumbnailOverlayTimeStatusRenderer' in overlay:
info['duration'] = get_text(overlay['thumbnailOverlayTimeStatusRenderer']['text']) info['duration'] = get_text(overlay['thumbnailOverlayTimeStatusRenderer']['text'])
except KeyError: # show renderers don't have videoCountText
pass elif 'thumbnailOverlayBottomPanelRenderer' in overlay:
else: info['size'] = get_text(overlay['thumbnailOverlayBottomPanelRenderer']['text'])
break
# show renderers don't have playlistId, have to dig into the url to get it
try:
info['id'] = renderer['navigationEndpoint']['watchEndpoint']['playlistId']
except KeyError:
pass
for key, node in renderer.items(): for key, node in renderer.items():
if key in ('longBylineText', 'shortBylineText'): if key in ('longBylineText', 'shortBylineText'):
info['author'] = get_text(node) info['author'] = get_text(node)
@ -414,13 +419,15 @@ def renderer_info(renderer):
except KeyError: except KeyError:
pass pass
continue # show renderers don't have thumbnail key at top level, dig into thumbnailRenderer
elif key == 'thumbnailRenderer' and 'showCustomThumbnailRenderer' in node:
try: info['thumbnail'] = node['showCustomThumbnailRenderer']['thumbnail']['thumbnails'][0]['url']
simple_key, function = dispatch[key] else:
except KeyError: try:
continue simple_key, function = dispatch[key]
info[simple_key] = function(node) except KeyError:
continue
info[simple_key] = function(node)
return info return info
except KeyError: except KeyError:
print(renderer) print(renderer)
@ -585,18 +592,6 @@ did_you_mean = Template('''
def renderer_html(renderer, additional_info={}, current_query_string=''): def renderer_html(renderer, additional_info={}, current_query_string=''):
type = list(renderer.keys())[0] type = list(renderer.keys())[0]
renderer = renderer[type] renderer = renderer[type]
if type in ('videoRenderer', 'playlistRenderer', 'radioRenderer', 'compactVideoRenderer', 'compactPlaylistRenderer', 'compactRadioRenderer', 'gridVideoRenderer', 'gridPlaylistRenderer', 'gridRadioRenderer'):
info = renderer_info(renderer)
info.update(additional_info)
html_exclude = set(additional_info.keys())
if type == 'compactVideoRenderer':
return video_item_html(info, small_video_item_template, html_exclude=html_exclude)
if type in ('compactPlaylistRenderer', 'compactRadioRenderer'):
return playlist_item_html(info, small_playlist_item_template, html_exclude=html_exclude)
if type in ('videoRenderer', 'gridVideoRenderer'):
return video_item_html(info, medium_video_item_template, html_exclude=html_exclude)
if type in ('playlistRenderer', 'gridPlaylistRenderer', 'radioRenderer', 'gridRadioRenderer'):
return playlist_item_html(info, medium_playlist_item_template, html_exclude=html_exclude)
if type == 'channelRenderer': if type == 'channelRenderer':
info = renderer_info(renderer) info = renderer_info(renderer)
@ -606,5 +601,18 @@ def renderer_html(renderer, additional_info={}, current_query_string=''):
if type == 'movieRenderer': if type == 'movieRenderer':
return '' return ''
info = renderer_info(renderer)
info.update(additional_info)
html_exclude = set(additional_info.keys())
if type == 'compactVideoRenderer':
return video_item_html(info, small_video_item_template, html_exclude=html_exclude)
if type in ('compactPlaylistRenderer', 'compactRadioRenderer', 'compactShowRenderer'):
return playlist_item_html(info, small_playlist_item_template, html_exclude=html_exclude)
if type in ('videoRenderer', 'gridVideoRenderer'):
return video_item_html(info, medium_video_item_template, html_exclude=html_exclude)
if type in ('playlistRenderer', 'gridPlaylistRenderer', 'radioRenderer', 'gridRadioRenderer', 'gridShowRenderer', 'showRenderer'):
return playlist_item_html(info, medium_playlist_item_template, html_exclude=html_exclude)
print(renderer) print(renderer)
raise NotImplementedError('Unknown renderer type: ' + type) raise NotImplementedError('Unknown renderer type: ' + type)