SoundCloud's web interface is rubbish for downloading podcasts, but their API is pretty good, so here's a handy Python script for downloading all of your favourite Tell 'em Steve-Dave! episodes:
import os.path
import re
import requests
API_URL = "http://api.soundcloud.com"
TRACKS_URL = API_URL + "/users/%(USER_ID)s/tracks" \
"?client_id=%(CLIENT_ID)s" \
"&offset=%(OFFSET)s" \
"&limit=%(LIMIT)s" \
"&format=json"
DOWNLOAD_URL = "https://api.soundcloud.com/tracks/%(TRACK_ID)s/download?client_id=%(CLIENT_ID)s"
CHUNK_SIZE = 16 * 1024
TESD_USER_ID = "79299245"
CLIENT_ID = "3b6b877942303cb49ff687b6facb0270"
LIMIT = 10
offset = 0
while True:
url = TRACKS_URL % {
"USER_ID": TESD_USER_ID,
"CLIENT_ID": CLIENT_ID,
"LIMIT": LIMIT,
"OFFSET": offset
}
tracks = requests.get(url).json()
if not tracks:
break
tracks = [(track["id"], track["title"]) for track in tracks]
for (id, title) in tracks:
title = str(re.sub('[^A-Za-z0-9]+', '_', title)).strip('_')
url = DOWNLOAD_URL % {"TRACK_ID": id, "CLIENT_ID": CLIENT_ID}
filename = "%s.mp3" % title
print "downloading: %s from %s" % (filename, url)
if os.path.exists(filename):
continue;
request = requests.get(url, stream=True)
with open(filename + ".tmp", 'wb') as fd:
chunks = request.iter_content(chunk_size=CHUNK_SIZE)
for chunk in chunks:
fd.write(chunk)
os.rename(filename + ".tmp", filename)
offset = offset + LIMIT
4 colors 4 life