1414from .audio_url_decoder import decode_audio_url
1515from .exceptions import AccessDenied
1616
17- RE_AUDIO_ID = re .compile (r'audio(-?\d+)_(\d+)' )
1817RE_ALBUM_ID = re .compile (r'act=audio_playlist(-?\d+)_(\d+)' )
1918RE_ACCESS_HASH = re .compile (r'access_hash=(\w+)' )
19+ RE_M3U8_TO_MP3 = re .compile (r'/[0-9a-f]+(/audios)?/([0-9a-f]+)/index.m3u8' )
2020
2121TRACKS_PER_USER_PAGE = 50
2222TRACKS_PER_ALBUM_PAGE = 100
@@ -222,7 +222,7 @@ def get_audio_by_id(self, owner_id, audio_id):
222222 return decode_audio_url (link , self .user_id )
223223
224224
225- def scrap_data (html , user_id , filter_root_el = None ):
225+ def scrap_data (html , user_id , filter_root_el = None , convert_m3u8_links = True ):
226226 """ Парсинг списка аудиозаписей из html страницы """
227227
228228 if filter_root_el is None :
@@ -241,13 +241,16 @@ def scrap_data(html, user_id, filter_root_el=None):
241241 title = audio .select_one ('.ai_title' ).text
242242 duration = int (audio .select_one ('.ai_dur' )['data-dur' ])
243243 full_id = tuple (
244- int (i ) for i in RE_AUDIO_ID . search ( audio ['id' ]). groups ( )
244+ int (i ) for i in audio ['data- id' ]. split ( '_' )
245245 )
246246 link = audio .select_one ('.ai_body' ).input ['value' ]
247247
248248 if 'audio_api_unavailable' in link :
249249 link = decode_audio_url (link , user_id )
250250
251+ if convert_m3u8_links and 'm3u8' in link :
252+ link = RE_M3U8_TO_MP3 .sub (r'\1/\2.mp3' , link )
253+
251254 tracks .append ({
252255 'id' : full_id [1 ],
253256 'owner_id' : full_id [0 ],
0 commit comments