Skip to content

Instantly share code, notes, and snippets.

@XueshiQiao
Last active March 12, 2024 15:27
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save XueshiQiao/858974dbf86bc91030fbf49f9c6daf43 to your computer and use it in GitHub Desktop.
Save XueshiQiao/858974dbf86bc91030fbf49f9c6daf43 to your computer and use it in GitHub Desktop.
导出网易云音乐歌单到 AppleMusic / Spotify 等平台
/**
* 使用方法:
* 1. 用 Chrome 打开歌单的 web 页面(可以通过分享拿到链接,链接类似这样:http://music.163.com/playlist?id=xxx&userid=yyy)
* 2. 然后右键“检查”(如果有左上角有 device 选项,需要选择 Laptop 开头的,可以在 Edit/编辑 里添加)
* 3. 在 console 里输入下面脚本,即可输出 “歌曲名 - 歌手名” 格式的内容:
Springsteen - Eric Church
Chattahoochee - Alan Jackson
Baby Now That I Found You - Alison Krauss
Check Yes or No - George Strait
Meanwhile Back At Mama's (feat. Faith Hill) - Tim McGraw/Faith Hill
。。
* 4.通过 https://www.tunemymusic.com/zh-cn 导出到 Apple Music 或者 Spotify 等音乐平台
*/
(function () {
let iframeDocument = document.getElementById("g_iframe").contentDocument;
let tempElement = iframeDocument.createElement("div");
function getSinger(trNode) {
tempElement.innerHTML = trNode.innerHTML;
return tempElement.getElementsByTagName("span")[0].title;
}
function getSongName(trNode) {
tempElement.innerHTML = trNode.innerHTML;
return tempElement.getElementsByTagName("b")[0].title;
}
let allSongsTRNode = iframeDocument.querySelectorAll('table.m-table > tbody > tr')
var songsStr = "";
allSongsTRNode.forEach(songTR => {
songsStr += (getSongName(songTR.childNodes[1]) + " - " + getSinger(songTR.childNodes[3]));
songsStr += "\n";
});
console.log(songsStr);
})();
@TachikakaMin
Copy link

@hellodk34

It works!

@qingchunnh
Copy link

@hellodk34 大佬可以再加一个专辑嘛,歌名-歌手-专辑这样的

@hellodk34
Copy link

@qingchunnh

使用下面的 js 代码,经测试是 ok 的

(function () {

    function getSinger(trNode) {
        return trNode.getElementsByClassName("text")[0].title;
    }

    function getSongName(trNode) {
        return trNode.getElementsByTagName("b")[0].title;
    }
	
	function getAlbumName(trNode) {
		return trNode.getElementsByTagName("td")[4].getElementsByTagName("a")[0].title;
	}

    let allSongsTRNode = document.querySelectorAll('table.m-table  > tbody > tr')

    var songsStr = "";
    allSongsTRNode.forEach(songTR => {
        songsStr += (getSongName(songTR) + " - " + getSinger(songTR) + " - " + getAlbumName(songTR));
        songsStr += "\n";
    });
    console.log(songsStr);
})();

日志如下

Reverie - ILLENIUM/Dana Salah - Ashes
나의 옛날이야기 - (我的老故事) - IU - 꽃갈피
이름에게 - (致姓名) - IU - Palette
逃げるは恥だが役に立つ~あなたに必要とされたくて~ - 末廣健一郎 - TBS系 火曜ドラマ「逃げるは恥だが役に立つ」オリジナル・サウンドトラック Vol.2
마침표 - (终止符) - IU - Palette
ごはんを食べよう - (一起吃饭吧) - Goose house - Goose house Phrase #07 Soundtrack?
糸 - (线) - Aimer - ONE / 花の唄 / 六等星の夜 Magic Blue ver. (初回生産限定盤)
笑顔の花 - (笑靥如花) - Goose house - 笑顔の花
삐삐 - (BBIBBI) - IU - 삐삐
To You. - 雨宮天 - Ring of Fortune

每个减号左右各有一个空格。

@qingchunnh
Copy link

@qingchunnh

使用下面的 js 代码,经测试是 ok 的

(function () {

    function getSinger(trNode) {
        return trNode.getElementsByClassName("text")[0].title;
    }

    function getSongName(trNode) {
        return trNode.getElementsByTagName("b")[0].title;
    }
	
	function getAlbumName(trNode) {
		return trNode.getElementsByTagName("td")[4].getElementsByTagName("a")[0].title;
	}

    let allSongsTRNode = document.querySelectorAll('table.m-table  > tbody > tr')

    var songsStr = "";
    allSongsTRNode.forEach(songTR => {
        songsStr += (getSongName(songTR) + " - " + getSinger(songTR) + " - " + getAlbumName(songTR));
        songsStr += "\n";
    });
    console.log(songsStr);
})();

日志如下

Reverie - ILLENIUM/Dana Salah - Ashes
나의 옛날이야기 - (我的老故事) - IU - 꽃갈피
이름에게 - (致姓名) - IU - Palette
逃げるは恥だが役に立つ~あなたに必要とされたくて~ - 末廣健一郎 - TBS系 火曜ドラマ「逃げるは恥だが役に立つ」オリジナル・サウンドトラック Vol.2
마침표 - (终止符) - IU - Palette
ごはんを食べよう - (一起吃饭吧) - Goose house - Goose house Phrase #07 Soundtrack?
糸 - (线) - Aimer - ONE / 花の唄 / 六等星の夜 Magic Blue ver. (初回生産限定盤)
笑顔の花 - (笑靥如花) - Goose house - 笑顔の花
삐삐 - (BBIBBI) - IU - 삐삐
To You. - 雨宮天 - Ring of Fortune

每个减号左右各有一个空格。

感谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment