Использование VK API для поиска музыки 26.05.2013 / 05:16 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| Хочу рассказать о том, как получить доступ к музыке через 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=3492288fcd30a67e2ee7cd7458ed6d3cb881375439e7af5f1d54e9d06ce277161d3ea811480d4245978a43492288fcd30a67e2ee7cd7458ed6d3cb881375439e7af5f1d54e9d06ce277161d3ea811480d4245978a4 - это и есть наш ключ API. Этот ключ имеет бесконечное время использование (по идее) и доступ в любое время, поскольку при получении прав мы указали параметр offline __________________
Да, детка, я - Король Ящериц!!! Изменено HoldFast (26.05 / 18:33) (всего 6 раз) |
26.05.2013 / 05:22 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| Действие третьеТеперь собственно о том, как слать запросы. Здесь всё просто. Формируем запрос на https://api.vk.com/method/ с нужным методом, данными и полученным ключом API. Так как тема создана о поиске музыки, то о нём и продолжим. Пример запроса - https://api.vk.com/method/audi...mp;access_token=КЛЮЧЕсли всё было сделано верно, то мы получим в ответ json с результатом поиска Открыть спойлер Закрыть спойлер {"response":[721328,{"aid":89739465,"owner_id":79974539,"artist":"Rammstein","title":"Du hast","duration":233,"url":"http:\/\/cs5123.vk.me\/u82306429\/audios\/1554858f8666.mp3","lyrics_id":"5264896","album":"7790767"},{"aid":1510039,"owner_id":-98450,"artist":"Rammstein","title":"Sonne","duration":273,"url":"http:\/\/cs1028.vk.me\/u1146017\/audios\/82df5bfde02a.mp3","lyrics_id":"161679","album":"312723"},{"aid":1872989,"owner_id":-98450,"artist":"Rammstein","title":"Mein Herz Brennt","duration":279,"url":"http:\/\/cs1036.vk.me\/u902915\/audios\/cbe61966bdd9.mp3","lyrics_id":"161673","album":"312723"},{"aid":79711280,"owner_id":36945011,"artist":"Rammstein","title":"Ich Will (Я хочу)","duration":216,"url":"http:\/\/cs4658.vk.me\/u36945011\/audios\/55d13f93f8bd.mp3","lyrics_id":"5431039","album":"4743316"},{"aid":1491137,"owner_id":-98450,"artist":"Rammstein","title":"Mutter","duration":272,"url":"http:\/\/cs1025.vk.me\/u3367576\/audios\/f3369fdf1c4f.mp3","lyrics_id":"161680","album":"312723"},{"aid":2432989,"owner_id":-98450,"artist":"Rammstein","title":"Feuer Frei!","duration":191,"url":"http:\/\/cs1028.vk.me\/u1841649\/audios\/4ed5a6abc2de.mp3","lyrics_id":"161662","album":"312723"},{"aid":90024136,"owner_id":91190156,"artist":"d Dj KreCer","title":"Stereo love ( new remix 2011) [exclusive], rap,linkin park,rammstein,florida,популярные песни,dubstep,rolling stones,фристайл,раммштайн,offspring,enigma,сандра,энигма,ария,кипелов,systemofadown,nightwish,coldplay только на www.","duration":196,"url":"http:\/\/cs4815.vk.me\/u23334072\/audios\/d52c33622826.mp3","lyrics_id":"7570559"},{"aid":87203042,"owner_id":8419712,"artist":"Rammstein","title":"Amerika","duration":226,"url":"http:\/\/cs4838.vk.me\/u8419712\/audios\/92d47369bc41.mp3","lyrics_id":"7175957","album":"15014"},{"aid":87107760,"owner_id":3798445,"artist":"Rammstein","title":"Pussy","duration":239,"url":"http:\/\/cs5067.vk.me\/u50471345\/audios\/2e5fdf278a5f.mp3","lyrics_id":"3816805"},{"aid":2142000,"owner_id":-98450,"artist":"Rammstein","title":"Tier","duration":227,"url":"http:\/\/cs1036.vk.me\/u1888235\/audios\/de59d75874df.mp3","lyrics_id":"161669","album":"312617"},{"aid":98377165,"owner_id":4135145,"artist":"Rammstein","title":"Amour","duration":290,"url":"http:\/\/cs4598.vk.me\/u4135145\/audios\/8313d15dcbb7.mp3","lyrics_id":"6331703","album":"6252963"},{"aid":2433056,"owner_id":-98450,"artist":"Rammstein","title":"Rosenrot","duration":234,"url":"http:\/\/cs1028.vk.me\/u1841649\/audios\/f383fd5a5777.mp3","lyrics_id":"161661","album":"312888"},{"aid":2432901,"owner_id":-98450,"artist":"Rammstein","title":"Links 2 3 4","duration":216,"url":"http:\/\/cs1028.vk.me\/u1841649\/audios\/1328ac97d465.mp3","lyrics_id":"161664","album":"312723"},{"aid":96114199,"owner_id":55575045,"artist":"Rammstein (Рамштайн)","title":"Sonne (Солнце) ","duration":273,"url":"http:\/\/cs4782.vk.me\/u75434645\/audios\/6896c989f271.mp3","lyrics_id":"5821658"},{"aid":57820271,"owner_id":-6905922,"artist":"Rammstein","title":"Moskau(Москва)","duration":256,"url":"http:\/\/cs4208.vk.me\/u29225410\/audios\/417751c95582.mp3","lyrics_id":"2761925"},{"aid":2255676,"owner_id":-98450,"artist":"Rammstein","title":"Benzin","duration":227,"url":"http:\/\/cs1033.vk.me\/u3184352\/audios\/61520af3eda5.mp3","lyrics_id":"161665","album":"312888"},{"aid":90066368,"owner_id":10125249,"artist":"Rammstein","title":"Engel","duration":266,"url":"http:\/\/cs4263.vk.me\/u24191445\/audios\/e92e67bf4a65.mp3","lyrics_id":"7391619"},{"aid":62453265,"owner_id":17098300,"artist":"Rammstein","title":"Onne dich","duration":272,"url":"http:\/\/cs1271.vk.me\/u9302154\/audios\/3c7185b3fccd.mp3","lyrics_id":"4285472"},{"aid":73604454,"owner_id":9783999,"artist":"Rammstein","title":"Fruhling in Paris","duration":284,"url":"http:\/\/cs4762.vk.me\/u9783999\/audios\/289639410abf.mp3","lyrics_id":"3586866"},{"aid":78496607,"owner_id":14532519,"artist":"У-у-уе Ла-ла-ла","title":"Ла ла ла (Rammstein cover by Жанна Фриске ) ","duration":224,"url":"http:\/\/cs4498.vk.me\/u1944770\/audios\/bfada013964e.mp3","lyrics_id":"3874608"},{"aid":2155434,"owner_id":-98450,"artist":"Rammstein","title":"Reise, Reise","duration":251,"url":"http:\/\/cs1026.vk.me\/u2338493\/audios\/95f29e562636.mp3","lyrics_id":"161668","album":"312843"},{"aid":110497718,"owner_id":11772767,"artist":"Rammstein","title":"Mein Land [новая песня 2011]","duration":278,"url":"http:\/\/cs4991.vk.me\/u117902287\/audios\/a2b5d86905fb.mp3","lyrics_id":"11338707"},{"aid":84354218,"owner_id":1662745,"artist":"Rammstein","title":"Kokain","duration":190,"url":"http:\/\/cs4641.vk.me\/u58665345\/audios\/064c03bbf340.mp3","lyrics_id":"3317455","album":"34546937"},{"aid":87582052,"owner_id":91190156,"artist":"Tony Igy","title":"Клубняк 2010 Бомба, rap,linkin park,rammstein,florida,популярные песни,dubstep,rolling stones,фристайл,раммштайн,offspring,enigma,сандра,энигма,ария,кипелов,systemofadown,nightwish,coldplay ru только на www.","duration":278,"url":"http:\/\/cs4611.vk.me\/u52093972\/audios\/6537b2720d1c.mp3","lyrics_id":"5198750"},{"aid":86965397,"owner_id":8598045,"artist":"Rammstein","title":"Ich Tu Dir Weh","duration":301,"url":"http:\/\/cs4954.vk.me\/u8598045\/audios\/18e991e2b9f6.mp3","lyrics_id":"3790557"},{"aid":2155597,"owner_id":-98450,"artist":"Rammstein","title":"Mein Teil","duration":272,"url":"http:\/\/cs1026.vk.me\/u2338493\/audios\/98ad4f5030da.mp3","lyrics_id":"161666","album":"312843"},{"aid":92281250,"owner_id":19094080,"artist":"Rammstein","title":"Ohne Dich","duration":271,"url":"http:\/\/cs4826.vk.me\/u19094080\/audios\/17c154239728.mp3","lyrics_id":"7724371","album":"1994994"},{"aid":1872876,"owner_id":-98450,"artist":"Rammstein","title":"Wo bist du","duration":235,"url":"http:\/\/cs1036.vk.me\/u902915\/audios\/4386495ceb66.mp3","lyrics_id":"161675","album":"312888"},{"aid":6250315,"owner_id":-98450,"artist":"Rammstein","title":"Sehnsucht","duration":246,"url":"http:\/\/cs1102.vk.me\/u5000719\/audios\/2b2c5a0f09f5.mp3","lyrics_id":"161652","album":"312617"},{"aid":16853794,"owner_id":1584011,"artist":"Rammstein","title":"Ich will","duration":217,"url":"http:\/\/cs1086.vk.me\/u1584011\/audios\/34bde0124018.mp3","lyrics_id":"7889600"}]}Разобрать 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. Вычисляется он так: . Например, мы хотим поискать песни группы 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. Данные ключей написаны от балды __________________
Да, детка, я - Король Ящериц!!! Изменено HoldFast (27.05 / 16:45) (всего 7 раз) |
26.05.2013 / 05:42 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| Стоит ещё заметить что все ссылки на музыку привязаны к ip, от которого поступил запрос на API. По этому если кто-то решил написать что-то через промежуточный сервер, например на PHP скачивание музыки, то здесь необходим "скрипт-отдатчик", позже могу написать пример
__________________
Да, детка, я - Король Ящериц!!! |
26.05.2013 / 09:40 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| Теперь хочу затронуть тему VK API Music конкретно для PHP. На PHP есть уже готовая реализация в виде класса, остается только заполнить два поля с ID и слать запросы. Итак, всё что идёт ниже - это работа с классом, который прикреплён к посту. Инициализацияrequire 'vkapi.class.php';
$api_id = ''; // ID приложения
$vk_id = ''; // ID аккаунта
$token = ''; //access_token и вот так
$VK = new vkapi($api_id, $vk_id, $token);
Итак, объект создан и готов к работе. Далее всё просто - шлём запрос $resp = $VK->api('audio.search', array(
'q' => "Кипелов - На распутье", //сам запрос
'auto_complete' => '1', //автоматическое исправление, если запрос в виде "Еру Иуфедуы" (The Beatles)
'sort' => '2', // сортировка - по популярности
'count' => '50', //количество результатов в ответе
'offset' => '0' //оффсет (смещение, необходимо если делать постраничку или подгрузку на аяксе, ну это понятно)
));
$resp = это будет готовый объект simplexml; Вытягиваем первое название песни из результата поиска и url $title = $resp->audio[0]->title;
$artist = $resp->audio[0]->artist;
$url = $resp->audio[0]->url;
Понятно, что для обработки всего списка необходим цикл. Но на этом не всё. Если просто отдать URL пользователю, у него вылетит 404. Потому что ссылка привязана к IP сервера __________________
Да, детка, я - Король Ящериц!!! Изменено aNNiMON (11.05 / 13:34) (всего 3 раза)
Прикрепленные файлы: vkapi.class.php (1.17 кб.) Скачано 598 раз |
26.05.2013 / 09:44 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| А для того, чтобы пользователь мог скачать песню по полученному сервером URL'у можно пойти несколькими путями. Первый - это сохранить эту песню к себе на серв, а потом уже отдать юзеру. Это нам точно не подходит. И второй - использовать "промежуточный" скрипт, который отдаст нам этот файл. Вот собсвтенно пример такого скрипта: function vk_download($file) //$file = это и есть наш URL
{
$len = get_headers($file,1);
if ($len[0] == 'HTTP/1.1 200 OK') {
if (ob_get_level()) {
ob_end_clean();
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . md5($file) . '.mp3');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $len['Content-Length']);
readfile($file);
exit;
}
}
Как передать название песни, или url этому скрипту это уже решать разработчику __________________
Да, детка, я - Король Ящериц!!! Изменено HoldFast (26.05 / 09:58) (всего 2 раза) |
26.05.2013 / 09:55 | | vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Я уже чисто в адресной строке ручками запросы делал(xml) там выводит название композиции и под ней ссылка на загрузку
__________________
знает толк |
26.05.2013 / 09:55 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| vl@volk, Молодца
__________________
Да, детка, я - Король Ящериц!!! |
26.05.2013 / 11:35 | | ВитаминКО Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| HoldFast, а для j2me такое можно приспособить?
__________________
わからない!! |
26.05.2013 / 11:36 | | vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Да, я этим занялся
__________________
знает толк |
26.05.2013 / 11:38 | | HoldFast Пользователь Сейчас: Offline
Имя: Андрей Откуда: Великие Луки Регистрация: 18.04.2011
| ВитаминКО, Конечно. Только надо либа xml или json парсера, ну такие имеются
__________________
Да, детка, я - Король Ящериц!!! |
Всего сообщений: 176 Фильтровать сообщения Поиск по теме Файлы топика (2)
|