9
votes

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?

3
Maybe related to this item? stackoverflow.com/questions/35877369/… I'm also still having this problem - PaulDart
Are you only getting the error on some tracks or on all tracks? I ran into that other issue when searching around, seems to be describing similar behavior. I would think if the issue is that widespread it would have trigged some failed tests or something on soundclouds end. I guess we just have to play the waiting game? - Andrew

3 Answers

1
votes

using this url, working perfectly sir. Try this. :D

https://api.soundcloud.com/tracks/TRACK_ID/stream?client_id=CLIENT_ID
1
votes

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.