Hallo,
Kan iemand mij verder op weg brengen / spotten waar het fout gaat.
Ik ben met een projectje bezig waarbij ik wil weergeven wat er via spotify wordt afgespeeld. (nummer, album, artiest) Deze informatie wil ik in een string op de ESP8266 hebben, welke vervolgens gebruikt wordt om de verdere elektronica aan te sturen.
Aangezien ik geen flauw idee heb hoe ik deze info van spotify kan krijgen, ben ik bij het googlen het volgende tegengekomen.
https://github.com/ThingPulse/esp8266-spotify-remote
Hierbij het idee dit als basis te gebruiken voor het spotify deel werkend te krijgen, waarbij het display deel eruit te slopen en vervolgens mij eigen deel eraan toe te voegen. Wat ik nu probeer van elkaar te krijgen is de communicatie met Spotify op gang te krijgen, waarna ik de song info ed. kan doorsturen naar de seriële monitor.
Wat heb ik al en wat werkt al:
- Het elektronica deel werkt al, ik heb alleen nog de informatie van spotify nodig.
- Verbinden met wifi
- Spotify app aangemaakt, dus client id en client secred
De stapjes onder "Get Access to the Spotify API" heb ik doorlopen, want daar komen de Client ID en Client Secret vandaan. Welke natuurlijk samen met de WiFi gegegvens in Setting.h zijn ingevuld.
Het deel van de calback blijkt ook te werken, want wanneer de seriële monitor aangeeft "Open browser at "http://esp8266.local". Als ik deze benader met de browser dan komt het bericht "Succesfully authentiated This device with Spotify. Restart your device now" afkomstig van "String SpotifyClient::startConfigPortal()" in SpotifyClient.cpp. Hierna wordt gewoon de loop doorlopen.
Hieronder de output op de seriële monitor van de gehele code met libaries van github, alleen de gegevens in setting.h heb ik ingevuld.
Tussen "<<<" en ">>>" de info dit ik heb vervangen en cursief welke ik heb bijgevoegd in de onderstaande output
connecting to WiFi.
WiFi connected
IP address: <<<123.456.7.89>>>
mDNS responder started
Loading config
Failed to open config file
No refresh token found. Requesting through browser
Open browser at http://esp8266.local
<<<Hier blijf de code elke reset hangen totdat het linkje wordt benaderd, dit moet anders mogelijk zijn, maar voor nu geen probleem. Als ik het linkje in de browser benader krijg ik "Succesfully authentiated This device with Spotify. Restart your device now" te zien.>>>
WiFi not connected!
HTTP server started
<<<Client ID>>>
http%3A%2F%2Fesp8266.local%2Fcallback%2F
Code: <lange code>-f
Requesting URL: POST /api/token HTTP/1.1
Host: accounts.spotify.com
Authorization: Basic <<<lange code>>>=
Content-Length: 425
Content-Type: application/x-www-form-urlencoded
Connection: close
grant_type=authorization_code&code=<<<hele lange code>>>-f&redirect_uri=http%3A%2F%2Fesp8266.local%2Fcallback%2F
Refresh token:
Access Token:
Loop
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HREF:
--------Response Code: 0
--------Free mem: 25000
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HREF:
--------Response Code: 0
--------Free mem: 25672
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HREF:
--------Response Code: 0
--------Free mem: 25504
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HREF:
--------Response Code: 0
--------Free mem: 25336
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HREF:
--------Response Code: 0
--------Free mem: 25168
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
Wat opvalt is dat nadat "http://esp8266.local" wordt benaderd, "WiFi not connected!" naar de seriële monitor wordt gestuurd. Wat raar is wat mijn router geeft aan dat deze nog verbonden is. Verder achter "Refresh token:" en "Access Token:" staat niks, dit lijkt mij niet de bedoeling, maar heb nog niet kunnen achterhalen waarom dit zo is. Verder staat er "Authorization: Bearer ", waarachter ook de acesstoken geprint moet worden. (Line 59-64 in SpotifyClient.cpp). Dus het opzetten van een communicatie met Spotify gaat gewoon niet zoals het zou moeten.
Het doel is natuurlijk iets van informatie weer te kunnen geven, hiervoor heb een van de onderstaande regels code toegevoegd aan de loop() om zo te proberen of er iets wordt ontvangen.
Serial.print("progressMs "); Serial.println(data.progressMs);
Serial.print("durationMs "); Serial.println(data.durationMs);
Serial.print("title "); Serial.println(data.title);
Serial.print("artistname "); Serial.println(data.artistName);
Serial.print("isPlaying "); Serial.println(data.isPlaying);
Serial.print("isPlayerActive "); Serial.println(data.isPlayerActive);
Onderstaand de regels welke op de seriële monitor worden weergegeven.
progressMs 0
durationMs 0
title
artistname
isPlaying 0
isPlayerActive 0
Als iemand nog info heeft om op een andere methode deze info stand-allone van spotify te krijgen, ben ik natuurlijk geinteresserd.
Zo kijkend naar de output, zonder een blik op de code te hebben geworpen gaat het hier fout:
Requesting URL: POST /api/token HTTP/1.1
Host: accounts.spotify.com
Authorization: Basic <<<lange code>>>=
Content-Length: 425
Content-Type: application/x-www-form-urlencoded
Connection: close
grant_type=authorization_code&code=<<<hele lange code>>>-f&redirect_uri=http%3A%2F%2Fesp8266.local%2Fcallback%2F
Refresh token:
Access Token:
Loop
Je krijg 'gewoon' geen access en refresh token terug, de library is 6 maanden oud en api's zijn vaak allang aangepast. Toevallig hier al naar gekeken: https://developer.spotify.com/documentation/web-api/quick-start/
Staat precies hoe de authenticatie in zijn werk hoort te gaan.
Op 9 december 2018 03:09:14 schreef DeTijdTikt:
[...]
Je krijg 'gewoon' geen access en refresh token terug, de library is 6 maanden oud en api's zijn vaak allang aangepast. Toevallig hier al naar gekeken: https://developer.spotify.com/documentation/web-api/quick-start/
Staat precies hoe de authenticatie in zijn werk hoort te gaan.
ik heb via de waybackmachine de pagina https://developer.spotify.com/documentation/web-api/quick-start/ en https://developer.spotify.com/documentation/general/guides/authorizati… van 23 juni 2018 vergeleken met de huidige versie, maar deze blijken exact hetzelfde te zijn.
Ik heb ondertussen stap voor stap doorlopen wat er gebeurt, volgens mij gaat het nog ergens met de tokens mis.
1. The third party application needs to get credentials. Spotify calls these credentials Client Id and Client Secret.
2. With these credentials the application requests access to the users resource. If this is the first time the user has to agree to it on a web page. If everything is OK Spotify redirects the web page back to the application together with a temporary access code
3. With this access code the application requests another access code which is valid for an hour. Together with this one hour token you also get a refresh token.
4. Now the application can start using the API by sending the access code and it’s own credentials to Spotify
5. Once the access code runs out the application can use the refresh token to request a new access code
1
Eerste uitvoer op de seriele monitor
Opmerkingen: er wordt gevraagd de esp8266 via de browser te benaderen, waarna er "WiFi not connected!" staat, wat raar is wat mijn router geeft aan dat deze nog verbonden is. Als deze niet meer verbonden zou zijn, loopt de code natuurlijk na het benaderen van het linkje ook niet door.
connecting to WiFi
.
WiFi connected
IP address:
<<<123.456.7.89>>>
mDNS responder started
Loading config
Failed to open config file
No refresh token found. Requesting through browser
Open browser at http://esp8266.local
WiFi not connected!
HTTP server started
2
Ik ga via de browser naar http://esp8266.local, hier krijg ik direct een redirect naar "Succesfully authentiated This device with Spotify. Restart your device now". (deze zin, staat in SpotifyClient.cpp op regel 289.) De url is hierbij gewijzigd naar "http://esp8266.local/callback/?code=<<<lange code>>>"
Als ik kijk naar de "Authorization Code Flow" onder 1. example.
If the user accepts your request, the response query string,
for example https://example.com/callback?code=NApCCg..BkWtQ&state=profile%2Fac…, contains the following parameters:
QUERY PARAMETER VALUE
code An authorization code that can be exchanged for an access token.
state The value of the state parameter supplied in the request.If the user does not accepted your request or an error has occurred, the response query string,
for example https://example.com/callback?error=access_denied&state=STATE, contains the following parameters:
QUERY PARAMETER VALUE
error The reason authorization failed, for example: “access_denied”
state The value of the state parameter supplied in the request.
Aangezien de redirect naar "/callback?code=" is en niet naar "/callback?error=", kan ik hieruit afleiden dat ik met het benaderen van http://esp8266.local toestemming heb gegeven.
3
Uitvoer in de seriële monitor na het benaderen met de browser
De <<<lange code>>> is hetzelfde als in de redirect link word weergegeven
<<<Client ID>>>
http%3A%2F%2Fesp8266.local%2Fcallback%2F
Code: <<<dezelfde lange code als in de redirect link>>>
Requesting URL: POST /api/token HTTP/1.1
Host: accounts.spotify.com
Authorization: Basic <<<andere lange code>>>=
Content-Length: 425
Content-Type: application/x-www-form-urlencoded
Connection: close
4
vervolg van de seriële output
Opmerkingen: Achter "Refresh token:" en "Access Token:" staat niks
grant_type=authorization_code&code=<<<weer dezelfde lange code>>>redirect_uri=http%3A%2F%2Fesp8266.local%2Fcallback%2F
Refresh token:
Access Token:
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
5
vervolg van de seriële output
HREF:
--------Response Code: 0
--------Free mem: 25000
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
https://developer.spotify.com/documentation/general/guides/authorizati…
An alternative way to send the client id and secret is as request parameters (client_id and client_secret) in the POST body, instead of sending them base64-encoded in the header. On success, the response from the Spotify Accounts service has the status code 200 OK in the response header, and the following JSON data in the response body:KEY VALUE TYPE VALUE DESCRIPTION access_token string An access token that can be provided in subsequent calls, for example to Spotify Web API services. token_type string How the access token may be used: always “Bearer”. scope string A space-separated list of scopes which have been granted for this access_token expires_in int The time period (in seconds) for which the access token is valid. refresh_token string A token that can be sent to the Spotify Accounts service in place of an authorization code. (When the access code expires, send a POST request to the Accounts service /api/token endpoint, but use this code in place of an authorization code. A new access token will be returned. A new refresh token might be returned too.)
Die parsing code in de library is een beetje goedkoop:
Regel 247 in SpotifyClient.cpp
int size = 0;
client.setNoDelay(false);
// while(client.connected()) {
do {
while((size = client.available()) > 0) {
c = client.read();
if (c == '{' || c == '[') {
isBody = true;
}
if (isBody) {
parser.parse(c);
Serial.print(c);
} else {
Serial.print(c);
}
}
executeCallback();
} while(client.connected());
Kun je dit stuk eens vervangen voor:
while (client.connected() || client.available())
{
if (client.available())
{
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
Hiermee print die de response die hij terugkrijgt van de server. Misschien dat we daar nog informatie uit kunnen halen. Dus de code even vervangen, runnen en dan wordt de output van de server geprint daar ben ik heel benieuwd naar. Let er wel even op dat je de output even censureerd als hier authorizatie en refresh tokens in staan!!
Op 9 december 2018 19:57:57 schreef DeTijdTikt:
Die parsing code in de library is een beetje goedkoop:
[...] Kun je dit stuk eens vervangen voor: [...]
Hiermee print die de response die hij terugkrijgt van de server. Misschien dat we daar nog informatie uit kunnen halen. Dus de code even vervangen, runnen en dan wordt de output van de server geprint daar ben ik heel benieuwd naar. Let er wel even op dat je de output even censureerd als hier authorizatie en refresh tokens in staan!!
Ik heb het uitgeprobeerd, voor de duidelijkheid even een herhaling wat ik heb gedaan.
int size = 0;
client.setNoDelay(false);
// while(client.connected()) {
do {
while((size = client.available()) > 0) {
c = client.read();
if (c == '{' || c == '[') {
isBody = true;
}
if (isBody) {
parser.parse(c);
Serial.print(c);
} else {
Serial.print(c);
}
}
executeCallback();
} while(client.connected());
//
// Ik heb de bovenstaande code vervangen voor de onderstaande code.
// Hierbij een extra regeltje toegevoegd om gemakkelijk te zien waar deze in de seriële monitor wordt geprint.
//
while (client.connected() || client.available())
{
if (client.available())
{
String line = client.readStringUntil('\n');
Serial.println(line);
Serial.println("########## ##########");
}
}Onderstaand de output op de seriële monitor, tussen "<<<" en ">>>" weer de info welke ik heb vervangen.
PIFFS opened:
connecting to WiFi
.
WiFi connected
IP address:
<<<123.456.7.89>>>
mDNS responder started
Loading config
Failed to open config file
No refresh token found. Requesting through browser
Open browser at http://esp8266.local
WiFi not connected!
HTTP server startedNu open ik http://esp8266.local in de browser, waarbij een redirect naar "Succesfully authentiated This device with Spotify. Restart your device now" en de url is hierbij gewijzigd naar "http://esp8266.local/callback/?code=<<<lange code>>>".
<<<Client ID>>>
http%3A%2F%2Fesp8266.local%2Fcallback%2F
Code: <<<dezelfde lange code als in de redirect link>>>
Requesting URL: POST /api/token HTTP/1.1
Host: accounts.spotify.com
Authorization: Basic <<<andere lange code>>>=
Content-Length: 425
Content-Type: application/x-www-form-urlencoded
Connection: close
grant_type=authorization_code&code=<<<weer dezelfde lange code>>>=http%3A%2F%2Fesp8266.local%2Fcallback%2F
Refresh token:
Access Token:
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HREF:
--------Response Code: 0
--------Free mem: 24504
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
[enz...]
Conclusie de code komt niet in het gewijzigde stuk code, dus client.availible()=0, waardoor er op regel 238 de functie met een return uit wordt gestapt.
Edit:
Met even verder rommelen; heb ik de return op regel 238 en de regels met While en If van het gewijzigde stukje code gecomment zodat we kunnen zien wat er in de string line staat. Ter verduidelijking onderstaand de code.
// regel 232 Spotifyclient.cpp
int retryCounter = 0;
while(!client.available()) {
executeCallback();
retryCounter++;
if (retryCounter > 10) {
//return; // regel 238 Spotifyclient.cpp
}
delay(10);
}
int pos = 0;
boolean isBody = false;
char c;
//while (client.connected() || client.available()) //
{
//if (client.available()) //
{
String line = client.readStringUntil('\n');
Serial.println(line);
Serial.println("########## ##########"); //
}
}En onderstaand het relevante deel van de output op de seriële monitor, de overige output is hetzelfde.
grant_type=authorization_code&code=<<<de lange code uit de redirect url>>>
HTTP/1.1 200 OK########## ##########
Refresh token:
Access Token:
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
@DeTijdTikt, dus response van de server is 200 OK.
Edit:
Dat er in de overige uitvoer "Response code: 0" staat komt doordat in regel 188 van esp8266-spotify-remote.ino een functie van Spotifyclient.cpp wordt aangeroepen, waarin"client.availible()=0". Zie onderstaande code.
// regel 66 Spotifyclient.cpp
int retryCounter = 0;
while(!client.available()) {
executeCallback();
retryCounter++;
if (retryCounter > 10) {
return 0; // regel 72 Spotifyclient.cpp
}
delay(10);
}
Als ik ook hier even de return comment dan krijg ik continu een 400 Bad Request terug. Onderstaand weer de uitvoer, de overige output is hetzelfde.
HTTP/1.1 200 OK
########## ##########
Refresh token:
Access Token:
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
HTTP/1.1 400 Bad Request
HTTP Code: 400
Content-Type: application/json
Content-Type: application/json
WWW-Authenticate: Bearer realm="spotify", error="invalid_request", error_description="Only valid bearer authentication supported"
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Authorization, Origin, Content-Type, Retry-After
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 604800
Content-Length: 99
Date: Sun, 09 Dec 2018 00:00:00 GMT
Via: 1.1 google
Alt-Svc: clear
Connection: close
Body starts now
start document
start document
HREF:
--------Response Code: 400
--------Free mem: 25776
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer
Connection: close
[enz...]
@Zekerpixels,
Je hebt echter de while loop uitgecomment, deze zorgt ervoor dat alle output die teruggegeven wordt door de server wordt geprint, en ik ben juist zo benieuwd naar de body van de response. Kun je het nogmaals runnen met de while intact?
//while (client.connected() || client.available()) //
{
//if (client.available()) //
{
String line = client.readStringUntil('\n');
Serial.println(line);
Serial.println("########## ##########"); //
}
}
Dat wordt dan:
while (client.connected() || client.available()) //
{
if (client.available()) //
{
String line = client.readStringUntil('\n');
Serial.println(line);
Serial.println("########## ##########"); //
}
}
@ DeTijdTikt,
Dat geeft geen resultaat omdat client.available() een 0 geeft, waardoor de code niet de while en if in komt. Ik heb nog niet weten te achterhalen waar deze 0 vandaan komt.
Edit:
Ik heb heb iets, van de code heb ik het onderstaande gemaakt met de volgende uitvoer.
Serial.println("########## ##########"); // Spotifyclient.cpp
while(1)
//while (client.connected() || client.available()) //
{
//if (client.available()) //
{
String line = client.readStringUntil('\n');
Serial.println(line);
}
}########## ##########
HTTP/1.1 200 OK
Server: nginx
Date: Sun, 00 Dec 2018 00:00:00 GMT
Content-Type: application/json
Content-Length: 508
Connection: close
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000
Hmm wederom geen body, beetje trail en error dit maar zou je deze code nog eens aan kunnen passen:
Serial.println("########## ##########"); //
while(1)
//while (client.connected() || client.available()) //
{
//if (client.available()) //
{
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
Naar:
Serial.println("########## ##########"); //
while(1)
//while (client.connected() || client.available()) //
{
//if (client.available()) //
{
char data = client.read();
Serial.print(data);
}
}
PS. heb je al geprobeerd om de orginele code te runnen waarbij je dit keer ook die return uitcomment? Het kan zijn dat die daar vorige keer op stuk liep maar dat dat gefixt is wanneer je die return eruit laat.
@DeTijdTikt, ik heb diezelfde code nu vervangen voor de onderstaande, met de onderstaande output als resultaat.
Serial.println("########## ##########"); // Spotifyclient.cpp
while(1)
//while (client.connected() || client.available()) //
{
//if (client.available()) //
{
char data = client.read();
Serial.print(data);
}
}########## ##########
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 00 Dec 2018 00:00:00 GMT
Content-Type: application/json
Content-Length: 508
Connection: close
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000{"access_token":"<<<lange code>>>","token_type":"Bearer","expires_in":3600,"refresh_token":"<<<lange code>>>","scope":"user-modify-playback-state user-read-playback-state user-read-currently-playing user-read-private"}???????(dit teken wordt hierna continue herhaald)
Edit:
Onderstaand de uitvoer met de geheel orginele code, maar met de return op regel 238 van SpotifyClient.cpp gecomment. Onderstaande de output op de seriële monitor.
Het resultaat is dat er wel de "access_token" en "refresh_token" worden ontvangen.
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 10 Dec 2018 11:00:05 GMT
Content-Type: application/json
Content-Length: 508
Connection: close
Vary: Accept-Encoding
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000start document
{"access_token":"<<<lange code A>>>
access_token=<<<lange code A>>>
","token_type":"Bearer
token_type=Bearer
","expires_in":3600
expires_in=3600
,"refresh_token":"<<<lange code R>>>
refresh_token=<<<lange code R>>>
","scope":"user-modify-playback-state user-read-playback-state user-read-currently-playing user-read-private
scope=user-modify-playback-state user-read-playback-state user-read-currently-playing user-read-private
"}Refresh token: <<<lange code R>>>
Access Token: <<<lange code A>>>
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer <<<lange code A>>>
Connection: closeHTTP/1.1 204 No Content
HTTP Code: 204
Cache-Control: private, max-age=0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Authorization, Origin, Content-Type, Retry-After
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 604800
Content-Length: 0
Date: Mon, 10 Dec 2018 11:00:06 GMT
Via: 1.1 google
Alt-Svc: clear
Connection: closeBody starts now
start document
HREF:
--------Response Code: 204
--------Free mem: 25576
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer <<<lange code A>>>
Connection: closeHTTP/1.1 204 No Content
HTTP Code: 204
Cache-Control: private, max-age=0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Authorization, Origin, Content-Type, Retry-After
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 604800
Content-Length: 0
Date: Mon, 10 Dec 2018 11:00:06 GMT
Via: 1.1 google
Alt-Svc: clear
Connection: closeBody starts now
start document
HREF:
--------Response Code: 204
--------Free mem: 25576
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer <<<lange code A>>>
Connection: closeHTTP/1.1 204 No Content
HTTP Code: 204
Edit:
Al ik dan iets ga afspelen op spotify het onderstaande in de seriële monitor.
HTTP/1.1 200 OK
HTTP Code: 200
Content-Type: application/json; charset=utf-8
Cache-Control: private, max-age=0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Authorization, Origin, Content-Type, Retry-After
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 604800
Content-Length: 3804
Date: Mon, 00 Dec 2018 00:00:00 GMT
Via: 1.1 google
Alt-Svc: clear
Connection: closeBody starts now
start document
start document
HREF: item.album.images.url = https://i.scdn.co/image/0c1b65e11f846eece7f25442df9b104ff2dd8221HREF: item.album.images.url = https://i.scdn.co/image/f56acdbbadc334a3d3107a063f3b08e816103bdeHREF: item.album.images.url = https://i.scdn.co/image/73876710b9cd00fb672a2f2d8434455bb4d6f52bHREF: https://i.scdn.co/image/f56acdbbadc334a3d3107a063f3b08e816103bde
--------Response Code: 200
--------Free mem: 25224
Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer <<<lange code A>>>
Connection: close
Edit:
Aangezien de album cover binnenkomt, heb ik de onderstaande code weer toegevoegd aan het eind van de loop van esp8266_spoftfy-remote.ino. Onderstaand weer de uitvoer.
Serial.print("progressMs "); Serial.println(data.progressMs);
Serial.print("durationMs "); Serial.println(data.durationMs);
Serial.print("title "); Serial.println(data.title);
Serial.print("artistname "); Serial.println(data.artistName);
Serial.print("isPlaying "); Serial.println(data.isPlaying);
Serial.print("isPlayerActive "); Serial.println(data.isPlayerActive);Requesting URL: GET /v1/me/player/currently-playing HTTP/1.1
Host: api.spotify.com
Authorization: Bearer <<<lange code A>>>
Connection: closeHTTP/1.1 200 OK
HTTP Code: 200
Content-Type: application/json; charset=utf-8
Cache-Control: private, max-age=0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Authorization, Origin, Content-Type, Retry-After
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE, PATCH
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 604800
Content-Length: 3804
Date: Mon, 00 Dec 2018 00:00:00 GMT
Via: 1.1 google
Alt-Svc: clear
Connection: closeBody starts now
start document
start document
HREF: item.album.images.url = https://i.scdn.co/image/0c1b65e11f846eece7f25442df9b104ff2dd8221HREF: item.album.images.url = https://i.scdn.co/image/f56acdbbadc334a3d3107a063f3b08e816103bdeHREF: item.album.images.url = https://i.scdn.co/image/73876710b9cd00fb672a2f2d8434455bb4d6f52bHREF: https://i.scdn.co/image/f56acdbbadc334a3d3107a063f3b08e816103bde
--------Response Code: 200
--------Free mem: 26512
progressMs 61239
durationMs 292013
title Someone Who Cares
artistname Three Days Grace
isPlaying 1
isPlayerActive 1
Als ik dan weer stop met afspelen veranderd, isPlaying naar 0.
progressMs 223996
durationMs 292013
title Someone Who Cares
artistname Three Days Grace
isPlaying 0
isPlayerActive 1
Dus het commenten van de return op op regel 238 van SpotifyClient.cpp, zorgt ervoor dat het werkt.
Edit:
Verder nog uit proberen te zoeken hoe ik de naam van het album tevoorschijn kan toveren, https://developer.spotify.com/documentation/web-api/reference/object-m….
Maar nu ben ik eigenlijk nog wel benieuwt waarom client.available() een 0 geeft.
Serial.println(client.available()); // geeft een 0"client.available()=0" dan "while(!0){"
// regel 232 Spotifyclient.cpp
int retryCounter = 0;
while(!client.available()) {
executeCallback();
retryCounter++;
if (retryCounter > 10) {
//return; // regel 238
}
delay(10);
}Top dat je nu verder bent en de library kan gebruiken!
Waarom die die return in schiet is me niet helemaal duidelijk, zie alleen dat die een functie pointer aanroept en heb even geen zin om de hele code door te spitten naar welke functie op dat moment point. Maar daar gaat waarschijnlijk iets fout.
Ik zou me er in dit geval niet te druk om maken
.
ps. ik bedoel dus de functiepointer executeCallback();