muyangye / Netease_To_Spotify

网易云音乐歌单迁移至Spotify & OAuth 2.0 requests base class
MIT License
11 stars 2 forks source link

网易云音乐歌单迁移至Spotify

3首歌/秒(Spotify API最近变慢了),保留原歌单顺序,支持任意歌单长度,全过程不产生费用

运行

  1. 命令行输入pip install -r requirements.txt
  2. 创建Spotify app(如没有)
  3. 替换config.yml里的所有值,说明如下:
    • client_id: Spotify app的Client ID
    • client_id: Spotify app的Client secret
    • redirect_uri: Spotify app的Redirect URIs中任意一个
    • spotify_playlist_name: 迁移过后在Spotify里的歌单名,如填已存在的歌单则把所有歌曲插入到歌单最前,否则先创建歌单再迁移
    • cover_image_path: 新歌单封面图路径(图像大小必须小于256 KB),如歌单已存在则不适用,默认值为repo里的"assets/netease.png"
    • netease_playlist_id: 想要迁移的网易云音乐歌单id,可通过网易云音乐Web端歌单链接拿到,比如链接为https://music.163.com/playlist?id=123456789&userid=xxxxxxxx,歌单id就是123456789
  4. 命令行输入python cli.py
  5. 浏览器弹窗提示登录Spotify
  6. 等待运行即可,命令行会显示进度,Spotify无版权的歌曲也会在命令行提示(详见下方)

"无版权"歌曲

由于之前版本经常会出现False Positive(如名字完全不同的歌被加到Spotify里),现加入year search query filter缩小搜索范围(大幅减少,不代表完全没有False Positive了),但由于网易云音乐歌曲的收录时间可能和Spotify不同,会有很多False Negative(Spotify明明有这首歌,但是程序说没有),个人歌单大概每30首1首无版权,个人认为False Negative比False Positive好处理,因为后者不易察觉,前者只需手动再加一次就好了,以下两种类型的歌曲最容易触发“无版权”:

其余无版权歌曲大概率是Spotify真没版权
为避免unicode exception,非英文的无版权歌曲会用字母提示Chuan Qi, Wang Fei

OAuth 2.0 Client

虽然用的是Spotipy库,但之前写过一个适用于所有OAuth 2.0 app获取access token的基类,只需替换OAuth2Client.py中的AUTHORIZATION_ENDPOINTACCESS_TOKEN_ENDPOINT即可,详见这篇博客 (不过抱歉是全英文的,因为本人是留学生在美国找工作所以就写了英文博客2333)

鸣谢