====== 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]]