Вниз  Использование VK API для поиска музыки
- 26.05.2013 / 05:16copy  #264114
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
Хочу рассказать о том, как получить доступ к музыке через VK API. Возможно кому-то будет лень разбираться, врубаться как получать нужные ключи, так что расскажу)
Повёл меня на это тот факт, что в сети часто вижу "продам граббер музыки с вк". Ну ох!@#ть

Действие первое

API у vk довольно мощный, но доки как-то распиханы там-сям, что сразу и не разберешься, как оно что.
Для начала нужно заметить, что всё API работает через созданное вами приложение в вк. Создать его можно в пару кликов здесь http://vk.com/editapp?act=create

В данном посте я не буду описывать аутентификацию других пользователей (получение временных access_token (ключей) и подтверждение ими доступа), мы будем использовать только нашу страницу с заранее полученным доступом.

Нам понадобится создать приложение типа IFrame/Flash.

Действие второе
После того, как мы создали своё приложение, мы попадаем на страницу управления ним. Нас здесь собственно ничего не интересует, кроме данных на вкладке Настройки

Для того, чтобы отправлять запросы на API и получать от него ответы, нам необходим ключ access_token. Этот ключ получается после подтверждения прав доступа этого приложения к каким-либо категориям API.

Итак, на вкладке Настойки мы видим ID приложения. Теперь нам нужно получить права на поиск музыки через наше приложение. Для этого в ссылку
https://oauth.vk.com/authorize?client_id=здесь ID вашего приложения&redirect_uri=http://api.vk.com/blank.html&scope=audio, offline&display=wap&response_type=token(scope - это наши параметры доступа)
вставляем ID своего приложения, переходим, и подтверждаем доступ приложения. После этого нас переадресует на страницу с текстом Пожалуйста, не копируйте данные из адресной строки для сторонних сайтов. Таким образом Вы можете потерять доступ к Вашему аккаунтуНе обращаем внимания, идём в адресную строку, и копируем оттуда наш полученный access_token.
Например http://api.vk.com/blank.html#access_token=3492288fcd30a67e2ee7cd7458ed6d3cb881375439e7af5f1d54e9d06ce277161d3ea811480d4245978a4
3492288fcd30a67e2ee7cd7458ed6d3cb881375439e7af5f1d54e9d06ce277161d3ea811480d4245978a4 - это и есть наш ключ API.

Этот ключ имеет бесконечное время использование (по идее) и доступ в любое время, поскольку при получении прав мы указали параметр offline
__________________
 Да, детка, я - Король Ящериц!!!

Изменено HoldFast (26.05 / 18:33) (всего 6 раз)
- 26.05.2013 / 05:22copy  #264116
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
Действие третье
Теперь собственно о том, как слать запросы. Здесь всё просто.
Формируем запрос на https://api.vk.com/method/ с нужным методом, данными и полученным ключом API.
Так как тема создана о поиске музыки, то о нём и продолжим.

Пример запроса - https://api.vk.com/method/audi...mp;access_token=КЛЮЧ
Если всё было сделано верно, то мы получим в ответ json с результатом поиска
Открыть спойлер

Разобрать JSON я думаю не проблема, практически по всех языках есть свой парсер, а если с JSON бида, то можно поменять тип на XML. Для этого после метода нужно добавить .xml, например
https://api.vk.com/method/audi...mp;access_token=КЛЮЧ
Параметры методов и сами методы можно посмотреть в документации

Запросы без https

Бывает проблема с тем, что запросы передаются через протокол https. У API есть выход из этой ситуации.

Для того, чтобы посылать запросы на API по протоколу http, нам нужно авторизовать наше приложение с параметром nohttps. Например https://oauth.vk.com/authorize?client_id=здесь ID вашего приложения&redirect_uri=http://api.vk.com/blank.html&scope=audio, offline, nohttps&display=wap&response_type=token
После успешной авторизации нам вернёт access_token и ещё параметр secret.

Для отправки запроса по http нам нужно добавить к запросу дополнительный параметр sig. Вычисляется он так:
  1. sig = MD5(ЗАПРОС+SECRET)
.

Например, мы хотим поискать песни группы Metallica. Создаём строку для получения MD5:
/method/audio.search?q=Metallica&access_token=КЛЮЧSECRETнапример, access_token у нас 56cd1297fde2821f801e411478de7a65ae11bd3730a26f6fe8daa189f1860254ff47791f85ed50435241c, а secret 472edb1aa243cbf4ea, получится строка
/method/audio.search?q=Metallica&access_token=56cd1297fde2821f801e411478de7a65ae11bd3730a26f6fe8daa189f1860254ff47791f85ed50435241c472edb1aa243cbf4ea
Вычисляем из неё MD5: 8861895b7197fd2f64d4dc6622ae6c3d это и будет наш парметр sig. Теперь посылаем запрос к API:http://api.vk.com/method/audio...fd2f64d4dc6622ae6c3dздесь наш ключ secret уже не используется, только полученные параметр sig и наш access_token.

:ps: Данные ключей написаны от балды
__________________
 Да, детка, я - Король Ящериц!!!

Изменено HoldFast (27.05 / 16:45) (всего 7 раз)
- 26.05.2013 / 05:42copy  #264122
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
Стоит ещё заметить что все ссылки на музыку привязаны к ip, от которого поступил запрос на API. По этому если кто-то решил написать что-то через промежуточный сервер, например на PHP скачивание музыки, то здесь необходим "скрипт-отдатчик", позже могу написать пример
__________________
 Да, детка, я - Король Ящериц!!!
- 26.05.2013 / 09:40copy  #264153
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
Теперь хочу затронуть тему VK API Music конкретно для PHP. На PHP есть уже готовая реализация в виде класса, остается только заполнить два поля с ID и слать запросы.
Итак, всё что идёт ниже - это работа с классом, который прикреплён к посту.

Инициализация

  1. require 'vkapi.class.php';
  2.  
  3. $api_id = ''; // ID приложения
  4. $vk_id = ''; // ID аккаунта
  5. $token = ''; //access_token и вот так
  6. $VK = new vkapi($api_id, $vk_id, $token);

Итак, объект создан и готов к работе. Далее всё просто - шлём запрос

  1. $resp = $VK->api('audio.search', array(
  2.         'q' => "Кипелов - На распутье", //сам запрос
  3.         'auto_complete' => '1', //автоматическое исправление, если запрос в виде "Еру Иуфедуы" (The Beatles)
  4.         'sort' => '2', // сортировка - по популярности
  5.         'count' => '50', //количество результатов в ответе
  6.         'offset' => '0' //оффсет (смещение, необходимо если делать постраничку или подгрузку на аяксе, ну это понятно)
  7.     ));

$resp = это будет готовый объект simplexml;

Вытягиваем первое название песни из результата поиска и url

  1. $title = $resp->audio[0]->title;
  2. $artist = $resp->audio[0]->artist;
  3. $url = $resp->audio[0]->url;

Понятно, что для обработки всего списка необходим цикл.

Но на этом не всё. Если просто отдать URL пользователю, у него вылетит 404. Потому что ссылка привязана к IP сервера
__________________
 Да, детка, я - Король Ящериц!!!

Изменено aNNiMON (11.05 / 13:34) (всего 3 раза)


Прикрепленные файлы:
vkapi.class.php (1.17 кб.) Скачано 230 раз
- 26.05.2013 / 09:44copy  #264154
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
А для того, чтобы пользователь мог скачать песню по полученному сервером URL'у можно пойти несколькими путями. Первый - это сохранить эту песню к себе на серв, а потом уже отдать юзеру. Это нам точно не подходит.
И второй - использовать "промежуточный" скрипт, который отдаст нам этот файл.
Вот собсвтенно пример такого скрипта:

  1. function vk_download($file) //$file = это и есть наш URL
  2. {
  3.     $len = get_headers($file,1);  
  4.     if ($len[0] == 'HTTP/1.1 200 OK') {
  5.  
  6.         if (ob_get_level()) {
  7.             ob_end_clean();
  8.         }        
  9.  
  10.         header('Content-Description: File Transfer');
  11.         header('Content-Type: application/octet-stream');
  12.         header('Content-Disposition: attachment; filename=' . md5($file) . '.mp3');
  13.         header('Content-Transfer-Encoding: binary');
  14.         header('Expires: 0');
  15.         header('Cache-Control: must-revalidate');
  16.         header('Pragma: public');
  17.         header('Content-Length: ' . $len['Content-Length']);
  18.         readfile($file);
  19.         exit;
  20.     }
  21. }

Как передать название песни, или url этому скрипту это уже решать разработчику :)
__________________
 Да, детка, я - Король Ящериц!!!

Изменено HoldFast (26.05 / 09:58) (всего 2 раза)
- 26.05.2013 / 09:55copy  #264156
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
Я уже чисто в адресной строке ручками запросы делал(xml) там выводит название композиции и под ней ссылка на загрузку
__________________
 Все идет по плану
- 26.05.2013 / 09:55copy  #264157
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
vl@volk, Молодца
__________________
 Да, детка, я - Король Ящериц!!!
- 26.05.2013 / 11:35copy  #264183
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
HoldFast, а для j2me такое можно приспособить?
__________________
 すべてが良いです
- 26.05.2013 / 11:36copy  #264184
vl@volk
  Пользователь

vl@volk 
Сейчас: Offline
Да, я этим занялся
__________________
 Все идет по плану
- 26.05.2013 / 11:38copy  #264186
HoldFast
  Пользователь

HoldFast 
Сейчас: Offline
ВитаминКО, Конечно. Только надо либа xml или json парсера, ну такие имеются
__________________
 Да, детка, я - Король Ящериц!!!
Наверх  Всего сообщений: 176
Фильтровать сообщения
Поиск по теме
Файлы топика (2)
Поиск по форуму
Новые вверху
  © aNNiMON (Melnik Software)
Онлайн: 32 (2/30)