aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/extractor/extractors.py1
-rw-r--r--yt_dlp/extractor/hotstar.py47
2 files changed, 47 insertions, 1 deletions
diff --git a/yt_dlp/extractor/extractors.py b/yt_dlp/extractor/extractors.py
index 8a99b2a3d..ada6fa619 100644
--- a/yt_dlp/extractor/extractors.py
+++ b/yt_dlp/extractor/extractors.py
@@ -505,6 +505,7 @@ from .hotnewhiphop import HotNewHipHopIE
from .hotstar import (
HotStarIE,
HotStarPlaylistIE,
+ HotStarSeriesIE,
)
from .howcast import HowcastIE
from .howstuffworks import HowStuffWorksIE
diff --git a/yt_dlp/extractor/hotstar.py b/yt_dlp/extractor/hotstar.py
index d497b50c1..430b4e236 100644
--- a/yt_dlp/extractor/hotstar.py
+++ b/yt_dlp/extractor/hotstar.py
@@ -87,7 +87,14 @@ class HotStarBaseIE(InfoExtractor):
class HotStarIE(HotStarBaseIE):
IE_NAME = 'hotstar'
- _VALID_URL = r'https?://(?:www\.)?hotstar\.com/.*(?P<id>\d{10})'
+ _VALID_URL = r'''(?x)
+ https?://(?:www\.)?hotstar\.com(?:/in)?/(?!in/)
+ (?:
+ tv/(?:[^/?#]+/){3}|
+ (?!tv/)[^?#]+/
+ )?
+ (?P<id>\d{10})
+ '''
_TESTS = [{
# contentData
'url': 'https://www.hotstar.com/can-you-not-spread-rumours/1000076273',
@@ -235,3 +242,41 @@ class HotStarPlaylistIE(HotStarBaseIE):
if video.get('contentId')]
return self.playlist_result(entries, playlist_id)
+
+
+class HotStarSeriesIE(HotStarBaseIE):
+ IE_NAME = 'hotstar:series'
+ _VALID_URL = r'(?:https?://)(?:www\.)?hotstar\.com(?:/in)?/tv/[^/]+/(?P<id>\d{10})$'
+ _TESTS = [{
+ 'url': 'https://www.hotstar.com/in/tv/radhakrishn/1260000646',
+ 'info_dict': {
+ 'id': '1260000646',
+ },
+ 'playlist_mincount': 690,
+ }, {
+ 'url': 'https://www.hotstar.com/tv/dancee-/1260050431',
+ 'info_dict': {
+ 'id': '1260050431',
+ },
+ 'playlist_mincount': 43,
+ }]
+
+ def _real_extract(self, url):
+ series_id = self._match_id(url)
+ headers = {
+ 'x-country-code': 'IN',
+ 'x-platform-code': 'PCTV',
+ }
+ detail_json = self._download_json('https://api.hotstar.com/o/v1/show/detail?contentId=' + series_id,
+ video_id=series_id, headers=headers)
+ id = compat_str(try_get(detail_json, lambda x: x['body']['results']['item']['id'], int))
+ item_json = self._download_json('https://api.hotstar.com/o/v1/tray/g/1/items?etid=0&tao=0&tas=10000&eid=' + id,
+ video_id=series_id, headers=headers)
+ entries = [
+ self.url_result(
+ 'https://www.hotstar.com/%d' % video['contentId'],
+ ie=HotStarIE.ie_key(), video_id=video['contentId'])
+ for video in item_json['body']['results']['items']
+ if video.get('contentId')]
+
+ return self.playlist_result(entries, series_id)