3 from .common
import InfoExtractor
4 from ..utils
import ExtractorError
7 class EpiconIE(InfoExtractor
):
8 _VALID_URL
= r
'https?://(?:www\.)?epicon\.in/(?:documentaries|movies|tv-shows/[^/?#]+/[^/?#]+)/(?P<id>[^/?#]+)'
10 'url': 'https://www.epicon.in/documentaries/air-battle-of-srinagar',
12 'id': 'air-battle-of-srinagar',
14 'title': 'Air Battle of Srinagar',
15 'description': 'md5:c4de2013af9bc05ae4392e4115d518d7',
16 'thumbnail': r
're:^https?://.*\.jpg$',
19 'url': 'https://www.epicon.in/movies/krit',
24 'description': 'md5:c12b35dad915d48ccff7f013c79bab4a',
25 'thumbnail': r
're:^https?://.*\.jpg$',
28 'url': 'https://www.epicon.in/tv-shows/paapnaashini-ganga/season-1/vardaan',
32 'title': 'Paapnaashini Ganga - Season 1 - Ep 1 - VARDAAN',
33 'description': 'md5:f517058c3d0402398eefa6242f4dd6ae',
34 'thumbnail': r
're:^https?://.*\.jpg$',
37 'url': 'https://www.epicon.in/movies/jayadev',
42 'description': 'md5:09e349eecd8e585a3b6466904f19df6c',
43 'thumbnail': r
're:^https?://.*\.jpg$',
47 def _real_extract(self
, url
):
48 video_id
= self
._match
_id
(url
)
49 webpage
= self
._download
_webpage
(url
, video_id
)
50 cid
= self
._search
_regex
(r
'class=\"mylist-icon\ iconclick\"\ id=\"(\d+)', webpage
, 'cid')
51 headers
= {'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'}
52 data
= f
'cid={cid}&action=st&type=video'.encode()
53 data_json
= self
._parse
_json
(
54 self
._download
_json
('https://www.epicon.in/ajaxplayer/', video_id
, headers
=headers
, data
=data
), video_id
)
56 if not data_json
['success']:
57 raise ExtractorError(data_json
['message'], expected
=True)
59 title
= self
._search
_regex
(r
'setplaytitle=\"([^\"]+)', webpage
, 'title')
60 description
= self
._og
_search
_description
(webpage
) or None
61 thumbnail
= self
._og
_search
_thumbnail
(webpage
) or None
62 formats
= self
._extract
_m
3u8_formats
(data_json
['url']['video_url'], video_id
)
65 for subtitle
in data_json
.get('subtitles', []):
66 sub_url
= subtitle
.get('file')
69 subtitles
.setdefault(subtitle
.get('lang', 'English'), []).append({
70 'url': self
._proto
_relative
_url
(sub_url
),
77 'description': description
,
78 'thumbnail': thumbnail
,
79 'subtitles': subtitles
,
83 class EpiconSeriesIE(InfoExtractor
):
84 _VALID_URL
= r
'(?!.*season)https?://(?:www\.)?epicon\.in/tv-shows/(?P<id>[^/?#]+)'
86 'url': 'https://www.epicon.in/tv-shows/1-of-something',
87 'playlist_mincount': 5,
89 'id': '1-of-something',
92 'url': 'https://www.epicon.in/tv-shows/eco-india-english',
93 'playlist_mincount': 76,
95 'id': 'eco-india-english',
98 'url': 'https://www.epicon.in/tv-shows/s/',
99 'playlist_mincount': 25,
104 'url': 'https://www.epicon.in/tv-shows/ekaant',
105 'playlist_mincount': 38,
111 def _real_extract(self
, url
):
112 playlist_id
= self
._match
_id
(url
)
113 webpage
= self
._download
_webpage
(url
, playlist_id
)
114 episodes
= re
.findall(rf
'ct-tray-url=\"(tv-shows/{playlist_id}/[^\"]+)', webpage
)
115 entries
= [self
.url_result(f
'https://www.epicon.in/{episode}', EpiconIE
) for episode
in episodes
]
116 return self
.playlist_result(entries
, playlist_id
=playlist_id
)