Bandcamp vs. Greasemonkey

27.09.2010 yahe

Ich wurde letztens vom Deutschlandradio Kultur gefragt, ob ich für ein Interview zur Sicherheit der Musikplattform Bandcamp zur Verfügung stehen würde. Für das Interview hatte ich extra ein kleines Greasemonkey-Script geschrieben, um zu zeigen, wie sich die Nachlässigkeit der Bandcamp-Programmierer auf die Umsätze eines Künstlers auswirken könnte. Leider wurde das Interview nun abgesagt, da das Bandcamp-Thema wohl nicht mehr eine so hohe Priorität hat. Trotzdem wollte ich den Nutzern von Bandcamp gerne mal vor Augen führen, worauf sie sich einlassen, wenn sie Bandcamp als Vertriebspartner nutzen wollen.

Bandcamp vorher

Das gleich präsentierte Greasemonkey-Userscript macht folgendes: Es holt sich die TralbumData-Variable aus der Bandcamp-Seite, die man gerade besucht. In dieser Variable stehen alle wichtigen Informationen zu den einzelnen Liedern, die auf der Seite präsentiert werden - inklusive des Downloadlinks für die 128kbps-Version der Lieder. Die Links werden dann einfach aufbereitet in einem neuen Tab angezeigt.

Bandcamp nachher

Wer jetzt denkt, dass das ganze Aufbereiten eine große Herausforderung ist, der irrt. Sämtliche Informationen liegen nämlich fertig im Quelltext der Bandcamp-Seite vor. Zur Not könnte man diese Arbeit auch manuell machen: Im Quelltext nach der Variable suchen und die einzelnen URLs darin abgrasen.

// ==UserScript==
// @name           Grab Bandcamp Songs
// @namespace      https://yahe.sh/
// @include        http://*.bandcamp.com/*
// @include        https://*.bandcamp.com/*
// @grant          none
// ==/UserScript==

// grab Bandcamp data
var albumData = TralbumData;
var embedData = EmbedData;

// grab album name - optional
var albumName = "";
if ((embedData != undefined) &&
    (embedData.album_title != undefined) &&
    (embedData.artist != undefined)) {
  albumName = embedData.artist + ": " + embedData.album_title;
}

// generate download output
if ((albumData != undefined) &&
    (albumData.trackinfo != undefined) &&
    (albumData.trackinfo.length > 0)) {
  var newText = "";

  newText += "<html>";
  newText += "<head>";
  newText += "<title>" + albumName + "</title>";
  newText += "</head>";
  newText += "<body>";
  newText += "<h1>" + albumName + "</h1>";

  var item = null;
  for (var index = 0; index < albumData.trackinfo.length; index++) {
    item = albumData.trackinfo[index];

    newText += "<a href='https://" + item["file"]["mp3-128"] + "'>" + item["title"] + "</a> (" + item["duration"] + " seconds)<br/>";
  }

  newText += "</body>";
  newText += "</html>";

  var newWindow = window.open("data:text/html;charset=UTF-8," + newText);
}

Cheers, Yahe


Search

[2018-08-16T07:52:56+02:00] _logResourceUsage(): Current execution time: 0.024132013320923 sec [2018-08-16T07:52:56+02:00] _logResourceUsage(): Current memory usage: 1.6969528198242 MB [2018-08-16T07:52:56+02:00] _logResourceUsage(): Peak memory usage: 1.8751831054688 MB