use unified item code for channel grid
This commit is contained in:
parent
25f3e2791c
commit
60fa26f459
@ -151,6 +151,12 @@ def get_channel_id(username):
|
|||||||
response = common.fetch_url(url, common.mobile_ua + headers_1).decode('utf-8')
|
response = common.fetch_url(url, common.mobile_ua + headers_1).decode('utf-8')
|
||||||
return re.search(r'"channel_id":\s*"([a-zA-Z0-9_-]*)"', response).group(1)
|
return re.search(r'"channel_id":\s*"([a-zA-Z0-9_-]*)"', response).group(1)
|
||||||
|
|
||||||
|
def grid_items_html(items, additional_info={}):
|
||||||
|
result = ''' <nav class="item-grid">\n'''
|
||||||
|
for item in items:
|
||||||
|
result += common.renderer_html(item, additional_info)
|
||||||
|
result += '''\n</nav>'''
|
||||||
|
return result
|
||||||
|
|
||||||
def channel_videos_html(polymer_json, current_page=1, number_of_videos = 1000, current_query_string=''):
|
def channel_videos_html(polymer_json, current_page=1, number_of_videos = 1000, current_query_string=''):
|
||||||
microformat = polymer_json[1]['response']['microformat']['microformatDataRenderer']
|
microformat = polymer_json[1]['response']['microformat']['microformatDataRenderer']
|
||||||
@ -166,9 +172,7 @@ def channel_videos_html(polymer_json, current_page=1, number_of_videos = 1000, c
|
|||||||
items = []
|
items = []
|
||||||
else:
|
else:
|
||||||
items = contents['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['sectionListRenderer']['contents'][0]['itemSectionRenderer']['contents'][0]['gridRenderer']['items']
|
items = contents['twoColumnBrowseResultsRenderer']['tabs'][1]['tabRenderer']['content']['sectionListRenderer']['contents'][0]['itemSectionRenderer']['contents'][0]['gridRenderer']['items']
|
||||||
items_html = ''
|
items_html = grid_items_html(items, {'author': microformat['title']})
|
||||||
for video in items:
|
|
||||||
items_html += grid_video_item_html(grid_video_item_info(video['gridVideoRenderer'], microformat['title']))
|
|
||||||
|
|
||||||
return yt_channel_items_template.substitute(
|
return yt_channel_items_template.substitute(
|
||||||
channel_title = microformat['title'],
|
channel_title = microformat['title'],
|
||||||
|
@ -434,7 +434,7 @@ def get_html_ready(item):
|
|||||||
|
|
||||||
|
|
||||||
author_template_url = Template('''<address>By <a href="$author_url">$author</a></address>''')
|
author_template_url = Template('''<address>By <a href="$author_url">$author</a></address>''')
|
||||||
author_template = Template('''<address>By $author</address>''')
|
author_template = Template('''<address><b>$author</b></address>''')
|
||||||
stat_templates = (
|
stat_templates = (
|
||||||
Template('''<span class="views">$views</span>'''),
|
Template('''<span class="views">$views</span>'''),
|
||||||
Template('''<time datetime="$datetime">$published</time>'''),
|
Template('''<time datetime="$datetime">$published</time>'''),
|
||||||
@ -453,7 +453,7 @@ def get_video_stats(html_ready):
|
|||||||
pass
|
pass
|
||||||
return ' | '.join(stats)
|
return ' | '.join(stats)
|
||||||
|
|
||||||
def video_item_html(item, template):
|
def video_item_html(item, template, html_exclude=set()):
|
||||||
html_ready = get_html_ready(item)
|
html_ready = get_html_ready(item)
|
||||||
video_info = {}
|
video_info = {}
|
||||||
for key in ('id', 'title', 'author'):
|
for key in ('id', 'title', 'author'):
|
||||||
@ -470,12 +470,14 @@ def video_item_html(item, template):
|
|||||||
html_ready['url'] = URL_ORIGIN + "/watch?v=" + html_ready['id']
|
html_ready['url'] = URL_ORIGIN + "/watch?v=" + html_ready['id']
|
||||||
html_ready['datetime'] = '' #TODO
|
html_ready['datetime'] = '' #TODO
|
||||||
|
|
||||||
|
for key in html_exclude:
|
||||||
|
del html_ready[key]
|
||||||
html_ready['stats'] = get_video_stats(html_ready)
|
html_ready['stats'] = get_video_stats(html_ready)
|
||||||
|
|
||||||
return template.substitute(html_ready)
|
return template.substitute(html_ready)
|
||||||
|
|
||||||
|
|
||||||
def playlist_item_html(item, template):
|
def playlist_item_html(item, template, html_exlude=set()):
|
||||||
html_ready = get_html_ready(item)
|
html_ready = get_html_ready(item)
|
||||||
|
|
||||||
html_ready['url'] = URL_ORIGIN + "/playlist?list=" + html_ready['id']
|
html_ready['url'] = URL_ORIGIN + "/playlist?list=" + html_ready['id']
|
||||||
@ -540,14 +542,15 @@ def renderer_html(renderer, additional_info={}, current_query_string=''):
|
|||||||
if type in ('videoRenderer', 'playlistRenderer', 'radioRenderer', 'compactVideoRenderer', 'compactPlaylistRenderer', 'compactRadioRenderer', 'gridVideoRenderer', 'gridPlaylistRenderer', 'gridRadioRenderer'):
|
if type in ('videoRenderer', 'playlistRenderer', 'radioRenderer', 'compactVideoRenderer', 'compactPlaylistRenderer', 'compactRadioRenderer', 'gridVideoRenderer', 'gridPlaylistRenderer', 'gridRadioRenderer'):
|
||||||
info = renderer_info(renderer)
|
info = renderer_info(renderer)
|
||||||
info.update(additional_info)
|
info.update(additional_info)
|
||||||
|
html_exclude = set(additional_info.keys())
|
||||||
if type == 'compactVideoRenderer':
|
if type == 'compactVideoRenderer':
|
||||||
return video_item_html(info, small_video_item_template)
|
return video_item_html(info, small_video_item_template, html_exclude=html_exclude)
|
||||||
if type in ('compactPlaylistRenderer', 'compactRadioRenderer'):
|
if type in ('compactPlaylistRenderer', 'compactRadioRenderer'):
|
||||||
return playlist_item_html(info, small_playlist_item_template)
|
return playlist_item_html(info, small_playlist_item_template, html_exclude=html_exclude)
|
||||||
if type in ('videoRenderer', 'gridVideoRenderer'):
|
if type in ('videoRenderer', 'gridVideoRenderer'):
|
||||||
return video_item_html(info, medium_video_item_template)
|
return video_item_html(info, medium_video_item_template, html_exclude=html_exclude)
|
||||||
if type in ('playlistRenderer', 'gridPlaylistRenderer', 'radioRenderer', 'gridRadioRenderer'):
|
if type in ('playlistRenderer', 'gridPlaylistRenderer', 'radioRenderer', 'gridRadioRenderer'):
|
||||||
return playlist_item_html(info, medium_playlist_item_template)
|
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)
|
||||||
|
@ -118,9 +118,7 @@
|
|||||||
<a class="tab page-button" href="$channel_about_url">About</a>
|
<a class="tab page-button" href="$channel_about_url">About</a>
|
||||||
</nav>
|
</nav>
|
||||||
<div id="number-of-results">$number_of_results</div>
|
<div id="number-of-results">$number_of_results</div>
|
||||||
<nav class="item-grid">
|
|
||||||
$items
|
$items
|
||||||
</nav>
|
|
||||||
<nav class="page-button-row">
|
<nav class="page-button-row">
|
||||||
$page_buttons
|
$page_buttons
|
||||||
</nav>
|
</nav>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user