Greasy Fork is available in English.
Functions that enable the import of album and track info into the MusicBrainz database.
此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/4987/32527/MusicBrainz%20Import%20Helper%20Functions.js
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // MusicBrainz Import helper functions /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* * How to use this module? * * - First build a release object (see expected format below) that you'll fill in from source of data * - Call as follows, e.g.: * var parameters = MBReleaseImportHelper.buildFormParameters(parsedRelease, optionalEditNote); * - Then build the HTML that you'll inject into source site page: * var formHtml = MBReleaseImportHelper.buildFormHTML(parameters); * - Addinionally, you can inject a search link to verify that the release is not already known by MusicBrainz: * var linkHtml = MBReleaseImportHelper.buildSearchLink(parsedRelease); * * Expected format of release object: * * release = { * title, * artist_credit, * type, * status, * language, * script, * packaging, * country, * year, * month, * day, * labels = [ { name, mbid, catno }, ... ], * barcode, * urls = [ {url, link_type }, ... ], * discs = [ * { * title, * format, * tracks = [ * { number, title, duration, artist_credit }, * ... * ] * }, * ... * ], * } * * where 'artist_credit' has the following format: * * artist_credit = [ * { * credited_name, * artist_name, * artist_mbid, * joinphrase * }, * ... * ] * */ var MBReleaseImportHelper = (function() { // --------------------------------------- publics ----------------------------------------- // // compute HTML of search link function fnBuildSearchLink(release) { var totaltracks = 0; for (var i=0; i < release.discs.length; i++) { totaltracks += release.discs[i].tracks.length; } var release_artist = ""; for (var i=0; i < release.artist_credit.length; i++) { var ac = release.artist_credit[i]; release_artist += ac.artist_name; if (typeof ac.joinphrase != 'undefined' && ac.joinphrase != "") { release_artist += ac.joinphrase; } else { if (i != release.artist_credit.length-1) release_artist += ", "; } } var innerHTML = '<a href="http://musicbrainz.org/search?query=artist%3A(' + luceneEscape(release_artist) + ')%20release%3A(' + luceneEscape(release.title) + ')%20tracks%3A(' + totaltracks + ')'; if(release.country) innerHTML += '%20country:'+release.country; innerHTML += '&type=release&advanced=1">Search in MusicBrainz</a>'; return innerHTML; } // compute HTML of import form function fnBuildFormHTML(parameters) { // Build form var innerHTML = '<form action="http://musicbrainz.org/release/add" method="post" target="_blank" accept-charset="UTF-8" charset="' + document.characterSet + '">'; parameters.forEach(function(parameter) { var value = parameter.value + ""; innerHTML += "<input type='hidden' value='" + value.replace(/'/g,"'") + "' name='" + parameter.name + "'/>"; }); innerHTML += '<input type="submit" value="Import into MB">'; innerHTML += '</form>'; return innerHTML; } // build form POST parameters that MB is waiting function fnBuildFormParameters(release, edit_note) { // Form parameters var parameters = new Array(); appendParameter(parameters, 'name', release.title); // Release Artist credits buildArtistCreditsFormParameters(parameters, "", release.artist_credit); if (release["secondary_types"]) { for (var i=0; i < release.secondary_types.length; i++) { appendParameter(parameters, 'type', release.secondary_types[i]); } } appendParameter(parameters, 'type', release.type); appendParameter(parameters, 'status', release.status); appendParameter(parameters, 'language', release.language); appendParameter(parameters, 'script', release.script); appendParameter(parameters, 'packaging', release.packaging); // Date + country appendParameter(parameters, 'country', release.country); if (!isNaN(release.year) && release.year != 0) { appendParameter(parameters, 'date.year', release.year); }; if (!isNaN(release.month) && release.month != 0) { appendParameter(parameters, 'date.month', release.month); }; if (!isNaN(release.day) && release.day != 0) { appendParameter(parameters, 'date.day', release.day); }; // Barcode appendParameter(parameters, 'barcode', release.barcode); // Label + catnos for (var i=0; i < release.labels.length; i++) { var label = release.labels[i]; appendParameter(parameters, 'labels.'+i+'.name', label.name); appendParameter(parameters, 'labels.'+i+'.mbid', label.mbid); if (label.catno != "none") { appendParameter(parameters, 'labels.'+i+'.catalog_number', label.catno); } } // URLs for (var i=0; i < release.urls.length; i++) { var url = release.urls[i]; appendParameter(parameters, 'urls.'+i+'.url', url.url); appendParameter(parameters, 'urls.'+i+'.link_type', url.link_type); } // Mediums for (var i=0; i < release.discs.length; i++) { var disc = release.discs[i]; appendParameter(parameters, 'mediums.'+i+'.format', disc.format); appendParameter(parameters, 'mediums.'+i+'.name', disc.title); // Tracks for (var j=0; j < disc.tracks.length; j++) { var track = disc.tracks[j]; appendParameter(parameters, 'mediums.'+i+'.track.'+j+'.number', track.number); appendParameter(parameters, 'mediums.'+i+'.track.'+j+'.name', track.title); var tracklength = (typeof track.duration != 'undefined' && track.duration != '') ? track.duration : "?:??"; appendParameter(parameters, 'mediums.'+i+'.track.'+j+'.length', tracklength); buildArtistCreditsFormParameters(parameters, 'mediums.'+i+'.track.'+j+'.', track.artist_credit); } } // Add Edit note parameter appendParameter(parameters, 'edit_note', edit_note); return parameters; } // --------------------------------------- privates ----------------------------------------- // function appendParameter(parameters, paramName, paramValue) { if(!paramValue) return; parameters.push( { name: paramName, value: paramValue } ); } function luceneEscape(text) { var newtext = text.replace(/[-[\]{}()*+?~:\\^!"]/g, "\\$&"); return newtext.replace("&&", "\&&").replace("||", "\||"); } function buildArtistCreditsFormParameters(parameters, paramPrefix, artist_credit) { if(!artist_credit) return; for (var i=0; i < artist_credit.length; i++) { var ac = artist_credit[i]; appendParameter(parameters, paramPrefix+'artist_credit.names.'+i+'.name', ac.credited_name); appendParameter(parameters, paramPrefix+'artist_credit.names.'+i+'.artist.name', ac.artist_name); appendParameter(parameters, paramPrefix+'artist_credit.names.'+i+'.artist.mbid', ac.artist_mbid); if (typeof ac.joinphrase != 'undefined' && ac.joinphrase != "") { appendParameter(parameters, paramPrefix+'artist_credit.names.'+i+'.join_phrase', ac.joinphrase); } } } // ---------------------------------- expose publics here ------------------------------------ // return { buildSearchLink: fnBuildSearchLink, buildFormHTML: fnBuildFormHTML, buildFormParameters: fnBuildFormParameters }; })();