Last active
October 25, 2024 19:29
-
-
Save XueshiQiao/858974dbf86bc91030fbf49f9c6daf43 to your computer and use it in GitHub Desktop.
导出网易云音乐歌单到 AppleMusic / Spotify 等平台
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 使用方法: | |
* 1. 用 Chrome 打开歌单的 web 页面(可以通过分享拿到链接,链接类似这样:http://music.163.com/playlist?id=xxx&userid=yyy) | |
* 2. 然后右键“检查”(如果有左上角有 device 选项,需要选择 Laptop 开头的,可以在 Edit/编辑 里添加,添加的时候注意 “User Agent string” 里选择 Desktop) | |
* 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 等音乐平台 | |
*/ | |
// 原代码已失效,更新为评论区 @hellodk34 提供的代码,感谢 | |
(function () { | |
function getSinger(trNode) { | |
return trNode.getElementsByClassName("text")[0].title; | |
} | |
function getSongName(trNode) { | |
return trNode.getElementsByTagName("b")[0].title; | |
} | |
let allSongsTRNode = document.querySelectorAll('table.m-table > tbody > tr') | |
var songsStr = ""; | |
allSongsTRNode.forEach(songTR => { | |
songsStr += (getSongName(songTR) + " - " + getSinger(songTR)); | |
songsStr += "\n"; | |
}); | |
console.log(songsStr); | |
})(); |
使用下面的 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
每个减号左右各有一个空格。
现在还可以嘛?我敲完了提示undefined,没有任何其他输出
切换成Laptop开头的 device后需要再手动刷新下 如果没登录,只显示6首歌,可以点击页面上的分享按钮,登录后会显示1k首歌,再次重复楼主的第三步和第四步,就可以导入1k首了 ps 在手机上操作更顺利
我发现我的电脑没有预设的laptop....全是手机,然后我自己自定义了一个也不行,没有输出。
@gannan123 我这测试自定义一个是可以的,但是"Use agent string” 那里默认是 Mobile,要改为 Desktop.
比较诡异,在界面等待曲目加载完成再输入得到的是undefined,等待十分钟之后相同代码得到了正确结果。
补充了正确替换空格的操作。
(function () {
function getSinger(trNode) {
return trNode.getElementsByClassName("text")[0].title.replace(/\u00A0/g, " ");
}
function getSongName(trNode) {
return trNode.getElementsByTagName("b")[0].title.replace(/\u00A0/g, " ");
}
function getAlbumName(trNode) {
return trNode.getElementsByTagName("td")[4].getElementsByTagName("a")[0].title.replace(/\u00A0/g, " ");
}
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);
})();
// 获取包含所有歌曲信息的 tbody 元素
const tbody = document.querySelector('tbody');
// 存储歌曲信息的数组
const songs = [];
// 遍历 tbody 中的每一行
tbody.querySelectorAll('tr').forEach(row => {
// 获取歌曲名
const songTitle = row.querySelector('td:nth-child(2) b').getAttribute('title');
// 获取歌手名
const artistName = row.querySelector('td:nth-child(4) div').getAttribute('title');
// 将格式化的“歌手 - 歌曲名”字符串加入数组
if (songTitle && artistName) {
songs.push(`${artistName} - ${songTitle}`);
}
});
// 将所有歌曲信息输出,每行一对数据
console.log(songs.join('\n'));
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
感谢