Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Поиск музыки в Вконтакте

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      instalator last edited by

      Сделал скриптик который ищет песню на сайте вконтакте, после поиска передаю url на медиацентр и начинается воспроизведение.

      Поиск организовал голосовым запросом.

      ДОБАВЛЕНО:

      В ВК создаем Standalone-приложение.

      Ссылка для получения tokena

      https://oauth.vk.com/authorize?client_id=ID-приложения:&scope=audio,offline&redirect_uri=http://api.vkontakte.ru/blank.html&response_type=token
      
      createState('vkontakte.search_track', '');
      var urlmp3 = '';
      var url = 'https://api.vk.com/method/';
      var request = require('request');
      var token = 'e8cc075848cc519,,,,,,,,,,,,,,,,,,,,,,10e7f19104d4b';
      
      on({id: 'javascript.0.vkontakte.search_track', change: 'any'}, function (obj) {
          if(obj.newState.val !== '' || typeof obj.newState.val !== "undefined"){
              sendCommandVK(obj.newState.val);
              log('URL найденного трека на VK: '+ urlmp3);
          }else{log('Не задана команда.');}
      });
      // Функция отправки команды на сайт VK
      function sendCommandVK(name){
          log('Поиск трека в VK: '+name);
          url = url+'audio.search.xml?access_token='+token+'&count=1&q='+name+'&sort=2&v=5.40';
          //&auto_complete=1
          var options = {
              url: url,
          };
          // Отправка данных методом POST.
          request.post(options, function (err, status, body, callback) {
                  log('Ответ от VK: '+body);
              // Парсим данные
                  urlmp3 = body.match(/\<url\>(.*)\<\/url\>/g);
                  url_search = urlmp3.toString().replace(/\<url>/g, "").replace(/\<\/url>/g, "");
                  log('URL найденного трека: '+ url_search);
                      if (getState('javascript.0.Scenes.Kodi').val == 'false'){
                          setState('javascript.0.Scenes.Kodi', 'true');
                          setTimeout(function() {setState('javascript.0.kodi.PlayerOpen', url_search);}, 10000);
                      }
                      if (getState('javascript.0.Scenes.Kodi').val == 'true'){
                          setState('javascript.0.kodi.PlayerOpen', urlmp3);
                      }
          });
      }</url></url\>
      
      1 Reply Last reply Reply Quote 0
      • V
        vtec last edited by

        Спасибо, как нибудь затестю.

        Еще лучше было бы воспроизвести музыку из своего playlist'а вконтакте

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          Заменил код в посте.
          @vtec:

          Спасибо, как нибудь затестю.

          Еще лучше было бы воспроизвести музыку из своего playlist'а вконтакте `
          Про свой плейлист я тоже думаю как сделать, поставил на коди дополнение ВК, но оно зараза не хочет автоматом воспроизводить следующий трек, т.е. один проиграл и молчит.

          Из ВК свой плейлист вытянуть не проблема, нада его передать в Коди плейлистом, команды такие есть но еще не занимался, если первым сделаю. обязательно выложу.

          1 Reply Last reply Reply Quote 0
          • I
            instalator last edited by

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

            BlueFox на сайте есть несколько модулей для ВК https://www.npmjs.com/search?q=vkontakte

            Как их прикрутить можно к брокеру?

            Поставил на телефон приложение Асистент Дуся, там куча настроек, умеет искать в ВК и транслировать звук на DLNA плеер(в том числе KODI).

            не нравится только что в офлайне текст не распазнает, + там есть настройки для управления умным домом на OpenHub, может есть смысл сделать драйвер для конвертации запросов? так же работает с приложением Tasker/.

            1 Reply Last reply Reply Quote 0
            • I
              instalator last edited by

              @instalator:

              Заменил код в посте.
              @vtec:

              Спасибо, как нибудь затестю.

              Еще лучше было бы воспроизвести музыку из своего playlist'а вконтакте `
              Про свой плейлист я тоже думаю как сделать, поставил на коди дополнение ВК, но оно зараза не хочет автоматом воспроизводить следующий трек, т.е. один проиграл и молчит.

              Из ВК свой плейлист вытянуть не проблема, нада его передать в Коди плейлистом, команды такие есть но еще не занимался, если первым сделаю. обязательно выложу. `
              Никак немогу найти инфу как передать title для файла из ссылки.

              jsonrpc?request={"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"file":"http://cast.radiogroup.com.ua:8000/avtoradio"}}}
              

              Вообщем с плейлистом из контакта получается либо парсить, потом конвертить в M3U и сохранять локально, после чего в Kodi передавать ссыль на плейлист. Либо в цикле добавлять по одному треку

              jsonrpc?request={"jsonrpc":"2.0","id":1,"method":"Playlist.Add","params":{"playlistid":1,"item":{"file":"http://cast.radiogroup.com.ua:8000/avtoradio"}}}
              

              Вот только в плейлисте они без названий будут тогда. да и в плейлисте ВК у меня щас больше 900 треков).

              Так что буду двигатся в сторону создания плейлиста локальным файлом.
              1518_pv.txt

              1 Reply Last reply Reply Quote 0
              • I
                instalator last edited by

                Добавлено:

                • Обновил код для плейлиста в формате PLS

                • Добавил проверку, Если плейлист не изменился с прошлого раза то открываем старый.

                Парсим плейлист пользователя из ВК.

                В vkontakte.search_playlist передаем id пользователя (ваш).

                Код скрипта ВК:

                `createState('vkontakte.search_playlist', '');
                createState('vkontakte.playlist_count', '');
                var url = 'https://api.vk.com/method/';
                var request = require('request');
                var token = 'db9601677f70,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0471cbfd1b2b044a91f01';
                on({id: 'javascript.0.vkontakte.search_playlist', change: 'any'}, function (obj) {
                    if(obj.newState.val !== '' || typeof obj.newState.val !== "undefined"){
                        sendsearch_playlist(obj.newState.val);
                    }else{log('Не задана команда.');}
                });
                
                /*****************************Загрузка плейлиста***************************************/
                function sendsearch_playlist(user_id){
                    log('Плейлист пользователя VK: '+ user_id);
                    url = url+'audio.get?user_id='+user_id+'&access_token='+token+'&v=5.40';
                    var options = {
                        url: url,
                    };
                    // Отправка данных методом POST.
                    request.post(options, function (error, response, body, callback) {
                        if (!error && response.statusCode == 200) {
                        var playlist = '';
                        log('Код ответа от сервера'+response.statusCode);
                               log('Ответ от VK: '+body);
                               var jsonData = JSON.parse(body);
                               count_playlist = jsonData.response.items.length;
                               log('Длинна JSON' + count_playlist);
                               if (jsonData.response.items.length != getState('vkontakte.playlist_count').val){
                                   for (var i = 0; i < jsonData.response.items.length; i++) {
                                        if (i === 0 || i == '0'){
                                            playlist += '[playlist]\r\n'+'Title'+(i+1)+'='+jsonData.response.items[i].artist+' - '+
                                            jsonData.response.items[i].title+'\r\nFile'+(i+1)+'='+jsonData.response.items[i].url+'\r\nLength'+(i+1)+'=-1\r\n';
                                        }
                                        else {
                                            playlist += 'Title'+(i+1)+'='+jsonData.response.items[i].artist+' - '+
                                            jsonData.response.items[i].title+'\r\nFile'+(i+1)+'='+jsonData.response.items[i].url+'\r\nLength'+(i+1)+'=-1\r\n';
                                        }
                                    } 
                                    playlist +='NumberOfEntries='+jsonData.response.items.length+'\r\nVersion=2';
                                    setState('vkontakte.playlist_count', count_playlist);
                                    fs.writeFileSync('\\\\SERVER-PC\\SERVER\\plst_VK.pls', playlist);
                                        log('Файл успешно сохранен');
                                        setState('javascript.0.kodi.PlayerOpenPlaylist', 'smb://SERVER-PC//SERVER/plst_VK.pls');
                               }
                               else{
                                   setState('javascript.0.kodi.PlayerOpenPlaylist', 'smb://SERVER-PC//SERVER/plst_VK.pls');
                               }
                        }
                    });
                }` 
                
                Код скрипта Коди:
                `~~[code]~~createState('kodi.PlayerOpenPlaylist', '');
                var url = 'http://192.168.1.10'; //адрес коди
                var request = require('request');
                
                on({id: 'javascript.0.kodi.PlayerOpenPlaylist', change: 'any'}, function (obj) {
                    if(obj.newState.val !== '' || typeof obj.newState.val !== "undefined"){
                        sendPlayerOpenPlaylist(obj.newState.val);
                    }else{
                        log('Не задана команда.');
                    }
                });
                
                function sendPlayerOpenPlaylist(url_search){
                    log('Отправлена ссылка на плейлист Kodi: '+url_search);
                    var options = {
                        url: url+'/jsonrpc',
                        json: true, //{"jsonrpc":"2.0","id":1,"method":"Playlist.Clear","params":{"playlistid":0}}
                        body: {
                            "jsonrpc":"2.0",
                            "method": "Playlist.Clear",
                            "params": {"playlistid":0},
                            "id":1
                        },
                    };
                    request.post(options, function (err, status, body) {
                        log('Ответ от Kodi: '+JSON.stringify(body));
                                var options = {
                                url: url+'/jsonrpc',
                                json: true,  //{"jsonrpc":"2.0","id":1,"method":"Playlist.Add","params":{"playlistid":0,"item":{"directory":"C:\\temp2\\test\\test.m3u","recursive":true}}}
                                    body: {
                                        "jsonrpc":"2.0",
                                        "method": "Playlist.Add",
                                        "params": {"playlistid":0,"item":{"directory":url_search,"recursive":true}},
                                        "id":1
                                    },
                                };
                                request.post(options, function (err, status, body) {
                                    log('Ответ от Kodi: '+JSON.stringify(body));
                                            var options = {
                                            url: url+'/jsonrpc', //
                                            json: true,  //{"jsonrpc":"2.0","id":1,"method":"Player.Open","params":{"item":{"playlistid":0,"position":0}}}
                                                body: {
                                                    "jsonrpc":"2.0",
                                                    "method": "Player.Open",
                                                    "params": {"item":{"playlistid":0,"position":0}},
                                                    "id":1
                                                },
                                            };
                                            request.post(options, function (err, status, body) {
                                                log('Ответ от Kodi: '+JSON.stringify(body));
                                                setState('javascript.0.kodi.ExecuteAction', 'fullscreen');
                                            });
                                });   
                    });   
                [/code]`[/i][/i][/i][/i][/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • V
                  vtec last edited by

                  Kodi supports PLS, Winamp M3U, Cue Sheets, and Kodi Smart Playlist (XSP) playlists.

                  Нужно пробовать другой playlist.

                  1 Reply Last reply Reply Quote 0
                  • I
                    instalator last edited by

                    @vtec:

                    Kodi supports PLS, Winamp M3U, Cue Sheets, and Kodi Smart Playlist (XSP) playlists.

                    Нужно пробовать другой playlist. `
                    Это не проблема, есть время попробовать эти типы плейлистов? у меня ночь я спать.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    930
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    2233
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo