您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Download files from Song365
- // ==UserScript==
- // @name Song365Easy
- // @namespace http://www.tampermonkey.com/
- // @version 0.1
- // @description Download files from Song365
- // @author LesserEvil
- // @match https://www.song365.biz/album/*
- // @match https://www.song365.me/album/*
- // @match https://www.song365.co/album/*
- // @match https://www.song365.mobi/album/*
- // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
- // @grant GM_xmlhttpRequest
- // ==/UserScript==
- function SubmitTrackInfo(trackUrl, trackFilename, elementId)
- {
- console.log('TrackUrl submitted: '+trackUrl);
- GM_xmlhttpRequest ( {
- method: "GET",
- url: trackUrl,
- onload: function (response) {
- console.log('TrackUrl Loaded: '+trackUrl);
- var parser = new DOMParser ();
- /* IMPORTANT!
- 1) For Chrome, see
- https://developer.mozilla.org/en-US/docs/Web/API/DOMParser#DOMParser_HTML_extension_for_other_browsers
- for a work-around.
- 2) jQuery.parseHTML() and similar are bad because it causes images, etc., to be loaded.
- */
- console.log("loaded html for song: "+trackFilename);
- var lines = response.responseText.split("\n");
- //console.log("Found lines: "+lines.length);
- var theLine = "";
- var realLink = "";
- for( lineIndex in lines )
- {
- var theLine = lines[lineIndex];
- var lqIndex = theLine.indexOf("var url = 'http://");
- // var streamIndex = theLine.indexOf("http://stream.song365.co");
- var hqIndex = theLine.indexOf("var hqurl = 'http://");
- var strLength = theLine.length;
- //if ( elementId == 1 )
- // {
- // console.log(theLine);
- // }
- if ( lqIndex >= 0 )
- {
- if ( realLink == "" )
- {
- realLink = theLine.substr(lqIndex+11, strLength-(lqIndex+14));
- }
- }
- else if ( hqIndex >= 0 ) // subVal == "var hqurl = 'http://stre" )
- {
- realLink = theLine.substr(hqIndex+13, strLength-(hqIndex+16));
- break;
- }
- // var testLinkIndex=theLine.indexOf("download-link-hq");
- //if ( testLinkIndex >= 0 )
- //{
- // if ( realLink == "" )
- // {
- // console.log("Found this: "+theLine);
- // }
- // }
- // else if ( streamIndex >= 0 )
- //{
- // realLink = theLine.substr(streamIndex);
- // break;
- // }
- }
- if ( realLink != "" )
- {
- console.log("Found link: "+realLink);
- var linkElement = document.querySelector("a.song-dl-"+elementId);
- if ( linkElement != null )
- {
- linkElement.href = realLink;
- linkElement.download = trackFilename;
- }
- }
- else
- {
- console.log("Unable to find real link!");
- }
- // var doc = parser.parseFromString (response.responseText, "text/html");
- // var criticTxt = doc.getElementsByClassName ("critic_consensus")[0].textContent;
- // $("body").prepend ('<h1>' + criticTxt + '</h1>');
- },
- onerror: function (e) {
- console.error ('**** error ', e);
- },
- onabort: function (e) {
- console.error ('**** abort ', e);
- },
- ontimeout: function (e) {
- console.error ('**** timeout ', e);
- }
- } );
- }
- function insertAfter(newNode, referenceNode) {
- referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
- }
- function hasClass(docElement, matchClass)
- {
- return ((' ' + docElement.className + ' ').indexOf(' ' + matchClass + ' ') > -1)
- }
- function getElementByTagAndClass(docElement, tagName, matchClass)
- {
- var elements = docElement.getElementsByTagName(tagName), i;
- for( i in elements )
- {
- if ( hasClass(elements[i], matchClass ))
- {
- return elements[i];
- }
- }
- return null;
- }
- function getProfileItemValue(title)
- {
- console.log('Getting profile item value for: '+title);
- var returnVal = "";
- profileItemList = document.querySelectorAll('div.profile-item');
- console.log('Found profile items: '+profileItemList.length);
- for( var index=0; index<profileItemList.length; index++ )
- {
- profileItemTitle = profileItemList[0].querySelector('em.profile-item-title').innerHTML;
- if ( profileItemTitle == title )
- {
- var valElement = profileItemList[0].querySelector('em.profile-item-value');
- if ( valElement.firstElementChild != null )
- {
- returnVal = valElement.firstElementChild.innerHTML;
- }
- else
- {
- returnVal = valElement.innerHTML; // profileItemList[0].querySelector('em.profile-item-value').innerHTML;
- }
- break;
- }
- }
- console.log(profileItemTitle+' - '+returnVal);
- return returnVal;
- }
- function songItem(element,artistName)
- {
- var numberVal = element.querySelector('div.number').innerHTML;
- var titleElement = element.querySelector('div.song-name');
- var songTitle = "";
- var fullSongFilename = "";
- var buttonsDiv = element.querySelector('div.buttons');
- var downloadLink = buttonsDiv.querySelector('a.download').href;
- if ( titleElement.firstElementChild != null )
- {
- songTitle = titleElement.firstElementChild.innerHTML.trim();
- }
- else
- {
- songTitle = titleElement.innerHTML.trim(); // profileItemList[0].querySelector('em.profile-item-value').innerHTML;
- }
- fullSongFilename = ("00" + numberVal).slice(-2) +" - "+artistName+" - "+songTitle+".mp3";
- songUrlId = "song-dl-"+numberVal;
- fullSongLink = "<a href='"+downloadLink+"' class='"+songUrlId+"' >"+fullSongFilename+"</a>";
- SubmitTrackInfo(downloadLink,fullSongFilename,numberVal);
- return fullSongLink; // element.innerHTML;
- }
- var insertPoint = null;
- var elements = document.getElementsByTagName('a'), i;
- for( i in elements )
- {
- if ( i.href = '//www.liveinternet.ru/click' )
- {
- console.log('Found insert point!');
- insertPoint = i;
- break;
- }
- }
- if ( insertPoint != null )
- {
- var newDiv = document.createElement("div");
- newDiv.id = "courseDownload";
- newDiv.innerHTML = "Download Songs<br /><ul id='songDownloadList' class='songList'></ul>";
- // console.log(insertPoint);
- // console.log(insertPoint.parentNode);
- document.body.appendChild(newDiv); // ,insertPoint);
- var newDiv2 = document.createElement("div");
- newDiv2.id = "courseInfo";
- newDiv2.innerHTML = "----------<br />";
- insertAfter(newDiv2,newDiv);
- }
- artistSongs = document.querySelector('div.artist-songs');
- artistName = getProfileItemValue('Artist Name:');
- songList = document.querySelector('ul.songList');
- elements = artistSongs.querySelectorAll('div.item');
- songList.innerHTML = songList.innerHTML+"<li>"+artistName+"</li>\n"
- for( var index=0; index<elements.length; index++ )
- {
- songList.innerHTML = songList.innerHTML+"<li>"+songItem(elements[index],artistName)+"</li>\n"
- }