From 6e6390321c3937e26c3f51ee1840d9e97764371f Mon Sep 17 00:00:00 2001 From: Ashish <39122144+Ashish0804@users.noreply.github.com> Date: Tue, 1 Jun 2021 20:14:03 +0530 Subject: [PATCH] [Hotstar] Add HotStarSeriesIE (#366) Authored by: Ashish0804 --- yt_dlp/extractor/extractors.py | 1 + yt_dlp/extractor/hotstar.py | 47 +++++++++++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) 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\d{10})' + _VALID_URL = r'''(?x) + https?://(?:www\.)?hotstar\.com(?:/in)?/(?!in/) + (?: + tv/(?:[^/?#]+/){3}| + (?!tv/)[^?#]+/ + )? + (?P\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\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)