Skip to content

Instantly share code, notes, and snippets.

@gustavomdsantos
Last active December 30, 2022 01:01
Show Gist options
  • Select an option

  • Save gustavomdsantos/0a668d9e41e1cba3ad0323456a8eec53 to your computer and use it in GitHub Desktop.

Select an option

Save gustavomdsantos/0a668d9e41e1cba3ad0323456a8eec53 to your computer and use it in GitHub Desktop.
User script que exporta tracklists do Beatport para CSV.
<span class="value" style="margin-right: 0px;">
<a>Export playlist</a>
</span>
/** get track names of the tracklist */
function getTrackNames() {
return document.getElementsByClassName("buk-track-primary-title");
}
/** get info about artists that remixed each track (if the tracks are remixes)*/
function getRemixInfos() {
return document.getElementsByClassName("buk-track-remixed");
}
/** get original artist(s) name(s) */
function getOriginalArtists() {
return document.getElementsByClassName("buk-track-artists");
}
/** generate a string in CSV format (separator: " - ") of the tracklist */
function tracklistToString(rawTitleTracklist,rawRemixedTracklist,rawArtistTracklist) {
var tracklist = "";
for(var i=0; i<rawTitleTracklist.length; i++) {
if (rawRemixedTracklist[i].innerHTML == "Original Mix") {//isn't a remix
tracklist = tracklist + rawTitleTracklist[i].innerHTML
+ " - " +
rawArtistTracklist.item(i+1).getElementsByTagName('a').item(0).innerHTML
+ '\n';
} else { // is a remix
tracklist = tracklist + rawTitleTracklist[i].innerHTML
+ " - " +
rawRemixedTracklist[i].innerHTML
+ " - " +
rawArtistTracklist.item(i+1).getElementsByTagName('a').item(0).innerHTML
+ '\n';
}
}
return tracklist;
}
/** define a name of the tracklist based on the name of the album, list, chart*/
function setFilename() {
if (document.getElementsByClassName("interior-release-chart-content")[0]) { // is a release or a chart
var tracklistFilename =
document.getElementsByClassName("interior-release-chart-content")[0]
.getElementsByTagName("h1")[0].innerHTML
+ ".csv";
} else { // is a Genre Top 100 list, All Tracks list, etc.
var tracklistFilename =
document.getElementsByClassName("play-queue-header")[0]
.getElementsByTagName("h1")[0].innerHTML
+ ".csv";
}
return tracklistFilename;
}
function download(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
}
else {
pom.click();
}
}
function exportTracklist() {
var rawTitleTracklist = getTrackNames();
var rawRemixedTracklist = getRemixInfos();
var rawArtistTracklist = getOriginalArtists();
var tracklist = tracklistToString(rawTitleTracklist,rawRemixedTracklist,rawArtistTracklist);
var filename = setFilename();
download(filename, (tracklist.replace(/&amp;/ig, "&")));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment