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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

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

Сообщение Dark_Veter » Ср окт 15, 2014 5:58 pm

Набросал тут не большой скрипт для прослушивания музыки Вконтакте. Может быть кому-то интересно будет.

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

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.
Последний раз редактировалось Dark_Veter Ср авг 26, 2015 5:56 pm, всего редактировалось 7 раз.
За это сообщение автора Dark_Veter поблагодарили (всего 7):
Vit (Ср окт 15, 2014 8:55 pm) • skysilver (Ср окт 15, 2014 10:32 pm) • ErmolenkoM (Пт окт 17, 2014 7:04 am) • sregeipt (Пт окт 17, 2014 1:08 pm) • mirsum (Пн дек 29, 2014 4:01 pm) • Amarok (Чт авг 27, 2015 8:32 am) • AndrewS (Ср июл 13, 2016 7:25 pm)
Рейтинг: 8.14%
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

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

Сообщение Ivan » Ср окт 15, 2014 6:02 pm

Хорошо бы если бы это Сергей в облако добавил
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Ср окт 15, 2014 10:49 pm

А откуда token такой? Это какое-то приложение?

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

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

Сообщение Dark_Veter » Чт окт 16, 2014 12:11 am

Да, в контакте создается standalone приложение, затем получается токен.
http://oauth.vk.com/authorize?client_id ... type=token
Вместо 11111111 вставляем id приложения, затем получаем ссылку из которой берем access_token.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Чт окт 16, 2014 11:02 am

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

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

Сообщение Dark_Veter » Чт окт 16, 2014 11:06 am

Я думаю можно один на всех использовать, хотя если не работает можно свой токен получить. Я проверял на нескольких страницах, все работает, но особо не углублялся. Можно не создавать приложение а использовать это, ид приложения: 4590306.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Чт окт 16, 2014 11:13 am

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

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

Сообщение Dark_Veter » Чт окт 16, 2014 11:14 am

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

UPD: Спасибо, getURL работает. Поправил код в первом посте.
Debian GNU/Linux 7.9 (wheezy), версия 0.9.0b, Connect
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

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

Сообщение ErmolenkoM » Пт окт 17, 2014 8:11 am

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

За проделанную работу ОГРОМНОЕ спасибо.
За это сообщение автора ErmolenkoM поблагодарил:
Otto (Чт апр 07, 2016 8:46 pm)
Рейтинг: 1.16%
aka msh555
Cubian на Cubietruck, Connect
Dark_Veter
Сообщения: 295
Зарегистрирован: Вт апр 23, 2013 5:16 pm
Откуда: Брянск
Благодарил (а): 18 раз
Поблагодарили: 94 раза

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

Сообщение Dark_Veter » Пт окт 17, 2014 11:39 am

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

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