从 Spotify 迁移到 YTMusic 的工具
这是一组用于将“喜欢”的歌曲和播放列表从 Spotify 复制到 YTMusic 的脚本。它提供 CLI 工具和 GUI(由 Yoween 实现,以前称为 spotify_to_ytmusic_gui)。
感谢 @RadicalArti 和 Meet Vora 对此项目的慷慨资助。
您将需要 Python 3.10 及更高版本的最新版本才能工作,3.8-3.10 可能也可以工作。
从以下位置下载适用于 Windows 的 Python:https://www.python.org/downloads/windows/
也可以使用choco来安装: choco install python
跑步:
brew install python
brew install python-tk
通过执行以下操作安装证书:
Macintosh HD > 应用程序 > Python 文件夹 > 双击“安装证书.command”文件。
您可能已经安装了它。请参阅您选择的包管理器来安装它。
该软件包可在 pip 上找到,因此您可以使用以下命令安装它:
pip install spotify2ytmusic
或者:
python3 -m pip install spotify2ytmusic
(不推荐)
另一种选择是克隆此存储库并直接从源运行,而不是 pip。但是,您需要安装“ytmusicapi”软件包,因此您可能至少需要使用 pip 来安装它。
直接从源代码运行:
git clone [email protected]:linsomniac/spotify_to_ytmusic.git
cd spotify_to_ytmusic
pip install ytmusicapi
pip install tk # If using the GUI
然后,您可以在要运行的命令前面添加python3 -m spotify2ytmusic
,例如:
python3 -m spotify2ytmusic gui
python3 -m spotify2ytmusic list_playlists
python3 -m spotify2ytmusic load_liked
[etc...]
如果您是通过 PIP 安装的,您应该能够运行: s2yt_gui
否则,如果从源运行:
在 Windows 上: python -m spotify2ytmusic gui
或者在 Linux 上: python3 -m spotify2ytmusic gui
login
按钮或者
在控制台中运行ytmusicapi oauth
。
或者
运行s2yt_ytoauth
或者
运行python -m spotify2ytmusic ytoauth
这将为您提供一个 URL,访问该 URL 并授权该应用程序。完成导入后,您可以删除此应用程序的授权。
这将写入一个文件“oauth.json”。在应用程序获得授权时,请保密此文件。该文件包含登录会话令牌。
ytmusicapi 是该软件的依赖项,应作为“pip install”的一部分进行安装。
Backup
按钮,等待完成并切换到下一个选项卡。或者执行以下所有步骤
下载 Spotify 备份。
运行spotify-backup.py
,它将帮助您授权访问您的 Spotify 帐户。
运行: python3 spotify-backup.py playlists.json --dump=liked,playlists --format=json
这会将您的播放列表和喜欢的歌曲保存到文件“playlists.json”中。
如下所述,原始程序以“错误”的顺序添加歌曲。这是我不喜欢的功能,因此我创建了一个脚本来反转它们。它看起来很可靠,但如果您发现任何奇怪的地方,请提出问题。无论如何,它都会创建原始文件的备份,以防万一。
示例: python3 .reverse_playlist.py ./playlists.json -r
import
按钮,等待完成并切换到下一个选项卡。它将浏览您在 Spotify 喜欢的歌曲,以及在 YTMusic 上喜欢的歌曲。它将显示来自 Spotify 的歌曲,然后显示它在 YTMusic 上找到的它喜欢的歌曲。我抽查了我的歌曲,它似乎在将 YTMusic 歌曲与 Spotify 匹配方面做得很好。到目前为止,我还没有在几百首歌曲中看到任何失败,但更深奥的歌曲可能有问题。
list
按钮,等待完成并切换到下一个选项卡。这将列出您在 Spotify 和 YTMusic 上拥有的播放列表,以便您可以单独复制它们。
您可以复制所有播放列表,也可以对各个播放列表进行更精确的复制。复制所有播放列表将使用 Spotify 播放列表的名称作为 YTMusic 上的目标播放列表名称。
copy
按钮,然后等待其完成并切换到下一个选项卡。注意:这不会复制喜欢的播放列表(请参阅上文来执行此操作)。
在列表输出中,找到 Spotify 播放列表和 YTMusic 播放列表的“播放列表 ID”(第一列)。
copy
按钮。复制播放列表将采用 YTMusic 播放列表的名称,如果播放列表不存在,则将创建该播放列表(如果您使用“+”启动 YTMusic 播放列表):
如果失败,重新运行“copy_playlist”或“load_liked”应该是安全的,它不会重复播放列表上的条目。
ytmusicapi oauth
或s2yt_ytoauth
或python -m spotify2ytmusic ytoauth
这将为您提供一个 URL,访问该 URL 并授权该应用程序。完成导入后,您可以删除此应用程序的授权。
这将写入一个文件“oauth.json”。在应用程序获得授权时,请保密此文件。该文件包含登录会话令牌。
ytmusicapi 是该软件的依赖项,应作为“pip install”的一部分进行安装。
下载 Spotify 备份。
运行spotify-backup.py
,它将帮助您授权访问您的 Spotify 帐户。
运行: python3 spotify-backup.py playlists.json --dump=liked,playlists --format=json
这会将您的播放列表和喜欢的歌曲保存到文件“playlists.json”中。
运行: s2yt_load_liked
它将浏览您在 Spotify 喜欢的歌曲,以及在 YTMusic 上喜欢的歌曲。它将显示来自 Spotify 的歌曲,然后显示它在 YTMusic 上找到的它喜欢的歌曲。我抽查了我的歌曲,它似乎在将 YTMusic 歌曲与 Spotify 匹配方面做得很好。到目前为止,我还没有在几千首歌曲中看到过任何失败,但更多深奥的歌曲可能有问题。
运行: s2yt_load_liked_albums
Spotify 将喜欢的专辑存储在“喜欢的歌曲”播放列表之外。这是将您喜欢的专辑加载到 YTMusic 喜欢的歌曲中的命令。
运行s2yt_list_playlists
这将列出您在 Spotify 和 YTMusic 上拥有的播放列表。您需要单独复制它们。
您可以复制所有播放列表,也可以对各个播放列表进行更精确的复制。复制所有播放列表将使用 Spotify 播放列表的名称作为 YTMusic 上的目标播放列表名称。要复制所有播放列表,请运行:
s2yt_copy_all_playlists
注意:这不会复制喜欢的播放列表(请参阅上文来执行此操作)。
在上面的列表输出中,找到 Spotify 播放列表和 YTMusic 播放列表的“播放列表 id”(第一列),然后运行:
s2yt_copy_playlist
如果您需要创建播放列表,可以运行:
s2yt_create_playlist "
或者,复制播放列表可以采用 YTMusic 播放列表的名称,如果您使用“+”启动 YTMusic 播放列表,则将创建该播放列表(如果该播放列表不存在):
s2yt_copy_playlist
例如:
s2yt_copy_playlist SPOTIFY_PLAYLIST_ID "+Feeling Like a PUNK"
如果失败,重新运行“copy_playlist”或“load_liked”应该是安全的,它不会重复播放列表上的条目。
这主要是为了调试,但有一个命令可以在 YTMusic 中搜索曲目:
s2yt_search --artist
该函数首先在 YTMusic 上按给定艺术家姓名搜索专辑。
然后,它会迭代前三个专辑结果,并尝试查找与给定曲目名称完全相同的曲目。如果找到匹配项,则返回曲目信息。
如果该函数在专辑中找不到该曲目,则会按给定的曲目名称和艺术家姓名搜索歌曲。
根据 yt_search_algo 参数,它执行以下操作之一:
如果 yt_search_algo 为 0,则仅返回第一首歌曲结果。
如果 yt_search_algo 为 1,它将迭代歌曲结果并返回与曲目名称、艺术家姓名和专辑名称完全匹配的第一首歌曲。如果找不到匹配项,则会引发 ValueError。
如果 yt_search_algo 为 2,则执行模糊匹配。它会删除歌曲标题中括号中的所有内容,并检查与曲目名称、艺术家名称和专辑名称是否匹配。如果找不到匹配项,则会搜索包含曲目名称和艺术家姓名的视频。如果仍然找不到匹配项,则会引发 ValueError。
如果该函数无法使用上述任何方法找到曲目,则会引发 ValueError。
不,它可以在 Linux/Windows/MacOS 上运行。
我收到“找不到Spotify2ytmusic 的匹配发行版”。
这已在 Issue #39 中报告过,并且似乎 python 版本之间不匹配。那里的用户在 MacOS 上需要安装特定版本的 Python,然后使用匹配版本的 PIP:
brew install [email protected]
brew install [email protected]
pip3.10 install spotify2ytmusic
查找算法如何工作?
给定 Spotify 曲目信息,它会在 YTMusic 上查找同一艺术家的专辑,然后查看前 3 个热门歌曲,查找名称完全相同的曲目。如果找不到确切的曲目,它会在歌曲中搜索同一艺术家的曲目名称,然后简单地返回第一首歌曲。
这个想法是,找到专辑和艺术家,然后寻找精确的曲目匹配,比搜索歌曲和艺术家并依靠 YTMusic 算法来解决问题更可能准确,特别是对于可能有的短曲目。许多矛盾的热门歌曲,例如“Survival by Yes”。
我的副本失败并出现重复的“错误:(重试)服务器返回 HTTP 400:错误请求”。
尝试使用“--track-sleep=3”参数运行,在轨道之间进行 3 秒的睡眠。这将需要更长的时间,但在更快的速度失败的地方可能会成功。
知识共享零 v1.0 通用
Spotify-backup.py 根据 MIT 许可证获得许可。有关更多信息,请参阅 https://github.com/caseychu/spotify-backup。