背景需求
网易云音乐只支持收藏歌单,比如 A 可以收藏 B 的歌单,B 可以对歌单进行增删,A 收藏的歌单也发生相应的变化
但如果想实现 A 和 B 都可以对歌单进行增删就行不通了,因为网易云音乐不支持这个功能
如果 A 建一个歌单,B 建一个歌单,然后互相收藏就太蠢了
所以目前已知的背景就是:
- 只能对自己创建的歌单进行增删歌曲
- 无法对收藏的他人的歌单进行增删歌曲
- 收藏的歌单被创建者更新时,收藏者可以得到相应的更新
需求就是:
- 有且只有一份共享的歌单
- 对共享歌单的增删操作要简单
需求分析
动动脑筋,可以换个角度实现共享功能:
- 新申请一个帐号 C,C 创建一个歌单
- A 和 B 共同收藏 C 歌单
- A 和 B 各自新建一个歌单
- A 平时只对自己创建的歌单进行增删歌曲,B 亦然
- 利用脚本从 A 和 B 的歌单读取所有歌曲并整合,最终更新到 C 的歌单
- A 和 B 就能从 C 歌单中得到最全的歌曲,以此实现共享歌单的功能
功能实现
知道了原理之后,其实最难的是第五步
其实只要网易云音乐提供了相应的 API 即可,Google 之后发现已经有轮子可以用了:网易云音乐 API
然后根据 API 写脚本代码了,脚本的逻辑如下:
- 抓取 A 的歌单歌曲,抓取 B 的歌单歌曲,抓取 C 的歌单歌曲
- 对 A 和 B 的歌曲进行合并并去重
- 去重的结果与 C 对比,得到此次应该添加和删除的歌曲列表
- 登录 C 帐号,对 C 的歌单进行添加操作和删除操作
最后,用 crontab
定时触发抓取的逻辑即可
Show me the code
关键代码如下:
1 | // 抓取 A 的歌曲 |
后记
跟其他 技术改变生活 系列的文章一样,依然是那句话
至此,虽然是简简单单的功能,但是,it makes my world better.