diff options
author | James Taylor <user234683@users.noreply.github.com> | 2020-04-04 22:52:09 -0700 |
---|---|---|
committer | James Taylor <user234683@users.noreply.github.com> | 2020-04-04 22:52:09 -0700 |
commit | 5554d5afff3e8bad1d59616c3e9c6f6f7bcd7b1b (patch) | |
tree | 38974f251b197aa5c580c8a38bc0a19232480272 /youtube/yt_data_extract/common.py | |
parent | b5d42e2f3c99f146f3fe4efd0a9062b255ef6d9c (diff) | |
download | yt-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.py | 26 |
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')) |