VK API

12
A
На сайте с 18.02.2009
Offline
46
8431

Всех с наступившим. Ребята подскажите, как с помощью api получить ссылку на конкретный mp3 файл контакта. Всю ночь, что-то пробовал, нифига не вышло.

---------- Добавлено 02.01.2013 в 15:18 ----------

Вот код, работать не хочет


<?php
/*
Предположим у нас есть форма поиска, которая передаёт переменную $query методом GET
Наша задача принять эту переменную, и подготовить к отправке
*/
$query = isset($_GET['query']) ? $query = urldecode($_GET['query']) : '';

/*
Если ваши страницы не в кодировке UTF-8 а в CP1251,
то строку поиска нужно сконвертировать в UTF-8
*/
$query = iconv('cp1251', 'utf-8', $query);

/*
Создадим массив с нужными для работы приложения переменными
Так же можно задать параметры касающиеся сортировки и текста к песне
*/
$set_vk = array(
'vk_key' => '', //ключ приложения
'vk_l' => '', //ID вашего аккаунта
'api_id' => '', //ID приложения
'count_results' => 150, //Сколько возвращать результатов
);

/*
Уникальная сигнатура запроса, согласно API
*/
$sig_vk = md5(
$set_vk['vk_l'].'api_id='.$set_vk['api_id'].'method=audio.searchq='.$query.'sort=0lyrics=0count='.$set_vk['count_results'].'offset=0test_mode=1v=3.0'
);


//Делаем POST-запрос к API, передавая подготовленные параметры
$xml_response = Send_Post(
'http://api.vkontakte.ru/api.php',
'api_id='.$set_vk['api_id'].'&method=audio.search&q='.$query.'&sort=0&lyrics=0&count='.$set_vk['count_results'].'&offset=0&test_mode=1&v=3.0&sig='.$sig_vk,
'http://vkontakte.ru/app'.$set_vk['api_id'].'_'.$set_vk['api_id'].''
);

if(empty($xml_response))
{
//API не дал ответа
}
else
{
//Парсим XML-ответ и получаем объект с результатами поиска
$parse = simplexml_load_string($xml_response);

//Полученый ответ можно обрабатывать как нам уже угодно

//Распечатать объект для изучения
echo '<pre>';
print_r($parse);
echo '</pre>';

//Или пройтись в цикле и выполнить некое действие
//Вывести Артист - Название (продолжительность) и ссылку на скачку файла
foreach($parse->audio as $key => $val)
{
echo $val->artist.' - '.$val->title.' ('.date('i:s', (int)$val->duration).')'."\n";
echo $val->url."\n\n";
}
}
?>




<?php
/*
Функция для отправки POST-запросов с использованием Curl
*/

function Send_Post($post_url, $post_data, $refer)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00');

$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>

Аккаунты на торрент-трекеры. () Тут дают деньги!!! (http://Pop-Bazar.com/registration.php?ref=2115)
TF-Studio
На сайте с 17.08.2010
Offline
334
#1

и что происходит?

в каком месте косяк?

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
A
На сайте с 18.02.2009
Offline
46
#2

Да в том, что когда отправляю запрос на список аудиозаписей, ответ Incorrect signature: sid & secret authorization

Куда копать, где смотреть не пойму, доки перечитал по нескольку раз.

---------- Добавлено 02.01.2013 в 16:16 ----------

Я предполагаю, битовых прав на метод не хватает, а как их получить хз.

S
На сайте с 08.08.2008
Offline
43
#3

Сначала проходим авторизацию:

CLIENT_ID - id Standalone приложения созданного тобой

SCOPE - права например audio

http://api.vk.com/oauth/authorize?client_id=CLIENT_ID&display=mobile&scope=SCOPE&response_type=token

Если успешная авторизаци -

в адресной строке увидешь: #access_token, скопируй его...

потом выполняем запрос к апи:


curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
$answer = curl_exec($ch);
curl_close($ch);
return $answer;
}

$res = connvk('https://api.vk.com/method/video.search.xml?q='.urlencode($_GET['q']).'&count=5&access_token=');
print $res;



Вверху скрипта добавить
@header("Content-type: text/xml; charset=utf-8");
" title="https://api.vk.com/method/audio.search.xml?q=НАЗВАНИЕ_ТРЕК&count=5&access_token=ТВОЙ_ТОКЕН

---------- Добавлено 02.01.2013 в 17:37 ----------

function connvk($link){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_REFERER, $link);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
$answer = curl_exec($ch);
curl_close($ch);
return $answer;
}

$res = connvk('https://api.vk.com/method/video.search.xml?q='.urlencode($_GET['q']).'&count=5&access_token=');
print $res;



Вверху скрипта добавить
@header("Content-type: text/xml; charset=utf-8");
" target="_blank">https://api.vk.com/method/audio.search.xml?q=НАЗВАНИЕ_ТРЕК&count=5&access_token=ТВОЙ_ТОКЕН

---------- Добавлено 02.01.2013 в 17:37 ----------

function connvk($link){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_REFERER, $link);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
$answer = curl_exec($ch);
curl_close($ch);
return $answer;
}

$res = connvk('https://api.vk.com/method/video.search.xml?q='.urlencode($_GET['q']).'&count=5&access_token=');
print $res;



Вверху скрипта добавить
@header("Content-type: text/xml; charset=utf-8");

A
На сайте с 18.02.2009
Offline
46
#4

Про авторизацию не понятно, как это на php реализовать?

S
На сайте с 08.08.2008
Offline
43
#5

$res = connvk('http://api.vk.com/oauth/authorize?client_id=99999&display=mobile&scope=offline,audio&response_type=token');

echo $res;

авторизовавшись один раз с правами offline, больше не нужно авторизовавыться. Работать будет по одному токену вечно.

$res = connvk('https://api.vk.com/method/audio.search.xml?q='.urlencode($_GET['q']).'&count=5&access_token=ВСТАВИТЬ_СВОЙ_ТОКЕН');

print $res;

Прегматчи на получение артиста/название трека/ссылки для скачивания с фильтрацией хлама из текста:

$pattern='|<artist>(.*)</artist>|U';

preg_match_all($pattern, $res, $art);

$ARTIST=implode('', $art[1]);

$vowels=array("id", "vk", ".com", "ontakte", ".ru", "http://", "www", ";", ":", "[", "|", "*");

$a=str_replace($vowels,"", $ARTIST);

$a1=preg_replace('/\[.*\]/', '', $a);

$a2=preg_replace('/\*.*\*/', '', $a1);

$pattern='|<title>(.*)</title>|U';

preg_match_all($pattern, $res, $track);

$track=implode('', $track[1]);

$t=str_replace($vowels,"", $track);

$t1=preg_replace('/\[.*\]/', '', $t);

$t2=preg_replace('/\*.*\*/', '', $t1);

$t3=preg_replace('/\(.*\)/', '', $t2);

$pattern='|<duration>(.*)</duration>|U';

preg_match_all($pattern, $res, $dur);

$duration=implode('', $dur[1]);

$pattern='|<url>(.*)</url>|U';

preg_match_all($pattern, $res, $url);

$url=implode('', $url[1]);

ECHO "".$a2." - ".$t3." ".date("i:s",$duration)." ".$url."";

A
На сайте с 18.02.2009
Offline
46
#6

Пробую получить токен по ссылке, ответ


{"error":"invalid_request","error_description":"application was deleted"}

client_id=99999 - это айдишник пользователя вконтакте, через которого парсить мп3?

S
На сайте с 08.08.2008
Offline
43
#7

https://api.vk.com/method/

audio.search.xml? - метод вызова(поиск музыки)

q=dj_вася - ключевое слово запроса

&count=5 -количество возвращаемых результатов

&access_token=ВСТАВИТЬ_СВОЙ_ТОКЕН полученный после авторизации здесь:

Приложение сначало создается здесь: http://vk.com/editapp?act=create

обязательно Standalone

берется ID приложения и вставляется в ссылку здесь:

http://api.vk.com/oauth/authorize?client_id=ID_ПРИЛОЖЕНИЯ&display=mobile&scope=offline,audio&response_type=token

после чего проходим по этой ссылке авторизацию, сохраняем токен , затем уже пользуемя ссылкой вывзова методов АПИ со своим токеном

A
На сайте с 18.02.2009
Offline
46
#8

Спасибо, заработало.

Подскажите, а как сделать задержку, я фором массив с компазициями перебираю, на которые мне нужно ссылки получить и в for вставил парсер с контакта, только парсит первый элемент. В общем как замедлить for? :)

A4
На сайте с 05.01.2012
Offline
55
#9

хД недавно с аналогичной проблеммкой встретился. Решил, но без запросов к апи - curl + мобильная версия vk.com, просто берем и парсим(надо дружить с файрбагом). Но имейте в виду - ссылки на .mp3 файлы во вконтакте уникальны для каждого отдельного ип. И то что играет у вам на одном компе, на другом играть не будет(ибо ип разный), а значит придется закачивать файл из вк и потом отдавать его пользователю. Не знаю как там с видео - не делал еще пока парсера, но с аудио так. Нагрузку на хостинг аццки повышает и жрет трафик такой скрипт(закачка из вк по прямой ссылке + отдача пользователю). Поэтому пока на выделенку не перееду - смысла использования скрипта не вижу.

---------- Добавлено 02.01.2013 в 22:37 ----------

Вообще интереснее другое - как бы яндекс музыку парсануть....)

http://elisto05e.music.yandex.ru/get-mp3/4bd9e3dc769b56ccfe7f9b6476b5e328/50e47cb2/9/data-0.6:27117199574:5318947?track-id=4786680&from=service-top

- ссылка на файл.

- это /50e47cb2/9/data-0.6:27117199574:5318947?track-id=4786680&from=service-top находится в информации о файле и прочем. А вот 4bd9e3dc769b56ccfe7f9b6476b5e328 - откуда берется ?) На хабре читал что некий скрипт генерирует такую цифровую последовательность из имени и чего-то там еще. http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDEQFjAA&url=http%3A%2F%2Fhabrahabr.ru%2Fpost%2F133578%2F&ei=FH7kUK2VM8ii4gTc4oHADA&usg=AFQjCNEty8uSD9l1MUzBmQhYCj6IGZlW5g&bvm=bv.1355534169,d.bGE - тут читайте сами) Я не специалист по криптографии, так что на дело это пока подзабил.

A
На сайте с 18.02.2009
Offline
46
#10

Вопрос по поводу разной ссылки на разный IP я решил.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий