Soundclouds API is returning 403 on some tracks for me. I have tried playing with the raw http endpoints and also the soundcloud api wrapper for python, both have the issue.
https://api.soundcloud.com/tracks/251164884.json?client_id=CLIENT_ID
The above one returns a 403 error while below one works, using same CLIENT_ID obviously
https://api.soundcloud.com/tracks/197355235.json?client_id=CLIENT_ID
Using the library wrapper I get. requests.exceptions.HTTPError: 403 Client Error: Forbidden
import soundcloud
client = soundcloud.Client(client_id=CLIENT_ID)
track = client.get('/resolve', url='https://soundcloud.com/mtarecords/my-nu-leng-flava-d-soul-shake')
https://soundcloud.com/calyxteebee/nothing-left
Another track that also doesn't resolve. Not all tracks have this issue, most work how they always have.
If you go to the Share -> Embed on Soundcloud the track_id will be in there, so I know I am using the correct track_id.
Viewing the http endpoints in browser I get the error.
Failed to load resource: the server responded with a status of 401 (Unauthorized) - https://api.soundcloud.com/favicon.ico
Anyone else run into this issue before?
Using your two examples I get valid results for both
Example 1:
https://api.soundcloud.com/resolve?url=https://soundcloud.com/calyxteebee/nothing-left&client_id=CLIENT_ID
returns
https://api.soundcloud.com/tracks/251164884?client_id=CLIENT_ID
Example 2:
https://api.soundcloud.com/resolve?url=https://soundcloud.com/mtarecords/my-nu-leng-flava-d-soul-shake&client_id=CLIENT_ID
returns
https://api.soundcloud.com/tracks/249638630?client_id=CLIENT_ID
using this url, working perfectly sir. Try this. :D
https://api.soundcloud.com/tracks/TRACK_ID/stream?client_id=CLIENT_ID
I have been investigating this issue for some time now, and I discovered something which at least solves my situation, dunno if it will solve yours.
The Revelation:
If you do a head request with curl (-I
option) then it seems to always return with a 200/300 range response.
Why it works: I am streaming Soundcloud tracks with URLs like https://api.soundcloud.com/tracks/TRACK_ID/stream?client_id=CLIENT_ID
in an iOS app using FreeStreamer. The stream was failing on exactly those tracks for which curl -v
returned 403 for the tracks URL (it returns 401 for the stream URL). So to solve my situation, I perform a head request which gives 302 Found
, extract the mp3 URL, and I use that to stream instead of the original URL.
I consider this a bug of the library (since it should be able to handle any 302) and I created an issue for it.