// ==UserScript==
// @name 虾米wiki助手
// @namespace http://tampermonkey.net/
// @version 1.4.1
// @description 帮助X友填充资料,目前仅支持deezer的部分自动填写。
// @author XMAnon
// @match *://emumo.xiami.com/wiki/addalbum*
// @connect deezer.com
// @grant GM_xmlhttpRequest
// Done:
// wiki页填入资料来源后,点击虾填,将自动填充专辑名,艺人,发行时间信息,公司
// 目前仅支持deezer页面的地址
// Planned:
// BandCamp,MusicBrainz,Discogs,Spotify
// Amazon JP, Download and Select Pic File
//
// ==/UserScript==
//虾米填专辑,根据参考资料页,自动填充
(function() {
'use strict';
//虾填:在添加专辑第一个页面,根据参考资料页面抓取信息
var editTime = function (rawTime) {
var time = rawTime.split(' ');
var output;
console.log(time);
var timeMode = [0,1]
const charMM = ['January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
const numMM = ['01','02','03','04','05','06','07','08','09','10','11','12'];
if (charMM.indexOf(time[0]) >-1 ) //MM-DD-YYYY(US) e.g December 18, 1992
{
output = time[2] + '-' + numMM[(charMM.indexOf(time[0]))%12] + '-' + time[1].replace(',','');
//console.log(output);
return output
}
else if (charMM.indexOf(time[1]) >-1 )//DD-MM-YYYY(DE,IT,ES,FR) e.g. 18 December 1992 / 18. December 1992
{
output = time[2] + '-' + numMM[(charMM.indexOf(time[1]))%12] + '-' + time[0].replace('.','');
//console.log((charMM.indexOf(time[1]),(charMM.indexOf(time[1]))%12));
return output;
}
//YYYY/MM/DD (JP) --> YYYY/MM/DD
}
var getPage = '';//Text Page cache
var getInfo = {
title:'',
artists:'',//could be multiple aka contributors
release_date:'',
label:''};//Json obj 专辑名 专辑艺人 发行时间 发行公司
var getStatus;
var getData = function (){
var wikiUrl = document.getElementById("wiki").value;
switch(true){
case (wikiUrl.indexOf('deezer.com') > -1):
//Deezer Album API: https://developers.deezer.com/api/album#infos e.g.https://api.deezer.com/album/xxxxxxxxx
wikiUrl = "https://api.deezer.com/album/" + wikiUrl.split('/album/')[1].split('/')[0]//URL reformed to API
break;
//case (currentUrl.indexOf('bandcamp') > -1):
default:
console.warn('Host not matching');
}
var details = {
method: "GET",
url: wikiUrl,
headers: {
"User-Agent": "Mozilla/5.0", // If not specified, navigator.userAgent will be used.
"Accept": "text/xml" // If not specified, browser defaults will be used.
},
onload: function(response) {
var responseXML = null;
// Inject responseXML into existing Object (only appropriate for XML content).
if (!response.responseXML) {
responseXML = new DOMParser()
.parseFromString(response.responseText, "text/xml");
}
getPage = response.responseText;
getStatus = response.status;
var getJSON = JSON.parse(getPage);
console.log('2 got response');
console.log('response',response);
console.log('getPage' ,getPage);
console.log('getJSON' , getJSON);
console.log('getInfo', getInfo);
if (getStatus === 200) {
switch(true){
// case (wikiUrl.indexOf('amazon') > -1):
// //专辑名 专辑艺人 发行时间 发行公司
// console.log('1');
// document.getElementById("title").value = getPage.split('dmusicProductTitle_feature_div')[1].split('</h1>')[0].split('<h1')[1].split('>')[1].replace(/'/g,"'");//'会被转成ascii码,暂时只遇到了这一个问题,所以直接replace了
// document.getElementById("artist").value = getPage.split('ProductInfoArtistLink')[1].split('</a>')[0].split('>')[1].replace(/ & /g,';').replace(/\n/g,'').replace(' feat. ',';').replace(/, /g,';');//只会feat.一次吧,遇到了再说
// document.getElementById("publishtime").value = editTime(getPage.split('ProductInfoReleaseDate')[1].split('</span>')[0].split('>')[1].replace(/\n/g,''));
// document.getElementById("company").value = getPage.split('productDetailsTable')[1].split('<li>')[2].split('</li>')[0].split('</strong> ')[1];
// console.log('Information aquired!');
// break;
//case (currentUrl.indexOf('bandcamp') > -1):
case (wikiUrl.indexOf('deezer.com') > -1):
//专辑名 专辑艺人 发行时间 发行公司
console.log('3 contents transferred');
getInfo.title = getJSON.title;
getInfo.release_date = getJSON.release_date;
getInfo.label = getJSON.label;
getInfo.artists = getJSON.contributors[0].name;
if(getJSON.contributors.length > 0){
for(let i =1;i<getJSON.contributors.length;i++){
getInfo.artists = getInfo.artists + ';' + getJSON.contributors[i].name;
}
}
document.getElementById("title").value = getInfo.title;//
document.getElementById("artist").value = getInfo.artists;//
document.getElementById("publishtime").value = getInfo.release_date;
document.getElementById("company").value = getInfo.label;
console.log('Information aquired!');
break;
//case (currentUrl.indexOf('bandcamp') > -1):
default:
console.warn('Host not matching');
}
}
else {
console.log('No data fetched!!');
}
}
}
GM_xmlhttpRequest(details);
console.log('1 url fetched');
}
var xmBtn0 = document.createElement("input");
xmBtn0.type = "button";
xmBtn0.value = " 虾填 :P ";
xmBtn0.style.color = "blue";
xmBtn0.title = "点我,根据资料来源自动填充部分相关信息\n\n已支持: deezer";
xmBtn0.onclick = getData;
var wikinode = document.getElementById("wiki").parentNode;
wikinode.appendChild(xmBtn0);
//unsafeWindow.getData = getData;
//虾抓,读取页面信息,生成曲目列表并存储于剪贴板,详见脚本二
})();