Skip to content

Commit

Permalink
Fix getting audio from albums with access_hash
Browse files Browse the repository at this point in the history
  • Loading branch information
ALEXREDX authored and python273 committed Dec 14, 2018
1 parent a0a46e0 commit 4d84ab4
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions vk_api/audio.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

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

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

def get_iter(self, owner_id=None, album_id=None):
def get_iter(self, owner_id=None, album_id=None, access_hash=None):
""" Получить список аудиозаписей пользователя (по частям)
:param owner_id: ID владельца (отрицательные значения для групп)
:param album_id: ID альбома
:param access_hash: ACCESS_HASH альбома
"""

if owner_id is None:
owner_id = self.user_id

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

tracks = scrap_data(response.text, self.user_id)
tracks = scrap_data(
response.text,
self.user_id,
filter_root_el={'class_': 'audioPlaylist__list'} if album_id else None
)

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

offset += offset_diff

def get(self, owner_id=None, album_id=None):
def get(self, owner_id=None, album_id=None, access_hash=None):
""" Получить список аудиозаписей пользователя
:param owner_id: ID владельца (отрицательные значения для групп)
:param album_id: ID альбома
:param access_hash: ACCESS_HASH альбома
"""

return list(self.get_iter(owner_id, album_id))
return list(self.get_iter(owner_id, album_id, access_hash))

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

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

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

# "1 011 прослушиваний"
plays = int(stats_text.rsplit(' ', 1)[0].replace(' ', ''))
try:
plays = int(stats_text.rsplit(' ', 1)[0].replace(' ', ''))
except ValueError:
plays = None

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

'title': album.select_one('.audioPlaylistsPage__title').text,
'plays': plays
Expand Down

0 comments on commit 4d84ab4

Please sign in to comment.