Скачивание музыки из VK, используя VK api и Python3 / Хабр
Ещё совсем недавно было первое июня, а тут уже первое сентября. Осень на дворе.
Да, недавно тоже так отвернулся, а очнулся — Mail поглотил VK. И началось: видео без рекламы не посмотришь, музыку не послушаешь — запретили правообладатели. Ходят слухи, что вообще запретят. Почуял неладное. А тут как раз такое время года. Вот и подумал, а почему бы мне не собрать свои запасы? Законсервирую свою музыку на своём компе, перекину на диск — слаще любого варенья будет! А поможет мне в этом, как не странно, сам ВК, а точнее — его api. А ещё третий python, встроенная библиотека urllib и библиотека по работе с данным в формате json.
У api vk можно запрашивать информацию о аудиозаписях пользователя. Ответ нам будет приходить в формате json, и в нём будет содержаться количество аудиозаписей пользователя, а также расширенная информация о каждой песне, если такая информация имеется. А главное, что у каждой песни будет url-адрес, по которому она лежит на серверах ВК. Как раз то, что нам нужно.
Для работы с большинством методов api нужен специальный ключ (далее — access_token), который vk выдает приложениям. Как его получить — расскажу чуть позже.
Помните окошко, которое появляется, как только приложение запрашивает доступ к информации с вашей страницы? Нажимая «Разрешить», вы даете приложению право получить access_token на ваше имя, в котором будут содержаться параметры доступа к информации с вашей страницы.
Что ж, начнём?
Откроем вкладку «разработчикам» и создадим новое приложение:
Вводим название вашего приложения и выбираем его тип: standalone-приложение:
Подтверждаем действие через смс, которая падает в ваш мобильный:
Как только мы прошли все формальности, мы получаем id нашего приложения, который будем использовать для получения access_token-a. Откроем ту часть документации, которая посвящена авторизации клиентских standalone-приложений.
Важно
redirect_uri в нашем случае должен быть равен oauth.vk.com/blank.html
, так как другой адрес нужно указывать, только если мы разрабатываем браузерное javascript-приложение.
Так как в нашем приложении мы будем работать с аудиозаписями, в атрибут scope мы передадим параметр audio. Обычно access_token выдается на время. Чтобы получить его бессрочно, в атрибут scope можно передать параметр offline.
Примечания:
- несколько параметров в один и тот же атрибут пишутся через запятую.
- атрибуты в запросе пишутся через амперсанд (&)
Для полной таблицы параметров атрибута scope посетите ссылку.
В итоге в адресной строке мы вбиваем что-то на подобие:
https://oauth.vk.com/authorize/client_id=YOUR_CLIENT_ID&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token
Если у вас всё получилось, вы увидите это окошко.
После успешной авторизации и получения прав доступа вы будете перенаправлены по адресу oauth.vk.com/blank.html
. В адресной строке вы увидите атрибут access_token= YOUR_ACCESS_TOKEN
. Обязательно сохраните этот ключ, чтобы не потерять его в дальнейшем. Именно его мы будем использовать при написании запросов к api.
Для того, чтобы получать список аудиозаписей пользователя, мы воспользуемся методом api audio.get. Как я уже говорил выше, метод audio.get возвращает нам ответ в json-формате. Вот пример json-объекта, который возвращает этот метод.
{ "response": [712, { "aid":393825624, "owner_id":59223044, "artist":"Saint Asonia", "title":"Blow Me Wide Open", "duration":224, "url":"http:\/\/cs9-11v4.vk.me\/p13\/39a25fcb2c8ce0.mp3?extra=hLsHqDEzrwLWudHCpV1RRIAEHmwymoX6DyWikmJFCpjhdS_xrATqtAtC9trWSyyd1asFakko8BvXCTkjfQKEPlqdVFL6", "lyrics_id":"274446714", "genre":18 }, {"aid":392782493, "owner_id":59223044, "artist":"Kongos", "title":"I'm Only Joking", "duration":225, "url":"http:\/\/cs9-12v4.vk.me\/p15\/b4d77a6a010d08.mp3?extra=7PQDPyENs9k029CQcO7hVtYV3AHQx90-ZUxKYKhE3ztr5BY9esrUeLaF-KG-ub1_svELz0E1M5pd6zca3BK12J4EwrnI", "lyrics_id":"184734619" ,"genre":21 } ] }
Итак, как вы видите, объект состоит из словаря с ключом response, по которому хранится массив песен.
Первый объект — количество песен на странице пользователя, а все последующие являются словарями, содержащими информацию о песнях. Воспользуемся методом request.urlopen из библиотеки urllib, который позволяет получать данные, хранящиеся по url-адресу в интернете.
from urllib.request import urlopen
Функция urlopen требует обязательный параметр — url-адрес, который она откроет. В нашем случае — это метод audio.get:
Для обращения к методам api vk нужно дергать методы, расположенные по адресу
https://api.vk.com/method/METHOD_NAME?
, передавая туда все нужные методу аргументы.
Итак, напишем тот урл, который будем открывать:
address = ‘https://api.vk.com/method/audio.get?owner_id=YOUR_OWNER_ID&access_token=YOUR_ACCESS_TOKEN’
и откроем его:
data = urlopen(address)
Данные, которые мы получили, надо прочитать и раскодировать, так как нам приходит нераскодированная информация. А так, как это всё завернуто в формат json, то чтобы обращаться со словарём, как с объектом Python, мы должны воспользоваться библиотекой json.
import json
Воспользуемся методом loads(), который превращает строку, содержащую объект формата json, в объект языка Python:
decoded_response = data.read().decode()
final_data = json.loads(decoded_response)
Ура! Теперь мы можем обращаться к данным, содержащимся в переменной final_data. Получим все словари, в которых содержится информация о песнях:
songs = final_data[‘response’][1:]
Этой строчкой мы получили все элементы массива response с 1 по конечный. Теперь будем работать с каждой песней отдельно.
for song in songs: song_artist = song['artist'] song_title = song['title'] song_url = song['url']
Получим информацию, хранящуюся по адресу song_url:
cached_song = urlopen(song_url).read()
И запишем её в файл. Где же его создавать, спросите вы? А для этого вам нужна будет библиотека os. Напишем вне нашего цикла:
import os
И создадим папку music на диске С функцией
os.mkdir(‘C://Music’)
Теперь у нас есть папка, в которую мы хотим записывать наши песни.
Для того, чтобы наши песни хранились в порядке, мы будем создавать группы для каждого артиста. А для того, чтобы понять, нужно ли нам создавать папку, или нет, воспользуемся функцией os.listdir, которая возвращает список объектов по указанному пути:
if song_artist not in os.listdir('C://Music'): os.mkdir('C://Music/%s' %(song_artist))
Теперь мы создаём файл и записываем туда нашу песню.
filename = ‘C://Music/%s/%s.mp3’ %(song_artist, song_title)
file = open(filename, ‘wb’)
file.write(cached_song)
file.close()
Ура. Осталось всего лишь ещё раз посмотреть на красивый код и нажать «Выполнить». Ну, а ещё, конечно, подождать немного, ведь песням нужно какое-то время на запись.
Полный текст программы
from urllib.request import urlopen import json import os os.mkdir('C://Music') address = 'https://api.vk.com/method/audio.get?owner_id=MY_ID&access_token=MY_TOKEN' data = urlopen(address) decoded_response = data.read().decode() final_data = json.loads(decoded_response) songs = final_data['response'][1:] for song in songs: song_artist = song['artist'] song_title = song['title'] song_url = song['url'] cached_song = urlopen(song_url).read() if song_artist not in os.listdir('C://Music'): os.mkdir('C://Music/%s' %(song_artist)) filename = 'C://Music/%s/%s.mp3' %(song_artist, song_title) file = open(filename, 'wb') file.write(cached_song) file.close()
Наслаждайтесь музыкой и любите программирование. До связи!
8 лучших программ для скачивания музыки из ВК
Многие из нас слушают музыку в социальной сети Вконтакте. Но далеко не всегда удобно это делать через браузер онлайн, ведь хочется, чтобы любимые музыкальные композиции были рядом с нами даже тогда, когда нет интернета. И именно для этого существуют различные программы и надстройки для браузера, позволяющие скачивать музыку из ВК на компьютер.
Savefrom.net — это специальная утилита, которая интегрируется в ваш веб-браузер, добавляя кнопку загрузки с миниатюрной стрелкой рядом с каждой песней.
Помимо музыки из Вконтакте, вы можете скачать видео с YouTube, Vimeo и других популярных сервисов.
VKSaver
Эта утилита является браузерным расширением, которое поддерживается такими браузерами, как Google Chrome, Яндекс Браузер, Mozilla Firefox, Opera и Internet Explorer.
После установки в аудиозаписях ВК возле каждого трека появится значок со стрелочкой. Как только вы нажмете на этот значок, начнется загрузка выбранного трека.
Вконтакте.DJ
В отличие от двух рассмотренных выше утилит, Вконтакте.DJ представляет собой полноценную программу для скачивания и прослушивания музыки из ВК.
Этот продукт уникален тем, что позволяет осуществлять поиск по альбомам и сразу загружать пакет избранных треков. Кроме того, Вконтакте.DJ поддерживает воспроизведение и загрузку видео с таких популярных видеохостингов, как YouTube, RuTube, Vimeo и, конечно же, Вконтакте.
MusicSig
MusicSig — это простое расширение для браузера, поддерживаемое такими веб-браузерами, как Mozilla Firefox, Google Chrome и Opera.
Для установки приложения достаточно нажать кнопку «Установить» на сайте разработчика, после чего вы будете автоматически перенаправлены в магазин дополнений для вашего браузера.
После завершения установки и перезагрузки браузера, зайдя в раздел «Мои аудиозаписи» на сайте Вконтакте, вы заметите появление нового значка с дискетой возле каждой дорожки. Щелкните значок, чтобы веб-браузер загрузил выбранную песню на ваш компьютер.
VKMusic
Программа для скачивания аудиозаписей из ВК, которая после установки интегрируется в веб-браузер, добавляя кнопку загрузки напротив каждой песни. Также в программу включен удобный мини-плеер, позволяющий управлять воспроизведением в любое удобное время, не выискивая в обилии открытых вкладок тот, где играет музыка.
VKMusic может скачивать не только отдельные треки, но и альбомы. Эту функцию оценят меломаны, которые скачивают музыкальные композиции на свои плееры и смартфоны сразу целыми сборниками.
VKMusic.Citynov
Бесплатное приложение для скачивания музыки из ВК, позволяющее скачивать как отдельные треки, так и целые альбомы в максимально возможном качестве (отображает битрейт аудиозаписи).
После установки у вас появятся такие возможности, как прослушивание и скачивание аудиозаписей, отображение информации об исполнителе и треках, поиск похожей музыки.
Дополнительным бонусом является возможность просмотра и скачивания видео в максимальном качестве с таких популярных сервисов, как YouTube, Mail.ru, RuTube, Яндекс.Видео и других.
vkopt
ВкОпт — самая многофункциональная браузерная надстройка из когда-либо созданных для социальной сети Вконтакте.
Бесчисленный арсенал функций позволит вам не только скачивать аудио из ВК, но и скачивать видео, детально настраивать интерфейс, менять звуковые уведомления и многое другое.