aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-07-21 20:44:18 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-07-21 20:50:58 +0530
commitae30b84072803f549a88c7fb0202bee10cdc34ab (patch)
treead26378087068b01b4080dd83cebbbbc8797788f
parentcc9d1493c6ec20f9401356f973c1a42e6d11895d (diff)
downloadhypervideo-pre-ae30b84072803f549a88c7fb0202bee10cdc34ab.tar.lz
hypervideo-pre-ae30b84072803f549a88c7fb0202bee10cdc34ab.tar.xz
hypervideo-pre-ae30b84072803f549a88c7fb0202bee10cdc34ab.zip
Add field `live_status`
-rw-r--r--README.md1
-rw-r--r--yt_dlp/YoutubeDL.py19
-rw-r--r--yt_dlp/extractor/common.py2
3 files changed, 21 insertions, 1 deletions
diff --git a/README.md b/README.md
index 838131e8c..a02b45b84 100644
--- a/README.md
+++ b/README.md
@@ -941,6 +941,7 @@ The available fields are:
- `average_rating` (numeric): Average rating give by users, the scale used depends on the webpage
- `comment_count` (numeric): Number of comments on the video (For some extractors, comments are only downloaded at the end, and so this field cannot be used)
- `age_limit` (numeric): Age restriction for the video (years)
+ - `live_status` (string): One of 'is_live', 'was_live', 'upcoming', 'not_live'
- `is_live` (boolean): Whether this video is a live stream or a fixed-length video
- `was_live` (boolean): Whether this video was originally a live stream
- `playable_in_embed` (string): Whether this video is allowed to play in embedded players on other sites
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 1789cb463..3ab59ea31 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -2036,7 +2036,7 @@ class YoutubeDL(object):
elif thumbnails:
info_dict['thumbnail'] = thumbnails[-1]['url']
- if 'display_id' not in info_dict and 'id' in info_dict:
+ if info_dict.get('display_id') is None and 'id' in info_dict:
info_dict['display_id'] = info_dict['id']
for ts_key, date_key in (
@@ -2052,6 +2052,23 @@ class YoutubeDL(object):
except (ValueError, OverflowError, OSError):
pass
+ live_keys = ('is_live', 'was_live')
+ live_status = info_dict.get('live_status')
+ if live_status is None:
+ for key in live_keys:
+ if info_dict.get(key) is False:
+ continue
+ if info_dict.get(key):
+ live_status = key
+ break
+ if all(info_dict.get(key) is False for key in live_keys):
+ live_status = 'not_live'
+ if live_status:
+ info_dict['live_status'] = live_status
+ for key in live_keys:
+ if info_dict.get(key) is None:
+ info_dict[key] = (live_status == key)
+
# Auto generate title fields corresponding to the *_number fields when missing
# in order to always have clean titles. This is very common for TV series.
for field in ('chapter', 'season', 'episode'):
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py
index a6fc5d11a..e892ff3cb 100644
--- a/yt_dlp/extractor/common.py
+++ b/yt_dlp/extractor/common.py
@@ -297,6 +297,8 @@ class InfoExtractor(object):
live stream that goes on instead of a fixed-length video.
was_live: True, False, or None (=unknown). Whether this video was
originally a live stream.
+ live_status: 'is_live', 'upcoming', 'was_live', 'not_live' or None (=unknown)
+ If absent, automatically set from is_live, was_live
start_time: Time in seconds where the reproduction should start, as
specified in the URL.
end_time: Time in seconds where the reproduction should end, as