Страница 1 из 7

Прослушивание музыки Вконтакте

Добавлено: Ср окт 15, 2014 5:58 pm
Dark_Veter
Набросал тут не большой скрипт для прослушивания музыки Вконтакте. Может быть кому-то интересно будет.

Код: Выделить всё

if ($params['VALUE']) {
    getURL('http://127.0.0.1/rc/?command=vlc_close', 0);   
    $token = 'fd203e6673e047c042cd7357284abcd6cb98e8e5f9eae811111111111111111111111111111111111111';
    if (isset($params['COUNT'])) {
        $trackCount = $params['COUNT'];
    } else {
        $trackCount = 1;
    }
    if ($params['MODE'] == 0) {
        $uid = $params['VALUE'];
        $link = 'https://api.vk.com/method/audio.get.xml?owner_id=' . urlencode($uid) . '&access_token=' . $token;
    } elseif ($params['MODE'] == 1) {
        $trackName = $params['VALUE'];
        $link = 'https://api.vk.com/method/audio.search.xml?q=' . urlencode($trackName) . '&count=' . $trackCount . '&auto_complete=1&sort=2&access_token=' . $token;
    } elseif ($params['MODE'] == 2) {
        $performerName = $params['VALUE'];
        $link = 'https://api.vk.com/method/audio.search.xml?q=' . urlencode($performerName) . '&count=' . $trackCount . '&auto_complete=1&performer_only=1&sort=2&access_token=' . $token;
    } else {
        if (isset($params['ALBUM'])) {
            $uid = $params['VALUE'];
            $link = 'https://api.vk.com/method/audio.getAlbums.xml?owner_id=' . urlencode($uid) . '&access_token=' . $token;
            $res = getURL($link,0);

            $xml = new SimpleXMLElement($res);

            foreach ($xml->album as $item) {
                if ($item->title == $params['ALBUM']) {
                    $albumId = $item->album_id;
                    break;
                }
            }
            $link = 'https://api.vk.com/method/audio.get.xml?owner_id=' . urlencode($uid) . '&access_token=' . $token . '&album_id=' . $albumId;
        }
    }

    $res = getURL($link,0);

    $xml = new SimpleXMLElement($res);

    $tempPlaylist = sys_get_temp_dir() .DIRECTORY_SEPARATOR. "playlist.m3u";
    $fp = fopen($tempPlaylist, "w");
    fwrite($fp, '#EXTM3U' . "\r\n");

    foreach ($xml->audio as $item) {
        fwrite($fp, '#EXTINF:' . $item->duration . ', ' . $item->artist . ' - ' . $item->title . "\r\n");
        fwrite($fp, $item->url . "\r\n");
        fwrite($fp, "\r\n");
    }

    fclose($fp);

    getURL('http://127.0.0.1/rc/?command=vlc_play&param='.$tempPlaylist, 0);
}
Я создал шаблон поведения: (В|в)ключи песню (.+), там написал:

Код: Выделить всё

runScript("VkMusic", array('VALUE'=>$matches[2], 'MODE'=>1));
VkMusic - Это имя сценария. Например при запросе Включи песню воспоминания о былой любви ищет вконтакте первую попавшуюся песню с таким названием и включает ее.
Позволяет так же прослушать плейлист пользователя.

Код: Выделить всё

runScript("VkMusic", array('VALUE'=>Ид_Пользователя, 'MODE'=>0)); 
Если в MODE передать 2, тогда поиск будет осуществляться по исполнителю, например:

Код: Выделить всё

runScript("VkMusic", array('VALUE'=>'Король и шут', 'MODE'=>2, 'COUNT'=>'10')); 
Будет проигрывать 10 песен "короля и шута".

Можно так же проиграть альбом пользователя.

Код: Выделить всё

runScript("VkMusic", array('VALUE'=>ID_ПользователяВК, 'MODE'=>3, 'ALBUM'=>НазваниеАльбома)); 
Список параметров:
VALUE - Идентификатор пользователя в ВК (или исполнитель для MODE = 2)
MODE - Параметры поиска (0 - Плейлист пользователя, 1 - Поиск конкретной песни, 2 - Поиск по исполнителю, 3 - Альбом пользователя)
COUNT - это количество возвращаемых треков и параметр
ALBUM - название альбома пользователя.

Так же для корректной работы желательно получить токен, для этого надо перейти по ссылке http://oauth.vk.com/authorize?client_id ... type=token и скопировать из адресной строки access_token. Полученный токе необходимо присвоить переменной $token.

Re: Прослушивание музыки Вконтакте

Добавлено: Ср окт 15, 2014 6:02 pm
Ivan
Хорошо бы если бы это Сергей в облако добавил

Re: Прослушивание музыки Вконтакте

Добавлено: Ср окт 15, 2014 10:49 pm
sergejey
А откуда token такой? Это какое-то приложение?

Насчёт облака -- к сожалению, не получится, т.к. из облака нельзя запускать приложения.

Re: Прослушивание музыки Вконтакте

Добавлено: Чт окт 16, 2014 12:11 am
Dark_Veter
Да, в контакте создается standalone приложение, затем получается токен.
http://oauth.vk.com/authorize?client_id ... type=token
Вместо 11111111 вставляем id приложения, затем получаем ссылку из которой берем access_token.

Re: Прослушивание музыки Вконтакте

Добавлено: Чт окт 16, 2014 11:02 am
sergejey
Dark_Veter писал(а):Да, в контакте создается standalone приложение, затем получается токен.
http://oauth.vk.com/authorize?client_id ... type=token
Вместо 11111111 вставляем id приложения, затем получаем ссылку из которой берем access_token.
А это нужно каждому делать или можно использовать один на всех?

Re: Прослушивание музыки Вконтакте

Добавлено: Чт окт 16, 2014 11:06 am
Dark_Veter
Я думаю можно один на всех использовать, хотя если не работает можно свой токен получить. Я проверял на нескольких страницах, все работает, но особо не углублялся. Можно не создавать приложение а использовать это, ид приложения: 4590306.

Re: Прослушивание музыки Вконтакте

Добавлено: Чт окт 16, 2014 11:13 am
sergejey
Ещё вопрос -- нельзя ли вместо sendData($link) использовать getURL($link,0) ? Если будет работать, то можно сократить сценарий.

Re: Прослушивание музыки Вконтакте

Добавлено: Чт окт 16, 2014 11:14 am
Dark_Veter
sergejey писал(а):Ещё вопрос -- нельзя ли вместо sendData($link) использовать getURL($link,0) ? Если будет работать, то можно сократить сценарий.
Можно попробовать, я проверю отпишусь.

UPD: Спасибо, getURL работает. Поправил код в первом посте.

Re: Прослушивание музыки Вконтакте

Добавлено: Пт окт 17, 2014 8:11 am
ErmolenkoM
Круто!
Давно хотел такую штуку!
В скрипт внес мелкие косметические правки: у меня линух - слеши в другую сторону, у меня VLC - over HTTP
Но главное - работает.
Теперь хотелки:
1. Что бы искало и возвращало МНОГО песен, то есть ищем "классическая музыка" и приезжает много результатов, дальше уже сам плеер мотает плейлист.
2. Слушать конкретный плейлист пользователя.

За проделанную работу ОГРОМНОЕ спасибо.

Re: Прослушивание музыки Вконтакте

Добавлено: Пт окт 17, 2014 11:39 am
Dark_Veter
msh555 писал(а): Теперь хотелки:
1. Что бы искало и возвращало МНОГО песен, то есть ищем "классическая музыка" и приезжает много результатов, дальше уже сам плеер мотает плейлист.
2. Слушать конкретный плейлист пользователя.

За проделанную работу ОГРОМНОЕ спасибо.
1. Чтобы возвращало много песен нужно поправить параметр &count в первой ссылке, это и есть количество возвращаемых аудиозаписей. Поиска по жанру к сожалению нету.
2. С плейлистами посмотрю отдельно, отпишусь по результатам, правильно ли я понимаю, что плейлист - это альбом пользователя ВК?