There was a nice article on the beatport tech blog. I didn't manage to find it when I searched yesterday. Basically what they suggested was applying a low pass filter to isolate the base drums, then count the most common intervals between peaks (basically some kind of transformation) and then reconstruct the BPM from there by applying a range from 80-160 or similar. Hope this gives you a rough idea.
I implemented and tested it and it worked quite well with electronic music.
Works pretty well but requires to upload a file, then process it to get the BPM. So you would need smaller audio samples as the soundcloud stream is too big and takes ages.
I implemented and tested it and it worked quite well with electronic music.