// ==UserScript== // @name MusicBrainz: Import from iTunes // @description Import releases from iTunes // @version 2014-07-14 // @author - // @namespace http://userscripts.org/users/41307 // // @include *://itunes.apple.com/* // // @downloadURL https://update.greasyfork.icu/scripts/35333/MusicBrainz%3A%20Import%20from%20iTunes.user.js // @updateURL https://update.greasyfork.icu/scripts/35333/MusicBrainz%3A%20Import%20from%20iTunes.meta.js // ==/UserScript== //**************************************************************************// var myform = document.createElement("form"); myform.method="post"; myform.target = "blank"; myform.action = document.location.protocol + "//musicbrainz.org/release/add"; myform.acceptCharset = "UTF-8"; // Stylize our button var btnCSS = document.createElement("style"); btnCSS.type = "text/css"; btnCSS.innerHTML = ".mbBtn {border: 1px solid #ABABAB; cursor: pointer; border-radius: 4px; padding: 10px 15px; margin-top: -50px; background: #F7F7F7;} .mbBtn:hover {background: #DEDEDE}" document.body.appendChild(btnCSS); var mysubmit = document.createElement("input"); mysubmit.type = "submit"; mysubmit.value = "Add to MusicBrainz"; mysubmit.classList.add("mbBtn"); myform.appendChild(mysubmit); // Add a link to download artwork var linkCSS = document.createElement("style"); linkCSS.type = "text/css"; linkCSS.innerHTML = ".artLink {margin-top: 10px;}" document.body.appendChild(linkCSS); var left = document.getElementById('left-stack'); var art = left.getElementsByTagName('img')[0]; src = art.getAttribute('src-swap-high-dpi'); var viewBtn = left.getElementsByClassName('view-in-itunes')[0]; var artLink = document.createElement("p"); artLink.innerHTML = "Artwork: 600px"+ ", 1200px"; artLink.classList.add("artLink"); viewBtn.parentNode.insertBefore(artLink, viewBtn); var div = document.createElement("div"); div.classList.add("right"); var artist = '', album = '', label = '', year = 0, month = 0, day = 0, country = 'XW', type = 'album', discs = 0; if (m = /^https?:\/\/itunes.apple.com\/(?:([a-z]{2})\/)?album\/(?:[^\/]+\/)?id([0-9]+)/.exec(document.location.href)) { country = m[1]; var url = document.location.protocol + "//itunes.apple.com/lookup?id=" + m[2] + "&entity=song&limit=200"; if (m[1]) url = url + "&country=" + m[1]; var xmlhttp = new XMLHttpRequest(); xmlhttp.open('GET', url, true); xmlhttp.onreadystatechange = function() { callbackFunction(xmlhttp); } xmlhttp.send(null); } function callbackFunction(req) { if (xmlhttp.readyState != 4) return; var r = eval('(' + xmlhttp.responseText + ')'); // var r = $.parseJSON(xmlhttp.responseText); for (var i = 0; i < r.results.length; i++) { if (r.results[i].wrapperType == "collection") { artist = r.results[i].artistName; album = r.results[i].collectionName; if (m = /(.*?) - (Single|EP)/.exec(r.results[i].collectionName)) { album = m[1]; type = m[2]; } if (m = /^([0-9]{4})-([0-9]{2})-([0-9]{2})/.exec(r.results[i].releaseDate)) { year = m[1]; month = m[2]; day = m[3]; } label = r.results[i].copyright; if (m = /(?:[0-9]{4} )?(.*)/.exec(r.results[i].copyright)) { label = m[1]; } } else if (r.results[i].wrapperType == "track") { var discno = r.results[i].discNumber - 1; var trackno = r.results[i].trackNumber - 1; discs = r.results[i].discCount; var trackname = r.results[i].trackName; if (r.results[i].trackCensoredName && trackname != r.results[i].trackCensoredName) { var str1 = r.results[i].trackCensoredName.substr(0, trackname.length); var str2 = r.results[i].trackCensoredName.substr(trackname.length); if (trackname == str1 && str2.match(/^ \(.*\)$/)) { trackname = r.results[i].trackCensoredName; } } add_field("mediums." + discno + ".track." + trackno + ".name", trackname); add_field("mediums." + discno + ".track." + trackno + ".length", r.results[i].trackTimeMillis); var artists = r.results[i].artistName.split(/[,&]/); for (var j = 0; j < artists.length; j++) { add_field("mediums." + discno + ".track." + trackno + ".artist_credit.names." + j + ".name", artists[j].trim()); var join_phrase = (j != artists.length - 1) ? (j == artists.length - 2) ? " & " : ", " : ""; if (j != artists.length - 1) add_field("mediums." + discno + ".track." + trackno + ".artist_credit.names." + j + ".join_phrase", join_phrase); } } } for (var i = 0; i < discs; i++) { add_field("mediums." + i + ".format", 'Digital Media'); } add_field("name", album); add_field("artist_credit.names.0.artist.name", artist); add_field("packaging", 'None'); add_field("date.year", year); add_field("date.month", month); add_field("date.day", day); add_field("labels.0.name", label); add_field("country", country); add_field("status", "official"); //add_field("language", "jpn"); //add_field("script", "Jpan"); add_field("type", type); add_field("edit_note", "Imported from: "+ document.location.href + " using https://bitbucket.org/96187/userscripts/src/HEAD/itunes-importer/"); add_field("urls.0.link_type", "74"); add_field("urls.0.url", document.location.href); div.appendChild(myform); document.getElementById('title').appendChild(div); } ////////////////////////////////////////////////////////////////////////////// function add_field (name, value) { var field = document.createElement("input"); field.type = "hidden"; field.name = name; field.value = value; myform.appendChild(field); }