aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/yt_data_extract/common.py
diff options
context:
space:
mode:
authorJames Taylor <user234683@users.noreply.github.com>2020-04-04 22:52:09 -0700
committerJames Taylor <user234683@users.noreply.github.com>2020-04-04 22:52:09 -0700
commit5554d5afff3e8bad1d59616c3e9c6f6f7bcd7b1b (patch)
tree38974f251b197aa5c580c8a38bc0a19232480272 /youtube/yt_data_extract/common.py
parentb5d42e2f3c99f146f3fe4efd0a9062b255ef6d9c (diff)
downloadyt-local-5554d5afff3e8bad1d59616c3e9c6f6f7bcd7b1b.tar.lz
yt-local-5554d5afff3e8bad1d59616c3e9c6f6f7bcd7b1b.tar.xz
yt-local-5554d5afff3e8bad1d59616c3e9c6f6f7bcd7b1b.zip
Add playlist sidebar for videos in playlist, including autoplay
Diffstat (limited to 'youtube/yt_data_extract/common.py')
-rw-r--r--youtube/yt_data_extract/common.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/youtube/yt_data_extract/common.py b/youtube/yt_data_extract/common.py
index 877444e..974d981 100644
--- a/youtube/yt_data_extract/common.py
+++ b/youtube/yt_data_extract/common.py
@@ -73,6 +73,15 @@ def conservative_update(obj, key, value):
if obj.get(key) is None:
obj[key] = value
+def concat_or_none(*strings):
+ '''Concatenates strings. Returns None if any of the arguments are None'''
+ result = ''
+ for string in strings:
+ if string is None:
+ return None
+ result += string
+ return result
+
def remove_redirect(url):
if url is None:
return None
@@ -268,6 +277,23 @@ def extract_item_info(item, additional_info={}):
info['approx_view_count'] = '0'
info['duration'] = extract_str(item.get('lengthText'))
+
+ # if it's an item in a playlist, get its index
+ if 'index' in item: # url has wrong index on playlist page
+ info['index'] = extract_int(item.get('index'))
+ elif 'indexText' in item:
+ # Current item in playlist has ▶ instead of the actual index, must
+ # dig into url
+ match = re.search(r'index=(\d+)', deep_get(item,
+ 'navigationEndpoint', 'commandMetadata', 'webCommandMetadata',
+ 'url', default=''))
+ if match is None: # worth a try then
+ info['index'] = extract_int(item.get('indexText'))
+ else:
+ info['index'] = int(match.group(1))
+ else:
+ info['index'] = None
+
elif primary_type in ('playlist', 'radio'):
info['id'] = item.get('playlistId')
info['video_count'] = extract_int(item.get('videoCount'))