8

Переносим коллекцию из vk в lastfm

Недавно у меня появилась потребность перенести всю мою коллекцию треков из вк. (1252 треков в ручную я переносить не хотел) в Yandex.Music и last.fm. С Яндексом нет никаких проблем у них есть прекрасный инструмент как раз для этой цели. Напомню на всякий случай https://music.yandex.ru/import
Проблемой стало, то, что вк нынче не дает работать с музыкой. Потому, выбор стоял между: либо использовать чьи-то готовые реализации (библиотека vk-api на Python), либо попробовать написать собственную реализацию. Что и было сделано в конечном счете (ссылка в конце поста).
Я пишу в основном для себя, на языке Python. Для различных оптимизационных задач.
Первым делом понимаем, что добраться до заветных аудиозаписей человека можно только зайдя на vk.com
Бежим на vk.com и сразу понимаем, что основным запросом является пост запрос на https://login.vk.com/ с данными в виде логин/пароль/lg_h/ip_h/captcha и кучей всего еще.
Вк выдает капчу, если ты не логинишься 5 раз подряд с одного айпишника, поэтому этот пункт пропустим, еще остаются проблемы с двухфакторной авторизацией, но я надеюсь реализовать ее в следующей версии (если руки конечно дотянутся).
Обновляя несколько раз страничку, понимаем, что lg_h генерируется каждый раз. ip_h меняется как только меняется ip.
Оба значения довольно легко выудить с страницы логина: https://login.vk.com/

Для этой задачи я использовал библиотеку requests и регулярное выражение "%s" value="(.{18})"
Форматируем строку и получаем значения. Закидываем все в запрос вместе с паролем и логином. И... Авторизация прошла успешно!
Об этом нам говорит строка в ответе 'onLoginDone', вместе с именем пользователя и его owner_id. Сразу сохраняем второе значение, так как оно нам еще понадобится для получения списка музыки.
Идем на страницу музыки и опять ловим запросы которые идут на сервер. В этот раз это post на https://vk.com/al_audio.php, причем вызывается он два раза. В первый раз с параметром offset = 0 второй раз c 30. Первый раз выдает 30 треков в формате xml с json и кусками страниц. Второй раз все остальные в таком-же формате. Получаем нужный нам json с помощью регулярки <!><!json>(.+?)<!> и загружаем его. Осталось почистить мусор и записать все в файл, хотя некоторые данные, например ссылки на не активированные треки могут быть довольно полезны.

Следующей фазой станет перенос полученного json'а в LastFM. Благо на это дело у LastFM есть удобное api на python pyLast.

Для тех, кто хочет просто перенести свои треки из вк в ластфм или не знаком с python, я подготовил изолированную среду для выполнения скрипта. Удалил все лишнее, оставил только жизненно необходимое. Вам достаточно нажать кнопку run.bat и все должно заработать.
Контакты по всем багам/предложениям/вопросам/критике указаны в readme файлах.
https://yadi.sk/d/Si9exRHZrt_NiA
Всем удачи в перенесении своих музыкальных коллекций.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества