pip install -r requirements.txt
config.yml
里的所有值,说明如下:
client_id
: Spotify app的Client IDclient_id
: Spotify app的Client secretredirect_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就是123456789python cli.py
由于之前版本经常会出现False Positive(如名字完全不同的歌被加到Spotify里),现加入year search query filter缩小搜索范围(大幅减少,不代表完全没有False Positive了),但由于网易云音乐歌曲的收录时间可能和Spotify不同,会有很多False Negative(Spotify明明有这首歌,但是程序说没有),个人歌单大概每30首1首无版权,个人认为False Negative比False Positive好处理,因为后者不易察觉,前者只需手动再加一次就好了,以下两种类型的歌曲最容易触发“无版权”:
其余无版权歌曲大概率是Spotify真没版权
为避免unicode exception,非英文的无版权歌曲会用字母提示
虽然用的是Spotipy库,但之前写过一个适用于所有OAuth 2.0 app获取access token的基类,只需替换OAuth2Client.py
中的AUTHORIZATION_ENDPOINT
和ACCESS_TOKEN_ENDPOINT
即可,详见这篇博客 (不过抱歉是全英文的,因为本人是留学生在美国找工作所以就写了英文博客2333)