Отже, з Last.fm будемо отримувати список назв пісень і виконавців, потім за допомогою API ВКонтакте будемо їх скачувати.
Крок 1. Йдем на Last.fm, і витягуємо список улюблених пісень користувача.
Для тих хто не знає, Last.fm має API, що дозволяє будь-якому користувачеві створювати свої власні програми з використанням даних Last.fm. Для роботи з API потрібно отримати API Key і Secret. Йдемо на http://www.last.fm/api і створюємо новий аккаунт для некомерційного використання.
ruby-lastfm - інтерфейс для Web-сервісів Last.fm v2.0.
Тепер нам потрібно отримати token:
lastfm = Lastfm.new(lastfm_api_key, lastfm_api_secret) lastfm_token = lastfm.auth.get_token
Далі нам пропонують відкрити 'http://www.last.fm/api/auth/?api_key=xxxxxxxxxxx&token=xxxxxxxx' і надати права додатку.
Спробуємо змоделювати цей запит. Але спочатку потрібно авторизуватися на сайті Last.fm за допомогою імені і паролю. Використовуємо бібліотеку Mechanize:
mech = Mechanize.new do |a|
a.user_agent_alias = 'Linux Firefox'
a.verify_mode = OpenSSL::SSL::VERIFY_NONE
a.follow_meta_refresh = true
end
login_page = mech.get('https://last.fm/login')
login_form = login_page.form_with(action: '/login')
login_form.username = lastfm_username
login_form.password = lastfm_password
page = login_form.submit
if page.uri.to_s == 'http://www.last.fm/home'
puts "Login successful!"
else
puts page.uri.to_s
exit
end
Якщо авторизація пройшла успішно, надаємо права додатку:
grantaccess_url = "http://www.last.fm/api/auth/?api_key=#{lastfm_api_key}&token=#{lastfm_token}"
grantaccess_page = mech.get(grantaccess_url)
grantaccess_form = grantaccess_page.form_with(action: '/api/grantaccess')
grantaccess_form.submit
Отже, тепер ми можемо витягнути всю цікаву для нас інформацію:
lastfm.session = lastfm.auth.get_session(:token => lastfm_token)['key'] tracks = lastfm.user.get_loved_tracks(user: lastfm_username)
Перший крок пройдений! :)
Крок другий. Пошук і скачування записів з vk.com.
Авторизуємося ВКонаткте:
vk = Vkontakte::Client.new(vk_client_id) vk.login!(vk_email, vk_password, scope = 'audio')
Використовуємо API функцію пошуку аудіо:
str = "#{track['artist']['name']} - #{track['name']}"
audio = vk.api.audio_search(q: str, sort: 2)[1]
Вона повертає найпопулярніший результат пошуку рядка str (серед аудіозаписів).
Тепер ми знаємо url для скачування. Завантажити можна за допомогою стандартної функції.
path = "#{downloaded_folder}/" + "#{audio['artist']} - #{audio['title']}.mp3"
File.open(path, 'wb') do |saved_file|
open(audio['url'], 'rb') do |read_file|
saved_file.write(read_file.read)
end
end
В результаті вийшов ось такий скрипт:
https://gist.github.com/mamantoha/5488722
Як з ним працювати:
- Скрипт вимагає встановленого Ruby і гемів mechanize, ruby-lastfm, vkontakte
- Потрібно отримати ключі для Last.fm(lastfm_api_key, lastfm_secret) і ВКонтакте(vk_client_id)
- downloaded_folder - директорія, куди буде зберігатися скачана музика
- lastfm_username і lastfm_password - ваш логін і пароль на Last.fm
- vk_email і vk_password - ваш логін і пароль на Vk.com
Відповідні параметри прописати в тілі скрипта.
Немає коментарів:
Дописати коментар