====== Node RED a Spotify ====== Zajímaly mě scénáře, kde mohu pracovat se Spotify. V seznamu pluginů jsem našel [[https://github.com/pckhib/node-red-contrib-spotify|nod-red-contrib-spotify]] a rozhodl jsem se ho vyzkoušet. Je pro začátek - vřele doporučuji číst dokumentaci pluginu - člověk si tím ušetří spoustu hodin pokusů a omylů. První náročná záležitost je autentizace. V Node Red jsou vidět u modulu k vyplnění tato políčka: * Client ID * Client secret * Scopes {{:it:iot:nodered:pasted:20230105-223055.png}} V [[https://flows.nodered.org/node/node-red-contrib-spotify|dokumentaci]] je napsáno, že nejprve má člověk přejít na tuto stránku: https://developer.spotify.com/dashboard/ . Přihlásit se, jít na nástěnku a vytvořit novou aplikaci a tím získám **Client ID** a **Client secret**. Ještě je důležité kliknout na **Edit settings** a nastavit **Redirect URIs**. Url musí být adresa Node RED serveru a musí se za to přidat **/spotify-credentials/auth/callback**. Nezapomenout, že pokud běží Node RED přes SSL, tak se musí uvést https. Takže například URL bude: http://192.168.1.20:1880/spotify-credentials/auth/callback Tím ovšem nemáme hotovo. Znovu se musíme vrátit do Node REDu a vyplnit **scopes**. Tedy práva, která chci aplikaci povolit - respektive o které žádá. Tady je přehled [[https://developer.spotify.com/documentation/general/guides/authorization/scopes/|Authorization Scopes]]. Takže do políčka Scopes například doplním toto: user-read-playback-state user-modify-playback-state user-read-currently-playing app-remote-control streaming playlist-read-private playlist-read-collaborative playlist-modify-private playlist-modify-public user-follow-modify user-follow-read user-read-playback-position user-top-read user-read-recently-played user-library-modify user-library-read Tím mohu autentizaci úspěšně dokončit. ===== Přehrávání audia ===== Původně jsem posílal do nodu Spotify json injecty, dle [[https://developer.spotify.com/documentation/web-api/reference/#/operations/transfer-a-users-playback|Spotify API dokumentace]]. To byl chybný krok a kdybych se tady vrátil hned k dokumentaci pluginu, ušetřil bych více času. Vyčítání zařízení připojených ke Spotify nebyl problém, ale zavolání funkce [[https://developer.spotify.com/documentation/web-api/reference/#/operations/transfer-a-users-playback|Transfer Playback]], která způsobuje přenesení audio streamu na konkrétní zařízení vykazovalo pořád chyby. Po nějakém čase hledání jsem narazil na diskusi, kde je psáno, že do nodu Spotify se má posílat nod funkce, ve které bude následující obsah: msg.params = [ ['319827319827391823981732'], /* DeviceIds Array (but it can only handle one device id) */ { play: true } /* Options Object */ ]; To rozbilo moji představu o vstupu jako Json objektech a vrátil jsem se k [[https://github.com/pckhib/node-red-contrib-spotify|dokumentaci]], kde je na konci napsáno, jak se vstupy mají používat - včetně doporučení o přečtení [[https://github.com/thelinmichael/spotify-web-api-node/blob/master/src/spotify-web-api.js|API description pluginu]]