Freitag, 22. März 2013

Discogs + Blogspot = Instant Download

Ähm, was mache ich eigentlich sonst so? Hier ist schon zu lange nichts mehr passiert, aber etwas gemacht habe ich schon. Die letzten 40 Minuten zum Beispiel ein Greasemonkey-Skript, das ich sehr nützlich für Discogs finde.

Schallplatten digitalisieren finde ich recht mühsam, aber es macht verdammt viel Laune. Andererseits, warum aus analog digital machen, wenn das schon andere gemacht haben. Jeder gute Mensch verwaltet seine Plattensammlung online bei Discogs, und bei vielen Blogspot-Blogs kann man Musik herunterladen, man muss sie nur finden.

Lange Rede, kurzer Sinn. Mein Skript bastelt unter jedes Release auf Discogs einen direkten Link zur Google-Suche nach Blogs, die evtl. einen Download zu dem Release enthalten könnten. Das sieht wie folgt aus.

Zunächst das Release auf Discogs suchen und finden:
City Rats, eine israelische Punkband
Den rot markierten Link anklicken, er führt direkt zu Google mit den passenden Suchbegriffen:
Google ist dein Freund
Die gefunden Links waren leider allesamt off, Mediafire ist manchmal etwas blöd. Nunja, so konnte ich aber feststellen, dass ich die Platte mal selbst digitalisieren muss, wenn ich sie kurzfristig hören will. Gesagt, getan. Sowohl Platte als auch Skript.

Achso, das Skript, kommt gleich, nur der Hinweis, man kann das natürlich eleganter programmieren und so, aber es tut, was es soll. Verbesserungsvorschläge und alles, gerne an mich.

// ==UserScript==
// @name Discogs2BlogspotSearch
// @namespace http://www.jmizv.de/
// @description Adds a link to Discogs releases to search them on Blogspot pages.
// @include http://www.discogs.com/*release*
// ==/UserScript== 

function addLink(artist, title) {
  var srch, el;
  srch = document.evaluate('//div[@class="profile"]/h1', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
  for(var i = 0 ; i < srch.snapshotLength; i++) {
    el = srch.snapshotItem(i);
    break;
  }
  el = el.parentNode;
  artist = artist.trim().replace(/\s+/g, "+");
  title = title.replace(/\s+/g, "+");
  var nuEl = document.createElement("div");
  var aEl = document.createElement("a");
  var textEl = document.createTextNode("Search@Blogspots");

  nuEl.appendChild(aEl);
  aEl.setAttribute("href", "https://www.google.de/search?q=site:blogspot.com+"+artist+"+"+title);
  aEl.appendChild(textEl);
  el.appendChild(nuEl);
}

function getText( obj ) {
  return obj.textContent ? obj.textContent : obj.innerText;
}

function getTextContent(xpath){
 var name, ths, result;
 name = document.evaluate(xpath,document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
 for(var i = 0; i < name.snapshotLength; i++) {
  ths = name.snapshotItem(i);
  result = getText(ths);
  break;
 }
 return result;
}

addLink(
 getTextContent('//span[@itemprop="byArtist"]/span/a/text()'),
 getTextContent('//div[@class="profile"]/h1/span[@itemprop="name"]/text()')
);