Skip to content

Instantly share code, notes, and snippets.

@rsvp
Forked from duncanbeevers/sc-dl-min.js
Created January 24, 2013 18:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rsvp/4626300 to your computer and use it in GitHub Desktop.
Save rsvp/4626300 to your computer and use it in GitHub Desktop.
Bookmarklet which creates download links on *any* Soundcloud page. Full credit goes to duncanbeevers, see https://gist.github.com/2157987 -- Last tested on newer Soundcloud site: 24 Jan 2013 Successful :-)
(function(a){var b,c,d,e=$(".sound"),f=require("config").get("client_id"),g=require("lib/connect").getAuthToken(),h=require("lib/helpers/conversion-helper"),i,j,k,l,m;for(b=e.length-1;b>=0;b--){c=$(e[b]);if(0==c.find(".sc-button-download").length){var n="https://soundcloud.com"+(c.find(".soundTitle__title").attr("href")||a.location.pathname);k={url:n,client_id:f},m=function(a){return function(b){var c={client_id:f};l=require("lib/url").stringify({query:c},b.stream_url+".mp3"),d=a.find(".sound__soundActions .sc-button-group"),j=d.find(".sc-button:first")[0].className.match(/sc-button-((?:small)|(?:medium))/)[1],i=$('<a class="sc-button sc-button-download sc-button-icon sc-button-responsive">Download</a>').attr({title:"Download this sound ("+h.bytesToMB(b.original_content_size)+")",href:l}).addClass("sc-button-"+j),d.append(i)}}(c),$.getJSON("http://api.soundcloud.com/resolve.json",k).success(m)}}})(window)
(function(window) {
var i, $sound, $buttonGroup;
var $sounds = $(".sound");
var clientId = require("config").get("client_id");
var oauthToken = require("lib/connect").getAuthToken();
var conversionHelper = require("lib/helpers/conversion-helper");
var $downloadButton, size;
var params, downloadUrl, onSuccess;
for (i = $sounds.length - 1; i >= 0; i--) {
$sound = $($sounds[i]);
if (0 == $sound.find(".sc-button-download").length) {
var soundcloudUrl = "https://soundcloud.com" + ($sound.find(".soundTitle__title").attr("href") || window.location.pathname);
params = {
url: soundcloudUrl,
client_id: clientId
};
onSuccess = (function($sound) {
return function(data) {
var params = {
client_id: clientId
};
downloadUrl = require("lib/url").stringify({ query: params }, data.stream_url + ".mp3");
$buttonGroup = $sound.find(".sound__soundActions .sc-button-group");
size = ($buttonGroup.find(".sc-button:first")[0].className).match(/sc-button-((?:small)|(?:medium))/)[1];
$downloadButton = $('<a class="sc-button sc-button-download sc-button-icon sc-button-responsive">Download</a>').attr({
title: "Download this sound (" + conversionHelper.bytesToMB(data.original_content_size) + ")",
href: downloadUrl
}).addClass("sc-button-" + size);
$buttonGroup.append($downloadButton);
};
})($sound);
$.getJSON("http://api.soundcloud.com/resolve.json", params).success(onSuccess);
}
}
})(window);
@rsvp
Copy link
Author

rsvp commented Jan 24, 2013

ARCHIVE PRE-2013 WORKING VERSION for Firefox bookmarklet:

javascript:(function(a){var%20b=a.createElement("a"),c=a.createElement("span"),d=a.querySelector("#main-content-inner%20img[class=waveform]").src.match(/.com/(.+)_/)[1],e=a.querySelector("em").innerText+".mp3";c.innerText="Download",b.appendChild(c),b.setAttribute("class","pl-button"),b.setAttribute("style","background-image:%20url(http://soundcloud.com/images/icons_mini.png?unicorn26);%20background-repeat:%20no-repeat;%20padding-left:%2018px;%20background-position:%20-77px%20-236px;"),b.download=e,a.querySelector(".primary").appendChild(b),b.href="http://media.soundcloud.com/stream/"+d})(document);

@rsvp
Copy link
Author

rsvp commented Jan 24, 2013

Note the bookmarklet should be a single line:

javascript:[INSERT sc-dl-min.js];

Notice the semicolon at the end. The code works as of 24 Jan 2013.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment