Skip to content

Commit 4d84ab4

Browse files
ALEXREDXpython273
authored andcommitted
Fix getting audio from albums with access_hash
1 parent a0a46e0 commit 4d84ab4

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

vk_api/audio.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
RE_AUDIO_ID = re.compile(r'audio(-?\d+)_(\d+)')
1818
RE_ALBUM_ID = re.compile(r'act=audio_playlist(-?\d+)_(\d+)')
19+
RE_ACCESS_HASH = re.compile(r'access_hash=(\w+)')
1920

2021
TRACKS_PER_USER_PAGE = 50
2122
TRACKS_PER_ALBUM_PAGE = 100
@@ -35,19 +36,20 @@ def __init__(self, vk):
3536
self.user_id = vk.method('users.get')[0]['id']
3637
self._vk = vk
3738

38-
def get_iter(self, owner_id=None, album_id=None):
39+
def get_iter(self, owner_id=None, album_id=None, access_hash=None):
3940
""" Получить список аудиозаписей пользователя (по частям)
4041
4142
:param owner_id: ID владельца (отрицательные значения для групп)
4243
:param album_id: ID альбома
44+
:param access_hash: ACCESS_HASH альбома
4345
"""
4446

4547
if owner_id is None:
4648
owner_id = self.user_id
4749

4850
if album_id is not None:
49-
url = 'https://m.vk.com/audio?act=audio_playlist{}_{}'.format(
50-
owner_id, album_id
51+
url = 'https://m.vk.com/audio?act=audio_playlist{}_{}&access_hash={}'.format(
52+
owner_id, album_id, access_hash or ''
5153
)
5254
offset_diff = TRACKS_PER_ALBUM_PAGE
5355
else:
@@ -69,7 +71,11 @@ def get_iter(self, owner_id=None, album_id=None):
6971
'You don\'t have permissions to browse user\'s audio'
7072
)
7173

72-
tracks = scrap_data(response.text, self.user_id)
74+
tracks = scrap_data(
75+
response.text,
76+
self.user_id,
77+
filter_root_el={'class_': 'audioPlaylist__list'} if album_id else None
78+
)
7379

7480
if not tracks:
7581
break
@@ -79,14 +85,15 @@ def get_iter(self, owner_id=None, album_id=None):
7985

8086
offset += offset_diff
8187

82-
def get(self, owner_id=None, album_id=None):
88+
def get(self, owner_id=None, album_id=None, access_hash=None):
8389
""" Получить список аудиозаписей пользователя
8490
8591
:param owner_id: ID владельца (отрицательные значения для групп)
8692
:param album_id: ID альбома
93+
:param access_hash: ACCESS_HASH альбома
8794
"""
8895

89-
return list(self.get_iter(owner_id, album_id))
96+
return list(self.get_iter(owner_id, album_id, access_hash))
9097

9198
def get_albums_iter(self, owner_id=None):
9299
""" Получить список альбомов пользователя (по частям)
@@ -255,18 +262,23 @@ def scrap_albums(html):
255262

256263
link = album.select_one('.audioPlaylistsPage__itemLink')['href']
257264
full_id = tuple(int(i) for i in RE_ALBUM_ID.search(link).groups())
265+
access_hash = RE_ACCESS_HASH.search(link)
258266

259267
stats_text = album.select_one('.audioPlaylistsPage__stats').text
260268

261269
# "1 011 прослушиваний"
262-
plays = int(stats_text.rsplit(' ', 1)[0].replace(' ', ''))
270+
try:
271+
plays = int(stats_text.rsplit(' ', 1)[0].replace(' ', ''))
272+
except ValueError:
273+
plays = None
263274

264275
albums.append({
265276
'id': full_id[1],
266277
'owner_id': full_id[0],
267278
'url': 'https://m.vk.com/audio?act=audio_playlist{}_{}'.format(
268279
*full_id
269280
),
281+
'access_hash': access_hash.group(1) if access_hash else None,
270282

271283
'title': album.select_one('.audioPlaylistsPage__title').text,
272284
'plays': plays

0 commit comments

Comments
 (0)