POWERSHELL: як завантажити музику з Вконтакте?





(немає оцінок, будь першим хто поставить оцінку)
202 переглядів

Вчора ввечері захотілося написати Powershell скрипт, який буде викачувати аудіозаписи з особистої сторінки під Вконтакте і розкладати їх по альбомах, в сенсі по папках з іменами альбомів в яких вони складаються під Вконтакте. Якщо аудіозапис не перебуває в якому-небудь альбомі, то попада в папку «Без альбому».

повершелл

Якщо додати нові аудіозаписи, то наступного разу скрипт завантажить тільки нові, а ті що вже викачані качати не буде. Якщо ж щось видалити з аудіо-записів з вконтакте, то скрипт про це нагадає, що мовляв на комп’ютері є такі-то аудіозаписи, яких у вашій аудіоколекції під вконтакте вже немає. Далі самі вирішуйте: видаляти чи ці аудіозаписи з комп’ютера або пускай залишаються.

Ось такий майже синхронизатор аудіоколекції з вконтакте =)

В скрипті потрібно вказати дві речі: папку в яку зберігати аудіо записи з вконтакте (у мене це D: \ vk-music \) і токен.

Що таке токен і як його отримати? Токен це своєрідний ключ, за яким вконтакте розумітиме що ви — це ви.

Щоб отримати токен потрібно перейти за посиланням:…

отримання токена вк

https://oauth.vk.com/authorize?client_id=3711445&scope=audio&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.0&response_type=token

У вас просять права на доступ до аудіозаписів та загальної інформації, потрібно погодитися.

права доступу

Після чого ви потрапите на сторінку з текстом:

Будь ласка, не копіюйте дані з адресного рядка для сторонніх сайтів. Таким чином Ви можете втратити доступ до Вашого аккаунту.

А в адресному рядку браузера буде приблизно такою адреса:

https://oauth.vk.com/blank.html#access_token=6fd83efcffc00be12345678901234567890123456789a23b7b73a4dc3e7c64ec5914768c8dbddd2d461af&expires_in=86400&user_id=24552345

Токен це те, що починається після «access_token =» і закінчується перед «& expires_in = 86400». Його і вставляємо в скрипт. Нижче наводжу код скрипта в якому для прикладу вписані мої токен і папка куди качати музику (обов’язково вкажіть СВІЙ токен і папку):

# Скрипт скачивает аудиозаписи из Вконтакте
# Автор: elims.org.ua
# Cсылка для получения токена:
# https://oauth.vk.com/authorize?client_id=3711445&scope=audio&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.0&response_type=token

# Ниже вставляем токен:
$token = «6fd83efcffc00be12345678901234567890123456789a23b7b73a4dc3e7c64ec5914768c8dbddd2d461af»
# Ниже вставляем адрес папки, куда нужно скачать музыку:
$music_path = «D:\vk-music\»

$uri = «https://api.vk.com/method/audio.getAlbums?v=5.24&access_token=»+$token
$request = Invoke-WebRequest -Uri $uri #получаем список альбомов
$albums = $request.content | ConvertFrom-Json #Конвертируем полученные данные из формата JSON в массив
$uri = «https://api.vk.com/method/audio.get?v=5.24&need_user=0&access_token=»+$token
$request = Invoke-WebRequest -Uri $uri #получаем список аудио
$audios = $request.content | ConvertFrom-Json #Конвертируем полученные данные из формата JSON в массив
$failed_audio = @() #создаем пустой массив, в нем будут хранится информация о неудачных загрузках
$audio_files = ls d:\vk-music\ -recurse | ?{!$_.psiscontainer} | select fullname #аудио-файлы которые уже ранее были скачаны
$audio_files = $audio_files | Foreach {[string]$_ -replace «@\{FullName=(.*)\}», ‘$1’} #убираем лишние символы
foreach ($audio in $audios.response.items) { #для каждого аудио
if ($audio.album_id -ne $null) { #если аудио состоит в альбоме
foreach ($album in $albums.response.items) { #ищем имя альбома
if ($audio.album_id -eq $album.id) { $album_title = $album.title }
}
}
else { #если аудио не состоит в альбоме
$album_title = «Без альбома»
}
«Аудио » + ++$i + » из » + $audios.response.items.count + » : » + $audio.artist + » — » + $audio.title + » | Альбом: » + $album_title
$path = $music_path + $album_title+ «\» #имя папки
if (-not(Test-Path $path)) { #если папка не существует
$result = New-Item -ItemType directory -Path $path #создаем ее
}
$filename = $audio.artist + » — » + $audio.title + «.mp3» #формируем имя файла
$filename = $filename -replace ‘(\\)|(\/)|(\*)|:|(\?)|»|<|>|(\|)|(\[)|(\])|(\n)’, «_» #убираем некорректные знаки для имени файла
$filename = $path + $filename #добавляем к имени файла папку
«Имя файла: » + $filename
if (-not(Test-Path $filename)) { #если такого файла не существует
Invoke-WebRequest $audio.url -OutFile $filename #скачиваем и сохраняем аудио-файл
}
#перепроверяем наличие файла
if (-not(Test-Path $filename)) { #если такого файла не существует
$failed_audio += $audio.artist + » — » + $audio.title
}
else {
$audio_files = $audio_files |? {$_ -ne $filename} #сохраняем какие файлы есть локально, но нет во вконтакте
}
}
if ($failed_audio.count -gt 0) { #говорим какие файлы не удалось скачать
«###################################################################»
«Не скачанные файлы:»
$failed_audio
}
if($audio_files.count -gt 0) {
«###################################################################»
«Файлы которые есть на компьютере но нет во вконтакте:»
$audio_files
}

Токен має термін придатності: добу. Так що якщо ви одного разу вписали в скрипт свій токен, то скрипт запускатиметься з ним тільки протягом 24-х годин. Після потрібно буде отримати новий токен.

Зберігаємо скрипт в текстовий файл з розширенням «.ps1» (наприклад в «D: \ get-vk-mp3.ps1») і запускаємо командою:

powershell D:\get-vk-mp3.ps1

виватаження музики вконтакті

Джерело: http://elims.org.ua/blog/powershell-kachaem-muzyku-iz-vkontakte/