网易云音乐和QQ音乐歌单去重
1.写在前面
较早之前博主听音乐场景如下:主要在网易云音乐听歌,辅助QQ音乐听周董的歌。
之后网易云我喜欢的歌曲一首首变灰,博主心想QQ音乐版权比网易云多,然后把歌单导入QQ音乐了,网易云基本处于闲置状态,偶尔听听日推。这时网易云我喜欢歌单800多首,QQ音乐我喜欢歌单1100多首。
1100确实有点多了,在听歌过程中,我把不太喜欢的和听腻了的一点点取消喜欢,目前剩600多首(还会继续精简)。由于导入QQ音乐的时候,QQ音乐有的没版权导入不全,所以网易云我喜欢歌单里还夹杂着QQ音乐没有的歌曲(其中包括很多我已经不喜欢听的歌曲),所以也一直没能把网易云我喜欢歌单无脑全部删除。然后网易云日推听多了之后,新添的我喜欢歌曲越来越多,后来出来的心动模式也挺好用(心动模式只能在我喜欢歌单里使用)。
网易云新添的歌越来越多,就不好每次听歌都用顺序播放;而且QQ音乐好多正听着的歌突然就灰了,但是网易云有版权,所以我萌生出删除网易云里在QQ音乐存在的歌曲,网易云用来听一些小众和QQ音乐突然就灰了的歌。一个800多首,一个600多首,人工筛选根本不可能,所以得靠技术。
所以我先咨询大哥iMSW此路是否可行,大哥iMSW表示此路可行,并对我给予肯定和很多帮助。
关于Api接口方面,来自于Binaryify开发者 https://github.com/Binaryify/NeteaseCloudMusicApi
这个是对应的使用文档 https://binaryify.github.io/NeteaseCloudMusicApi/#/
这是博主在使用Binaryify提供的Api支持,写的网易云音乐和QQ音乐歌单去重项目 https://github.com/Weikido/NeteaseCloudMusicApi
既然已经有可用的Api,可以根据歌曲id进行取消喜欢,满足我的需求需要以下步骤:
1.获取网易云我喜欢歌曲id及对应歌名和QQ音乐我喜欢歌曲歌名
2.获取QQ音乐我喜欢歌单里包含的网易云我喜欢歌曲id
3.根据获取的歌曲id进行取消喜欢
2.获取网易云我喜欢歌曲id及对应歌名和QQ音乐我喜欢歌曲歌名
2.1网页获取我喜欢歌曲id及对应歌名
正愁怎样才能获得网易云我喜欢歌曲id及对应歌名,这篇帖子如天神下凡给了我很大帮助。https://blog.51cto.com/xianhuan/5110240?b=totalstatistic
获取html文件后,用VS Code的html格式化插件把html格式化,由于我俩目的不同,不仅仅需要歌曲歌名,更重要的是歌曲id,所以下一步要获取我喜欢歌曲id及对应歌名。
2.2处理我喜欢歌曲id及对应歌名
对应的get_html_info.py文件在 https://github.com/Weikido/NeteaseCloudMusicApi/blob/master/dislike_ncm_likesong/get_csv/get_html_info.py
例子:根据每首歌所对应的唯一 <a href="/song?id=1467971656">
和唯一 <b title="想在夏日撞见你">
,获取我喜欢列表歌曲的id和对应歌名,获取ncmlike_list.csv
3.获取QQ音乐我喜欢歌单里包含的网易云我喜欢歌曲id
根据这篇帖子可以获取QQ音乐我喜欢歌单id https://blog.csdn.net/acmzw/article/details/123121259
然后到 https://yyrcd.com/n2s/ 获取QQ音乐我喜欢歌单里的歌曲歌名。
将获取的QQ音乐我喜欢歌单里的歌曲歌名写入qqlike_list.csv
获取QQ音乐我喜欢歌单里包含的网易云我喜欢歌曲id
对应的ncm_song_id.py文件在 https://github.com/Weikido/NeteaseCloudMusicApi/blob/master/dislike_ncm_likesong/get_csv/ncm_song_id.py
获取delete_song_norepeat.csv
4.根据获取的歌曲id进行取消喜欢
4.1Api接口和cookie 处理
4.1.1Api接口处理
由于博主对Api接口方面不是很懂,算鼓捣肯定要浪费时间,所以Api接口封装和Api接口测试文件是由大哥iMSW来完成的,分别为:
为了方便调用接口,在原/public/index.html基础新增:账号登录(网页方式)、账号登录(接口方式)、获取喜欢歌曲列表(接口方式)
具体代码在 https://github.com/Weikido/NeteaseCloudMusicApi/blob/master/public/index.html
1 | <h2>功能:</h2> |
4.1.2cookie 处理
因为是跨域请求,根据Api使用手册,所以需要手动传入 cookie ,其他处理方法移步 https://binaryify.github.io/NeteaseCloudMusicApi/#/id=%e8%b0%83%e7%94%a8%e5%89%8d%e9%a1%bb%e7%9f%a5
如上图,在登录成功界面,右键进入Network,点击Copy as cURL(bash)复制获取cookie,然后去 https://curlconverter.com/#python
粘贴后,获取cookie,替换如下部分。
1 | # 因为是跨域请求,直接手动传入 cookie,否则会因为没带上 cookie 导致 301, 具体例子可看 public/test.html, 访问http://localhost:3000/test.html(默认端口的话) 例子使用 jQuery 和 axios |
4.2根据歌曲id取消喜欢
最后根据delete_song_norepeat.csv内的歌曲id进行取消喜欢。
对应的dislikeFuc.py文件在 https://github.com/Weikido/NeteaseCloudMusicApi/blob/master/dislike_ncm_likesong/_my_fuc/dislikeFuc.py
读取delete_song_id.csv文件 获取歌曲id并取消喜欢
5.总结
运行程序前博主网易云我喜欢歌单共844首歌,获取需要删除的歌曲id 447个,运行完成后剩397首。
建议前期运行时,可以10首,20首试运行。
由于频繁取消喜欢会触发系统风控,导致运行失败,所以正式运行也建议30首,50首运行。
本意就是写个小程序满足自己的需求,且博主技术有限,所以代码很粗糙。