Home Debian11 Blog - Spotify
type: channel
link: https://blog.940304.xyz/tag/Spotify/
items: 我的听歌软件 Spotify 和网易云的故事 | 导出网易云的歌单再导入到 Spotify

我的听歌软件 Spotify 和网易云的故事 | 导出网易云的歌单再导入到 Spotify
type: item
date: 2023-04-03T20:42:40+08:00
description: 14年那会，我第一次使用网易云，当时的网易云真是同类软件中用户体验最好的，当时也没有多大的曲库问题。那时我在很多歌曲的评论区还挺活跃的，还有几首（十几首？）歌的评论在热评上🤣。 网易云一直用到了19年，我毕业工作了，19年下半年果断切换到了 Spotify 上，从此国内音乐平台是路人。主要是年纪大了没有各种社交需求了，就听听歌而已，没必要整得花里胡哨，而且Spotify （我美区）的曲库全，多个设备之间的同步、接力功能很好用。 当时是从淘宝上上车的，Spotify Premium 家庭版，我是家庭成员，并非家庭主人。很有趣的是，当时只交了一年的费用，直到现在还没有下车…… 😂️ 真的离谱啊，被我白嫖到了。 最近几个月在比亚迪的车机上听我 Spotify 上标红心的 500 首歌听腻了，有时候也会听一听 podcast 和电台，电台的话主要收听小时候爱听的音乐之声 MusicRadio。 前些天打开了网易云，听到了一首大学时很喜欢的歌曲，金魚花火 - (金鱼花火) - 大塚愛，很久没听觉得好好听！ document.getElementById("huahuo").style.height=document.getElementById("huahuo").scrollWidth*0.9+"px"; 官方的网易云客户端限制很多，于是我找到了一个漂亮的第三方网易云播放程序， https://github.com/qier222/YesPlayMusic 界面非常简洁，程序也很好用。 但是他没有提供 android 和 ios 移动客户端。我在车机上使用 alook 和 x浏览器测试都无法使用 web 版程序。后面作罢。然后打算把网易云我标记红心的那个歌单导出来，然后导入到 Spotify，于是就有了本文。 导出网易云歌单以及突破1000首歌的限制 搜索到了两个项目 source1 source2 执行了 source1 发现可行，但是网易云 web 页面限制了歌单最大显示的歌曲数量是 1000，而我标记的一共有 1623 首，于是又寻找解决方案。不一会搜到一个油猴脚本，可以突破1000的限制，于是安装测试果然解决了问题。 网易云音乐显示完整歌单 解除歌单歌曲展示数量限制 & 播放列表 1000 首上限 https://greasyfork.org/zh-CN/scripts/406054-%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90%E6%98%BE%E7%A4%BA%E5%AE%8C%E6%95%B4%E6%AD%8C%E5%8D%95 安装好之后再次执行 source1 中的 js 脚本，但是这次不凑效了，无法打印出 歌曲 - 歌手 信息，于是我就研究了一下，修改了 js 代码，最终成功运行。 source1 中的脚本 (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); })(); 我修改后的脚本，部分逻辑重写了，好使（而且逻辑更简单了） (function () { function getSinger(trNode) { return trNode.getElementsByClassName("t…