Всем, привет. Я люблю слушать музыку в ВК, так как малоизвестные группы обычно выкладывают свою музыку туда. Приложение, через которое я слушал бесплатно в фоне, почему-то перестало рабоать, и тогда решил скачать музыку на телефон. Тыкать в браузере очень долго, а светиться на сайтах, которые скачивают музыку, я не хотел. Пришла в голову идея скачать музыку с помощью питона. Через официальное API от ВК скачать музыку не выйдет, так как они отключили публичный API для аудио. Сначала был вариант парсить мобильную версию и тащить оттуда ссылки на песни, но я не умею парсить сайты, да и python отличается именно тем, что для любой задачи уже есть модуль. Собственно полазил в google нашел библиотеку vk_api. У нее как раз есть метод, который возвращает ссылки на песни.
Сначала импортируем нужные модули. Модуль time нужен, чтоб посмотреть за сколько скачивались ваши песни. Он не обязателен.
Теперь добавим немного переменных. name_dir — имя папки, в которую скачаются песни (добавил, чтоб все аккуратно было), а path — путь, куда скачаются песни
Здесь создаем нашу папку name_dir, если ее нет.
Теперь нам нужно авторизоваться и получить список песен.
Переходи в директорию, куда будем сохранять песни
А вот и алгоритм, который скачивает песни и сохраняет их. vk_audio.get(owner_id=my_id) — возвращает список песен по переданному id. Итерируемся по этому списку, чтоб потом записать каждую песню в файл
У меня 1000 песен качались 600 секунд.
vk_audio.get(owner_id=my_id) — возвращает список. Список выглядит вот так:
При скачивании песен возникла вот такая ошибка, не совсем понял что это. Мне кажется связано с названием песен. Разбираться было лень, поэтому я просто вывел название песен в консоль. Вот ошибка:

Требуемые модули: request, vk_api, BeautifulSoup4
Сначала импортируем нужные модули. Модуль time нужен, чтоб посмотреть за сколько скачивались ваши песни. Он не обязателен.
import vk_api
from vk_api import audio
import requests
from time import time
import os
Теперь добавим немного переменных. name_dir — имя папки, в которую скачаются песни (добавил, чтоб все аккуратно было), а path — путь, куда скачаются песни
REQUEST_STATUS_CODE = 200
name_dir = 'music_vk'
path = r'E:\python\course\music\\' + name_dir
login = '___' # Номер телефона
password = '___' # Пароль
my_id = '____' # Ваш id vk
Здесь создаем нашу папку name_dir, если ее нет.
if not os.path.exists(path):
os.makedirs(path)
Теперь нам нужно авторизоваться и получить список песен.
vk_session = vk_api.VkApi(login=login, password=password)
vk_session.auth()
vk = vk_session.get_api() # Теперь можно обращаться к методам API как к обычным
# классам
vk_audio = audio.VkAudio(vk_session) # Получаем доступ к audio
Переходи в директорию, куда будем сохранять песни
os.chdir(path)
А вот и алгоритм, который скачивает песни и сохраняет их. vk_audio.get(owner_id=my_id) — возвращает список песен по переданному id. Итерируемся по этому списку, чтоб потом записать каждую песню в файл
time_start = time()
for i in vk_audio.get(owner_id=my_id):
try:
r = requests.get(i["url"])
if r.status_code == REQUEST_STATUS_CODE:
with open(i["artist"] + '_' + i["title"] + '.mp3', 'wb') as output_file:
output_file.write(r.content)
except OSError:
print(i["artist"] + '_' + i["title"])
time_finish = time()
print("Time seconds:", time_finish - time_start)
У меня 1000 песен качались 600 секунд.
vk_audio.get(owner_id=my_id) — возвращает список. Список выглядит вот так:
[
{
"id": 456239850,
"owner_id": Здесь будет переданный id,
"url": "https://cs1-67v4.vkuseraudio.net/p9/d6e2cf63cf34b8.mp3?extra=KIpwmZ_N4DW8dxSL5waeW4LtuhKO_6Wjamf1xjc0kg7YT_iGXVtayuRtTU0tspSNAaMGKYqcmLluZXjdLqXifH-p2h83sCpo2yzN3fO2p9M1sOHpx0_X_abTKzVXO7Uwsf6YiZOWL1P5RQmSOZhY3GEz",
"artist": "Lumen",
"title": "Sid & Nancy",
"duration": 247
},
...
]
При скачивании песен возникла вот такая ошибка, не совсем понял что это. Мне кажется связано с названием песен. Разбираться было лень, поэтому я просто вывел название песен в консоль. Вот ошибка:

Требуемые модули: request, vk_api, BeautifulSoup4