- def _extract_initial_data(self, url, display_id):
- webpage = self._download_webpage(url, display_id)
- return self._search_json(
- r'window\.__INITIAL_DATA__\s*=', webpage,
- 'initial data', display_id, transform_source=js_to_json)
+ def _call_api(self, type_, token, note='API', params={}):
+ return self._download_json(
+ self._API_URL, token, f'Downloading {note} JSON', f'Unable to download {note} JSON',
+ query={
+ '__call': 'webapi.get',
+ '_format': 'json',
+ '_marker': '0',
+ 'ctx': 'web6dot0',
+ 'token': token,
+ 'type': type_,
+ **params,
+ })
+
+ def _yield_songs(self, playlist_data):
+ for song_data in traverse_obj(playlist_data, ('songs', lambda _, v: v['id'] and v['perma_url'])):
+ song_info = self._extract_song(song_data)
+ url = smuggle_url(song_info['webpage_url'], {
+ 'id': song_data['id'],
+ 'encrypted_media_url': song_data['encrypted_media_url'],
+ })
+ yield self.url_result(url, JioSaavnSongIE, url_transparent=True, **song_info)