Soundcloud Stratus - Certain tracks not playing - soundcloud

Running Soundcloud stratus player on www.naturesoundmap.com
The vast majority of listings (custom post type) work fine, but if you navigate on the map down to New Zealand (or the island of Niue), there are a few listings where in the last two weeks or so the sounds have stopped playing. eg. http://www.naturesoundmap.com/listing/post-office-bay/ & http://www.naturesoundmap.com/listing/aroha-evening/
I've checked the links & all are ok - you can see this by pressing the 'Listen' button & the track information loads up ok in Stratus, but it doesn't play.
Strangely, two of the sounds which weren't working last week are now fine.
I'm puzzled!

The problem is that the songs have streaming diabled.
Artists on SoundCloud can choose whether to allow external streaming form sites. In the case of say
https://soundcloud.com/naturesounds_nz/aroha-island-crickets
which is one of the songs that does not play, if get it's api return
https://seam.li/json/?url=api.soundcloud.com/tracks/88830021.json?client_id=apigee
(I passed this through a site I run in order to make the json more readable, this is the plain link )
In this json we see the property
"streamable": false
on line 13, and as such it does not have the stream_url property. Therefore when you call stratus using stream_url, since it does not exist undefined is returned. this results in
GET http://stratus.sc/undefined?consumer_key=xxx 404 (Not Found)
Your solution is simply to manually check the soundcloud urls if they are streamable before putting them on your site. Alternatively if the process is automatic just check the streamable property of the song.

Related

How to get live video id from YouTube channel

YouTube API eventType=live not working, does anyone have an idea why?
https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCmyKnNRH0wH-r8I-ceP-dsg&eventType=live&type=video&key=
Without eventType was working fine (but not now):
https://www.youtube.com/embed/live_stream?channel=UCmyKnNRH0wH-r8I-ceP-dsg&autoplay=1
Looks like YouTube changed something in API, search.list really not returning live broadcast since end of last week.
If you have user's access token you can use https://www.googleapis.com/youtube/v3/liveBroadcasts?part=snippet&broadcastStatus=active&broadcastType=all
endpoint to retrieve if any broadcast is live.
If you do not have user's access token, you can try this answer
but i didn't check it if it is working
Anyway this question looks like to be a duplicate of this question
Right now the YouTube API is not working, specifically for retrieving live streams of a specific channelId. In other words if you are setting channelId in the API call, you will get 0 results.
If you're using an API key rather than OAuth (not sure if OAuth works) the only work around at the moment is to use the API to search for a specific title. Here is my query URL below.
https://www.googleapis.com/youtube/v3/search?part=id%2Csnippet&type=video&maxResults=20&order=date&q=My+Uniquely+Titled+Livestream&key=[apiKey]
The results returned by the API will be from all of YouTube. (Note: the rest is done serverside) Put the results into an array and discard any that don't match your channelId. Then check the titles in an array and only get the video ID of the one that matches your desired title. That is the basic logic and it is sort of a rigid work around that won't work for most. But at least it will get you what you need until Google fixes the API.

Picasa web albums - impossible to list all photos

I've uploaded about 40k photos using the Google Photos uploader tool, and now I'm trying to get a list of those photos using the Picasa Web Albums Data API (as there is no separate Google Photos API that I'm aware of).
So far, it appears impossible to get a complete list of all of the photos because you can list only 1000 photos at a time and then use the start-index parameter to do paging, but the server returns an error once you use a start-index above 11000. With a start-index of 11000 this occurs:
gdata.photos.service.GooglePhotosException: (500, 'Internal Server Error', 'Deprecated offset is too large for a stream ID query. Please switch to using resume tokens.')
(I'm using Python, but have confirmed that the error is independent of the language library)
I'd be happy to switch to using "resume tokens" like the error indicates... except that they are not mentioned in any documentation that I could find.
This is an authenticated request and the URL I'm using looks like this:
https://picasaweb.google.com/data/feed/api/user/[myUserID]/albumid/[myAlbumID]?kind=photo&max-results=1000&start-index=11000
Can anyone show me an example request using resume tokens or point me to documentation on them? Or, if anyone knows of some other way to get a complete list of all of the photos in a large album, that'd be great too. Thanks!
EDIT: the problem happens in any language, but in Python you can reproduce it consistently with:
startIndex = 1
while 1:
print '(fetching more photos)'
photos = client.GetFeed(ALBUM_URL, limit=1000, start_index=startIndex)
for photo in photos.entry:
print 'startIndex:', startIndex
startIndex += 1
where ALBUM_URL is like the URL I listed above and client is an authenticated instance of gdata.photos.service.PhotosService.

In the Soundcloud API, is information about a track still available after it's removed due to DMCA infringement?

I'm building an app that utilizes Soundcloud API and we came across a small problem. We archive playlists on our own servers to cut down on the amount of data needed to display tracks. So, for example, a user can create a playlist with tracks from soundcloud but we strip away the data provided by soundcloud to the minimum required to view and play said track. This data includes it's SC_ID, track name, artist, stream URL, etc. But doesn't provide the full data set SC does.
My question:
When songs are removed due to DMCA Copyright infringement, does SoundCloud keep the track ID and information available or does it remove the track entirely? What I mean by this is, say I have a track with ID 123456 and it was removed due to DMCA. Does this track still exist such that I could GET request [SC_api_url]/tracks/123456.json which would yield the track but it would not be streamable nor downloadable?
Correct my logic if I am wrong. I've searched the documentation and the best answer I can get is if you try and request a resource that is not available it throws a common 404 error but the API is not very clear on what happens when tracks are removed due to DMCA violations.
So I reached out to Soundcloud and they said that they are removed from the public facing API.
This means an error would occur if you referenced it.
This is also true for exceeding quotas.
Hope this also helps someone else too!

Soundcloud API - How to get all Favorite Sets?

Is there an official way of getting all Favorites including the favorite Sets of the user or getting all playlists including the favorite sets ?
i tried the following urls but none of them gets the job done:
/me/favorites/sets
/me/sets
/me/playlists
Any Ideas ?
You have to wait a bit, its part of their new API.
Just change the user-id to yours.
https://api-v2.soundcloud.com/users/1672444/likes?limit=10&offset=0&linked_partitioning=1

Order by playbacks when fetching tracks from SoundCloud

I am fetching a list of tracks from soundcloud's API using the following query to retrieve the 5 most popular tracks:
https://api.soundcloud.com/tracks?client_id=XXX&order=hotness&limit=5
But recently SoundCloud removed the hotness order. In the blog post they say tracks can instead be sorted by playback_count. But can this be done in the query or do they suggest I pull down the whole SoundCloud library and order them in the client? The following doesn't seem to work:
https://api.soundcloud.com/tracks?client_id=XXX&order=playback_count&limit=5
So how would one retrieve the top tracks on SoundCloud?
The solution was to use the undocumented calls for the explorer feature that SoundCloud itself uses (I used the dev tools in Chrome to check the AJAX calls).
https://api.soundcloud.com/explore/sounds/category?limit=L&client_id=XXX
This appears to use some sort of sorting on the popularity of the songs. The songs can then be filtered on only music by checking the "grouping" attribute. I then have to resolve the list of IDs to actual songs which can be done with the (documented, official) API call:
https://api.soundcloud.com/tracks?ids=1,2,3&client_id=XXX
This seems to work perfectly and I also get the added benefit of an even distribution among genres. But of course, this can stop working at any moment since the API calls are undocumented and perhaps not meant for public use.
Just wanted to provide an update. It seems soundcloud has moved to v2 of the explore API call.
Use this to get a list of categories:
https://api.soundcloud.com/explore/v2
And this to get tracks from a category:
https://api-v2.soundcloud.com/explore/metal?limit=10&offset=0
So far it seems to without a key, although I have no idea how long that will last.
EDIT: So the 2nd url doesn't seem to allow cross-origin, but so far this does work, though it only returns the trackID not the full information
https://api.soundcloud.com/explore/v2/metal?limit=50&consumer_key=XXX
check here, soundcloud removed order by hotness.
Has order by hotness been removed from Soundclouds API
so, for now, only order by date is possible.