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 id = self
._match
_id
(url
)
49 webpage
= self
._download
_webpage
(url
, 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
(self
._download
_json
('https://www.epicon.in/ajaxplayer/', id, headers
=headers
, data
=data
), id)
55 if not data_json
['success']:
56 raise ExtractorError(data_json
['message'], expected
=True)
58 title
= self
._search
_regex
(r
'setplaytitle=\"([^\"]+)', webpage
, 'title')
59 description
= self
._og
_search
_description
(webpage
) or None
60 thumbnail
= self
._og
_search
_thumbnail
(webpage
) or None
61 formats
= self
._extract
_m
3u8_formats
(data_json
['url']['video_url'], id)
64 for subtitle
in data_json
.get('subtitles', []):
65 sub_url
= subtitle
.get('file')
68 subtitles
.setdefault(subtitle
.get('lang', 'English'), []).append({
69 'url': self
._proto
_relative
_url
(sub_url
),
76 'description': description
,
77 'thumbnail': thumbnail
,
78 'subtitles': subtitles
,
82 class EpiconSeriesIE(InfoExtractor
):
83 _VALID_URL
= r
'(?!.*season)https?://(?:www\.)?epicon\.in/tv-shows/(?P<id>[^/?#]+)'
85 'url': 'https://www.epicon.in/tv-shows/1-of-something',
86 'playlist_mincount': 5,
88 'id': '1-of-something',
91 'url': 'https://www.epicon.in/tv-shows/eco-india-english',
92 'playlist_mincount': 76,
94 'id': 'eco-india-english',
97 'url': 'https://www.epicon.in/tv-shows/s/',
98 'playlist_mincount': 25,
103 'url': 'https://www.epicon.in/tv-shows/ekaant',
104 'playlist_mincount': 38,
110 def _real_extract(self
, url
):
111 id = self
._match
_id
(url
)
112 webpage
= self
._download
_webpage
(url
, id)
113 episodes
= re
.findall(r
'ct-tray-url=\"(tv-shows/%s/[^\"]+)' % id, webpage
)
114 entries
= [self
.url_result('https://www.epicon.in/%s' % episode
, ie
=EpiconIE
.ie_key()) for episode
in episodes
]
115 return self
.playlist_result(entries
, playlist_id
=id)