Skip to content

Commit 623fa4e

Browse files
bakatroublepython273
authored andcommitted
Allow converting m3u8 audio links to mp3 & fix extraction of owner and audio IDs (#315)
1 parent addc91a commit 623fa4e

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

vk_api/audio.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
from .audio_url_decoder import decode_audio_url
1515
from .exceptions import AccessDenied
1616

17-
RE_AUDIO_ID = re.compile(r'audio(-?\d+)_(\d+)')
1817
RE_ALBUM_ID = re.compile(r'act=audio_playlist(-?\d+)_(\d+)')
1918
RE_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

2121
TRACKS_PER_USER_PAGE = 50
2222
TRACKS_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

Comments
 (0)