]>
Commit | Line | Data |
---|---|---|
1 | from .common import InfoExtractor | |
2 | from ..utils import ( | |
3 | int_or_none, | |
4 | remove_end, | |
5 | traverse_obj, | |
6 | try_get, | |
7 | unified_timestamp, | |
8 | url_or_none, | |
9 | urlencode_postdata, | |
10 | ) | |
11 | ||
12 | ||
13 | class HungamaBaseIE(InfoExtractor): | |
14 | def _call_api(self, path, content_id, fatal=False): | |
15 | return traverse_obj(self._download_json( | |
16 | f'https://cpage.api.hungama.com/v2/page/content/{content_id}/{path}/detail', | |
17 | content_id, fatal=fatal, query={ | |
18 | 'device': 'web', | |
19 | 'platform': 'a', | |
20 | 'storeId': '1', | |
21 | }), ('data', {dict})) or {} | |
22 | ||
23 | ||
24 | class HungamaIE(HungamaBaseIE): | |
25 | _VALID_URL = r'''(?x) | |
26 | https?:// | |
27 | (?:www\.|un\.)?hungama\.com/ | |
28 | (?: | |
29 | (?:video|movie|short-film)/[^/]+/| | |
30 | tv-show/(?:[^/]+/){2}\d+/episode/[^/]+/ | |
31 | ) | |
32 | (?P<id>\d+) | |
33 | ''' | |
34 | _TESTS = [{ | |
35 | 'url': 'http://www.hungama.com/video/krishna-chants/39349649/', | |
36 | 'md5': '687c5f1e9f832f3b59f44ed0eb1f120a', | |
37 | 'info_dict': { | |
38 | 'id': '39349649', | |
39 | 'ext': 'mp4', | |
40 | 'title': 'Krishna Chants', | |
41 | 'description': ' ', | |
42 | 'upload_date': '20180829', | |
43 | 'duration': 264, | |
44 | 'timestamp': 1535500800, | |
45 | 'view_count': int, | |
46 | 'thumbnail': 'https://images1.hungama.com/tr:n-a_169_m/c/1/0dc/2ca/39349649/39349649_350x197.jpg?v=8', | |
47 | 'tags': 'count:6', | |
48 | }, | |
49 | }, { | |
50 | 'url': 'https://un.hungama.com/short-film/adira/102524179/', | |
51 | 'md5': '2278463f5dc9db9054d0c02602d44666', | |
52 | 'info_dict': { | |
53 | 'id': '102524179', | |
54 | 'ext': 'mp4', | |
55 | 'title': 'Adira', | |
56 | 'description': 'md5:df20cd4d41eabb33634f06de1025a4b4', | |
57 | 'upload_date': '20230417', | |
58 | 'timestamp': 1681689600, | |
59 | 'view_count': int, | |
60 | 'thumbnail': 'https://images1.hungama.com/tr:n-a_23_m/c/1/197/ac9/102524179/102524179_350x525.jpg?v=1', | |
61 | 'tags': 'count:7', | |
62 | }, | |
63 | }, { | |
64 | 'url': 'https://www.hungama.com/movie/kahaani-2/44129919/', | |
65 | 'only_matching': True, | |
66 | }, { | |
67 | 'url': 'https://www.hungama.com/tv-show/padded-ki-pushup/season-1/44139461/episode/ep-02-training-sasu-pathlaag-karing/44139503/', | |
68 | 'only_matching': True, | |
69 | }] | |
70 | ||
71 | def _real_extract(self, url): | |
72 | video_id = self._match_id(url) | |
73 | video_json = self._download_json( | |
74 | 'https://www.hungama.com/index.php', video_id, | |
75 | data=urlencode_postdata({'content_id': video_id}), headers={ | |
76 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', | |
77 | 'X-Requested-With': 'XMLHttpRequest', | |
78 | }, query={ | |
79 | 'c': 'common', | |
80 | 'm': 'get_video_mdn_url', | |
81 | }) | |
82 | formats = self._extract_m3u8_formats(video_json['stream_url'], video_id, ext='mp4', m3u8_id='hls') | |
83 | metadata = self._call_api('movie', video_id) | |
84 | ||
85 | return { | |
86 | **traverse_obj(metadata, ('head', 'data', { | |
87 | 'title': ('title', {str}), | |
88 | 'description': ('misc', 'description', {str}), | |
89 | 'duration': ('duration', {int}), # duration in JSON is incorrect if string | |
90 | 'timestamp': ('releasedate', {unified_timestamp}), | |
91 | 'view_count': ('misc', 'playcount', {int_or_none}), | |
92 | 'thumbnail': ('image', {url_or_none}), | |
93 | 'tags': ('misc', 'keywords', ..., {str}), | |
94 | })), | |
95 | 'id': video_id, | |
96 | 'formats': formats, | |
97 | 'subtitles': { | |
98 | 'en': [{ | |
99 | 'url': video_json['sub_title'], | |
100 | 'ext': 'vtt', | |
101 | }] | |
102 | } if video_json.get('sub_title') else None, | |
103 | } | |
104 | ||
105 | ||
106 | class HungamaSongIE(InfoExtractor): | |
107 | _VALID_URL = r'https?://(?:www\.|un\.)?hungama\.com/song/[^/]+/(?P<id>\d+)' | |
108 | _TESTS = [{ | |
109 | 'url': 'https://www.hungama.com/song/kitni-haseen-zindagi/2931166/', | |
110 | 'md5': '964f46828e8b250aa35e5fdcfdcac367', | |
111 | 'info_dict': { | |
112 | 'id': '2931166', | |
113 | 'ext': 'mp3', | |
114 | 'title': 'Lucky Ali - Kitni Haseen Zindagi', | |
115 | 'track': 'Kitni Haseen Zindagi', | |
116 | 'artist': 'Lucky Ali', | |
117 | 'album': None, | |
118 | 'release_year': 2000, | |
119 | 'thumbnail': 'https://stat2.hungama.ind.in/assets/images/default_images/da-200x200.png', | |
120 | }, | |
121 | }, { | |
122 | 'url': 'https://un.hungama.com/song/tum-kya-mile-from-rocky-aur-rani-kii-prem-kahaani/103553672', | |
123 | 'md5': '964f46828e8b250aa35e5fdcfdcac367', | |
124 | 'info_dict': { | |
125 | 'id': '103553672', | |
126 | 'ext': 'mp3', | |
127 | 'title': 'md5:5ebeb1e10771b634ce5f700ce68ae5f4', | |
128 | 'track': 'Tum Kya Mile (From "Rocky Aur Rani Kii Prem Kahaani")', | |
129 | 'artist': 'Pritam Chakraborty, Arijit Singh, Shreya Ghoshal, Amitabh Bhattacharya', | |
130 | 'album': 'Tum Kya Mile (From "Rocky Aur Rani Kii Prem Kahaani")', | |
131 | 'release_year': 2023, | |
132 | 'thumbnail': 'https://images.hungama.com/c/1/7c2/c7b/103553671/103553671_200x200.jpg', | |
133 | }, | |
134 | }] | |
135 | ||
136 | def _real_extract(self, url): | |
137 | audio_id = self._match_id(url) | |
138 | ||
139 | data = self._download_json( | |
140 | 'https://www.hungama.com/audio-player-data/track/%s' % audio_id, | |
141 | audio_id, query={'_country': 'IN'})[0] | |
142 | track = data['song_name'] | |
143 | artist = data.get('singer_name') | |
144 | formats = [] | |
145 | media_json = self._download_json(data.get('file') or data['preview_link'], audio_id) | |
146 | media_url = try_get(media_json, lambda x: x['response']['media_url'], str) | |
147 | media_type = try_get(media_json, lambda x: x['response']['type'], str) | |
148 | ||
149 | if media_url: | |
150 | formats.append({ | |
151 | 'url': media_url, | |
152 | 'ext': media_type, | |
153 | 'vcodec': 'none', | |
154 | 'acodec': media_type, | |
155 | }) | |
156 | ||
157 | title = '%s - %s' % (artist, track) if artist else track | |
158 | thumbnail = data.get('img_src') or data.get('album_image') | |
159 | ||
160 | return { | |
161 | 'id': audio_id, | |
162 | 'title': title, | |
163 | 'thumbnail': thumbnail, | |
164 | 'track': track, | |
165 | 'artist': artist, | |
166 | 'album': data.get('album_name') or None, | |
167 | 'release_year': int_or_none(data.get('date')), | |
168 | 'formats': formats, | |
169 | } | |
170 | ||
171 | ||
172 | class HungamaAlbumPlaylistIE(HungamaBaseIE): | |
173 | _VALID_URL = r'https?://(?:www\.|un\.)?hungama\.com/(?P<path>playlists|album)/[^/]+/(?P<id>\d+)' | |
174 | _TESTS = [{ | |
175 | 'url': 'https://www.hungama.com/album/bhuj-the-pride-of-india/69481490/', | |
176 | 'playlist_mincount': 7, | |
177 | 'info_dict': { | |
178 | 'id': '69481490', | |
179 | }, | |
180 | }, { | |
181 | 'url': 'https://www.hungama.com/playlists/hindi-jan-to-june-2021/123063/', | |
182 | 'playlist_mincount': 33, | |
183 | 'info_dict': { | |
184 | 'id': '123063', | |
185 | }, | |
186 | }, { | |
187 | 'url': 'https://un.hungama.com/album/what-jhumka-%3F-from-rocky-aur-rani-kii-prem-kahaani/103891805/', | |
188 | 'playlist_mincount': 1, | |
189 | 'info_dict': { | |
190 | 'id': '103891805', | |
191 | }, | |
192 | }] | |
193 | ||
194 | def _real_extract(self, url): | |
195 | playlist_id, path = self._match_valid_url(url).group('id', 'path') | |
196 | data = self._call_api(remove_end(path, 's'), playlist_id, fatal=True) | |
197 | ||
198 | def entries(): | |
199 | for song_url in traverse_obj(data, ('body', 'rows', ..., 'data', 'misc', 'share', {url_or_none})): | |
200 | yield self.url_result(song_url, HungamaSongIE) | |
201 | ||
202 | return self.playlist_result(entries(), playlist_id) |