// ==UserScript== // @name Import Encyclopedisque releases to MusicBrainz // @version 2018.2.18.1 // @namespace http://userscripts.org/users/22504 // @description Easily import Encyclopedisque releases into MusicBrainz // @downloadURL https://raw.github.com/murdos/musicbrainz-userscripts/master/encyclopedisque_importer.user.js // @updateURL https://raw.github.com/murdos/musicbrainz-userscripts/master/encyclopedisque_importer.user.js // @include http://www.encyclopedisque.fr/disque/*.html // @include http://www.encyclopedisque.fr/artiste/*.html // @require https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js // @require lib/mbimport.js // @require lib/mblinks.js // @require lib/logger.js // @require lib/mbimportstyle.js // @icon https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/assets/images/Musicbrainz_import_logo.png // ==/UserScript== var mblinks = new MBLinks('ENCYLOPEDISQUE_MBLINKS_CACHE'); $(document).ready(function () { MBImportStyle(); if (window.location.href.match(/encyclopedisque\.fr\/disque\/(\d+)/)) { let release = parseEncyclopedisquePage(); setupImportUI(release); } insertMBLinks(); }); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Encyclopedisque functions /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function setupImportUI(release) { // Form parameters let edit_note = MBImport.makeEditNote(window.location.href, 'Encyclopedisque'); let parameters = MBImport.buildFormParameters(release, edit_note); // Build form let mbUI = $(MBImport.buildFormHTML(parameters) + MBImport.buildSearchButton(release)).hide(); $('#recherchebox').append(mbUI); $('form.musicbrainz_import button').css({ width: '100%' }); mbUI.slideDown(); } function insertMBLinks() { let current_url = window.location.href; if (current_url.match(/\/disque\//)) { mblinks.searchAndDisplayMbLink(current_url, 'release', function (link) { $('h2 span').before(link); }); } else if (current_url.match(/\/artiste\//)) { mblinks.searchAndDisplayMbLink(current_url, 'artist', function (link) { $('h2').prepend(link); }); } $('div.v7P, div.v12P') .find('a[href*="/disque/"]') .each(function () { let $link = $(this); let external_url = window.location.origin + $link.attr('href'); mblinks.searchAndDisplayMbLink(external_url, 'release', function (link) { $link.after(link).after('
'); }); }); $('h2, div.main') .find('a[href*="/artiste/"]') .each(function () { let $link = $(this); let external_url = window.location.origin + $link.attr('href'); mblinks.searchAndDisplayMbLink(external_url, 'artist', function (link) { $link.before(link); }); }); } // Analyze Encyclopedisque data and prepare to release object function parseEncyclopedisquePage() { release = new Object(); let infoHeader = document.body.querySelector('#contenu > h2:nth-of-type(1)'); // Release artist credit release.artist_credit = new Array(); let artist_name = infoHeader.querySelector('div.floatright:nth-of-type(1)').textContent.trim(); release.artist_credit.push({ artist_name: artist_name }); // Release title release.title = infoHeader.querySelector('span:nth-of-type(1)').textContent.trim(); // Default status is official, will change if "tirage promo" is found (see below) release.status = 'official'; // Other hard-coded info release.language = 'fra'; release.script = 'Latn'; let disc = { position: 1, tracks: [] }; release.discs = [disc]; // Release URL release.urls = new Array(); release.urls.push({ url: window.location.href, link_type: MBImport.URL_TYPES.other_databases }); // Parse other infos let releaseInfos = document.body.querySelectorAll('div.main tr'); let lastVinylFace = ''; let lastInfoType; for (let i = 0; i < releaseInfos.length; i++) { let infoType = releaseInfos[i].querySelector('td:nth-of-type(1)').textContent.trim(); // Release date if (infoType == 'Sortie :') { var infoValue = releaseInfos[i].querySelector('td:nth-of-type(2)').textContent.trim(); let re = /\s*(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)?\s*([\d\?]{4})?\s*(?:chez)?\s*((?:\S+\s?)*)\s*\(?([^\)]*)?\)?/; m = infoValue.match(re); month = m[1]; if (month != undefined) { switch (month) { case 'janvier': release.month = 1; break; case 'février': release.month = 2; break; case 'mars': release.month = 3; break; case 'avril': release.month = 4; break; case 'mai': release.month = 5; break; case 'juin': release.month = 6; break; case 'juillet': release.month = 7; break; case 'août': release.month = 8; break; case 'septembre': release.month = 9; break; case 'octobre': release.month = 10; break; case 'novembre': release.month = 11; break; case 'décembre': release.month = 12; break; } } release.year = m[2]; release.labels = []; let labels = m[3]; if (labels != undefined) { $.each(labels.split('/'), function (index, label) { release.labels.push({ name: label.trim(), catno: m[4] }); }); } else { release.labels.push({ catno: m[4] }); } } else if (infoType.match(/^Face [A-Z]/) || (infoType == '' && lastInfoType.match(/^Face [A-Z]/))) { // Tracks let track = new Object(); // First part of tracknumber (A, B, ...) let tnum_part1 = ''; if ((m = infoType.match(/^Face ([A-Z])/))) { lastVinylFace = m[1]; tnum_part1 = m[1]; } else { tnum_part1 = lastVinylFace; } // Track title if (releaseInfos[i].querySelector('td:nth-of-type(2) em') == null) { continue; } let title = releaseInfos[i].querySelector('td:nth-of-type(2) em').textContent.trim(); // 2nd part of tracknumber (1, 2, ...) let tnum_part2 = ''; if ((m = infoType.match(/^Face [A-Z](\d+)/))) { tnum_part2 = m[1]; } else if ((m = title.match(/^(\d+)\.\s+(.*)$/))) { tnum_part2 = m[1]; title = m[2]; } // Track length if ( (m = releaseInfos[i] .querySelector('td:nth-of-type(2)') .textContent.trim() .match(/- (\d+)’(\d+)$/)) ) { track.duration = `${m[1]}:${m[2]}`; } track.number = tnum_part1 + tnum_part2; track.title = title; disc.tracks.push(track); } else if (infoType == 'Format :') { // Format => medium format, release-group type, release status var infoValue = releaseInfos[i].querySelector('td:nth-of-type(2)').textContent.trim(); let values = infoValue.split(' / '); values.forEach(function (value) { if (value.indexOf('45 tours') > -1) { disc.format = '7" Vinyl'; } if (value.indexOf('33 tours') > -1) { disc.format = '12" Vinyl'; } if (value.indexOf('LP') > -1) { release.type = 'album'; } if (value.indexOf('EP') > -1) { release.type = 'ep'; } if (value.indexOf('SP') > -1) { release.type = 'single'; } if (value.indexOf('tirage promo') > -1) { release.status = 'promotion'; } }); } else if (infoType == 'Pays :') { // Country var infoValue = releaseInfos[i].querySelector('td:nth-of-type(2)').textContent.trim(); if (infoValue == 'France') { release.country = 'FR'; } else if (infoValue == 'Royaume-uni') { release.country = 'UK'; } else if (infoValue == 'Allemagne') { release.country = 'DE'; } else if (infoValue == 'Belgique') { release.country = 'BE'; } } if (infoType != '') { lastInfoType = infoType; } } // Barcode ? if (parseInt(release.year, 10) <= 1982) { // FIXME: not working release.no_barcode = '1'; } LOGGER.info('Parsed release: ', release); return release; }