Skip to content

Commit 4539cd8

Browse files
committed
vkaudio now is independent class
1 parent 64716e5 commit 4539cd8

5 files changed

Lines changed: 34 additions & 31 deletions

File tree

examples/get_all_audio.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# -*- coding: utf-8 -*-
1+
# -*- coding: utf-8 -*-
2+
import collections
23
import vk_api
34

45

@@ -14,7 +15,7 @@ def main():
1415
print(error_msg)
1516
return
1617

17-
vk = vk_session.get_api()
18+
vkaudio = vk_session.get_audio()
1819

1920
"""
2021
VkApi.audio.get и VkApi.audio.search делает запросы к странице m.vk.com
@@ -26,28 +27,27 @@ def main():
2627
"""
2728

2829
count = 0
29-
artists = {}
30+
artists = collections.Counter()
3031
while True:
31-
audios = vk.audio.get(owner_id=-99463083, offset=count)
32+
audios = vkaudio.get(owner_id=-99463083, offset=count)
3233
print('offset=', count)
3334
for audio in audios:
34-
try:
35-
artists[audio['artist']] += 1
36-
except KeyError:
37-
artists[audio['artist']] = 1
35+
artists[audio['artist']] += 1
3836

3937
count += len(audios)
4038

4139
if len(audios) == 0:
4240
break
4341

4442
# состаляем рейтинг первых 15
43+
print('\nTop 15:')
4544
sorted_artists = sorted(artists, key=artists.get, reverse=True)
4645
for artist in sorted_artists[:15]:
4746
print('{} - {} tracks added'.format(artist, artists[artist]))
4847

4948
# ищем треки самого популярного
50-
tracks = vk.audio.search(q=sorted_artists[0])
49+
print('\nSearch for ', sorted_artists[0])
50+
tracks = vkaudio.search(q=sorted_artists[0])
5151
for n, track in enumerate(tracks[:10]):
5252
print('{}. {}'.format(n+1, track['title']))
5353

examples/get_full_wall.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
import vk_api
33

4+
45
def main():
56
""" Пример получения всех постов со стены """
67

vk_api/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class VkApiError(Exception):
1515
pass
1616

1717

18-
class AccessRightsError(Exception):
18+
class AccessDenied (VkApiError):
1919
pass
2020

2121

vk_api/vk_api.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,9 @@ def auth_handler(self):
378378
def get_api(self):
379379
return VkApiMethod(self)
380380

381+
def get_audio(self):
382+
return VKAudio(self)
383+
381384
def method(self, method, values=None, captcha_sid=None, captcha_key=None, raw=False):
382385
""" Использование методов API
383386
@@ -459,8 +462,6 @@ def __init__(self, vk, method=None):
459462
self._vk = vk
460463
self._method = method
461464

462-
self.audio = VKAudio(vk) # audio branch
463-
464465
def __getattr__(self, method):
465466
if self._method:
466467
self._method += '.' + method

vk_api/vk_audio.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from bs4 import BeautifulSoup
22
import re
3-
from .exceptions import AccessRightsError
3+
from .exceptions import AccessDenied
44

55
RE_VALUE = re.compile(r'>(.*?)<')
66
RE_DURATION = re.compile(r'data-dur="([0-9]*)"')
@@ -10,35 +10,36 @@ class VKAudio:
1010
def __init__(self, vk):
1111
self._vk = vk
1212

13-
def get(self, **kwargs):
14-
response = self._vk.http.get('https://m.vk.com/audios{}'.format(kwargs['owner_id']),
15-
params={'offset': kwargs.get('offset', 0)},
16-
allow_redirects=False)
13+
def get(self, owner_id, offset=0):
14+
""" Получение html со списком аудиозаписей пользователя"""
15+
response = self._vk.http.get(
16+
'https://m.vk.com/audios{}'.format(owner_id),
17+
params={'offset': offset},
18+
allow_redirects=False)
19+
1720
if response.text == '':
18-
raise AccessRightsError("You dont have permissions to browse {}'s audios".format(kwargs['owner_id']))
21+
raise AccessDenied("You dont have permissions to browse {}'s audios".format(kwargs['owner_id']))
1922
return scrap_data(response.text)
2023

21-
def search(self, **kwargs):
22-
response = self._vk.http.get('https://m.vk.com/audio', params={'act': 'search',
23-
'q': kwargs['q'],
24-
'offset': kwargs.get('offset', 0)})
24+
def search(self, q='', offset=0):
25+
""" Получение html со списком аудиозаписей по запросу """
26+
response = self._vk.http.get(
27+
'https://m.vk.com/audio',
28+
params={'act': 'search',
29+
'q': q,
30+
'offset': offset})
2531
return scrap_data(response.text)
2632

2733

2834
def value(tag, duration=False):
29-
string = str(tag)
35+
""" Извлечение значений из html тега """
3036
if duration:
31-
regex = RE_DURATION
32-
else:
33-
regex = RE_VALUE
34-
extracted = regex.search(string)
35-
if extracted:
36-
groups = extracted.groups()
37-
return groups[0]
38-
return None
37+
return tag[0]['data-dur']
38+
return tag[0].text
3939

4040

4141
def scrap_data(html):
42+
""" Сбор информации из html и записывание ее в словарь """
4243
soup = BeautifulSoup(html, "html.parser")
4344
songs = []
4445

0 commit comments

Comments
 (0)