Отже, з 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
Відповідні параметри прописати в тілі скрипта.
Немає коментарів:
Дописати коментар