将Spotify播放列表复制到YTMusic/YouTube Music
项目描述
Spotify到YTMusic迁移工具
概述
这是一套用于将“喜欢”的歌曲和播放列表从Spotify复制到YTMusic的脚本。它提供了CLI工具和GUI(由Yoween实现,之前称为spotify_to_ytmusic_gui)。
感谢
感谢@RadicalArti和Meet Vora对本项目的慷慨财务捐助。
入门指南
安装Python(您可能已经安装了)
您需要一个相对较新的Python 3.10版本及以上,已知3.10及以上版本可以正常工作,3.8-3.10版本可能也可以。
对于Windows
从以下网址下载Python for Windows: https://pythonlang.cn/downloads/windows/
您也可以使用choco安装它: choco install python
对于MacOS
运行
brew install python
brew install python-tk
通过以下方式安装证书
Macintosh HD > Applications > Python Folder > 双击 "Install Certificates.command" 文件。
对于Linux
您可能已经安装了。请查看您选择的包管理器进行安装。
安装spotify2ytmusic(通过pip)
此软件包可在pip上找到,因此您可以使用以下命令安装它:
pip安装spotify2ytmusic
或
python3 -m pip install spotify2ytmusic
(或)从源代码运行
(不推荐)
另一个选项,而不是使用pip,是克隆此存储库并直接从源代码运行。但是,您需要安装"ytmusicapi"软件包,因此您可能至少需要使用pip安装该软件包。
直接从源代码运行
git clone git@github.com: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
登录 YTMusic - 第 0 选项卡
在第一个选项卡上点击 登录
按钮
或者
在控制台中运行 ytmusicapi oauth
。
或者
运行 s2yt_ytoauth
或者
运行 python -m spotify2ytmusic ytoauth
这将给您一个 URL,访问该 URL 并授权应用程序。导入完成后,您可以移除此应用程序的授权。
这将创建一个 "oauth.json" 文件。在应用程序授权期间,请保密此文件。该文件包含已登录的会话令牌。
ytmusicapi 是此软件的依赖项,应在 "pip install" 作为一部分安装。
备份您的 Spotify 播放列表 - 第 1 选项卡
点击 备份
按钮,等待完成并切换到下一选项卡。
或者 执行以下所有步骤
下载 spotify-backup。
运行 spotify-backup.py
,它将帮助您授权访问您的 Spotify 账户。
运行:python3 spotify-backup.py playlists.json --dump=liked,playlists --format=json
这会将您的播放列表和喜欢的歌曲保存到 "playlists.json" 文件中。
反转您的播放列表 - 第 2 选项卡
如下所述,原始程序以 '错误' 的顺序添加歌曲。这不是我喜欢的功能,所以我创建了一个脚本来反转它们。它似乎很可靠,但如果您发现任何奇怪之处,请提出问题。无论如何,它会为原始文件创建一个备份。
示例:python3 .\reverse_playlist.py ./playlists.json -r
导入您喜欢的歌曲 - 第 3 选项卡
点击 导入
按钮,等待完成并切换到下一选项卡。
它将遍历您的 Spotify 喜欢的歌曲,并在 YTMusic 上喜欢它们。它将显示 Spotify 中的歌曲,然后是它在 YTMusic 上找到并喜欢的歌曲。我已经检查了我的歌曲,它似乎在将 YTMusic 歌曲与 Spotify 匹配方面做得很好。到目前为止,我没有看到几百首歌曲中有任何失败,但对于更难以捉摸的标题,可能会有问题。
列出您的播放列表 - 第 4 选项卡
点击 列表
按钮,等待完成并切换到下一选项卡。
这将列出您在 Spotify 和 YTMusic 上的播放列表,以便您可以逐个复制。
复制您的播放列表 - 第 5 选项卡
您可以选择复制 所有 播放列表,或者执行更精确的单个播放列表复制。复制所有播放列表将使用 Spotify 播放列表的名称作为 YTMusic 上目标播放列表的名称。
要复制所有播放列表,请点击 复制
按钮,等待完成并切换到下一选项卡。
注意:这不会复制喜欢的播放列表(请参见上面的步骤以完成此操作)。
复制特定播放列表 - 第 6 选项卡
在列表输出中,找到 Spotify 播放列表和 YTMusic 播放列表的 "播放列表 ID"(第一列)。
然后填写两个输入字段并点击 复制
按钮。
复制播放列表将使用 YTMusic 播放列表的名称,如果以 "+" 开头 YTMusic 播放列表,则会创建播放列表(如果不存在)。
如果 "copy_playlist" 或 "load_liked" 失败,重新运行应该是安全的,它不会在播放列表中重复条目。
命令行使用
登录 YTMusic
ytmusicapi oauth
或 s2yt_ytoauth
或 python -m spotify2ytmusic ytoauth
这将给您一个 URL,访问该 URL 并授权应用程序。导入完成后,您可以移除此应用程序的授权。
这将创建一个 "oauth.json" 文件。在应用程序授权期间,请保密此文件。该文件包含已登录的会话令牌。
ytmusicapi 是此软件的依赖项,应在 "pip install" 作为一部分安装。
备份您的 Spotify 播放列表
下载 spotify-backup。
运行 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播放列表的“播放列表ID”(第一列)以及YTMusic播放列表的ID,然后运行
s2yt_copy_playlist <SPOTIFY_PLAYLIST_ID> <YTMUSIC_PLAYLIST_ID>
如果您需要创建播放列表,可以运行
s2yt_create_playlist "<PLAYLIST_NAME>"
或者 复制播放列表可以使用YTMusic播放列表的名称,如果以"+"开始YTMusic播放列表,将创建播放列表
s2yt_copy_playlist <SPOTIFY_PLAYLIST_ID> +<YTMUSIC_PLAYLIST_NAME>
例如
s2yt_copy_playlist SPOTIFY_PLAYLIST_ID "+Feeling Like a PUNK"
如果 "copy_playlist" 或 "load_liked" 失败,重新运行应该是安全的,它不会在播放列表中重复条目。
搜索YTMusic曲目
这主要用于调试,但有一个命令可以搜索YTMusic中的曲目
s2yt_search --artist <ARTIST> --album <ALBUM> <TRACK_NAME>
搜索算法的详细信息
函数首先在YTMusic中按给定艺术家名称搜索专辑。
然后它遍历前三个专辑结果,并尝试找到与给定曲目名称完全相同的曲目。如果找到匹配项,则返回曲目信息。
如果函数在专辑中找不到曲目,它将按给定曲目名称和艺术家名称搜索歌曲。
根据yt_search_algo参数,它执行以下操作之一
如果yt_search_algo是0,它仅返回第一个歌曲结果。
如果yt_search_algo是1,它遍历歌曲结果,并返回第一个与曲目名称、艺术家名称和专辑名称完全匹配的歌曲。如果找不到匹配项,则引发ValueError。
如果yt_search_algo是2,它执行模糊匹配。它在歌曲标题中删除所有括号内的内容,并检查与曲目名称、艺术家名称和专辑名称的匹配。如果找不到匹配项,它将搜索具有曲目名称和艺术家名称的视频。如果仍然找不到匹配项,则引发ValueError。
如果函数使用上述任何方法都无法找到曲目,则引发ValueError。
常见问题解答
- 这个在手机上运行吗?
不,这个在Linux/Windows/MacOS上运行。
-
我得到“没有找到匹配的发行版:spotify2ytmusic”。
这个问题已在问题 #39 中报告,似乎是与Python版本不匹配。那里的用户,在MacOS上,需要安装特定版本的Python,然后使用匹配的版本PIP
brew install python@3.10 brew install python-tk@3.10 pip3.10 install spotify2ytmusic
-
查找算法是如何工作的?
鉴于Spotify曲目信息,它会在YTMusic上查找同一位艺术家专辑,然后查看前三首歌曲,寻找与确切名称相同的曲目。如果在找不到该确切曲目的情况下,它将搜索同一位艺术家名为该曲目的歌曲,并简单地返回第一个结果。
这个想法是,找到专辑和艺术家,然后寻找完全匹配的曲目,比搜索歌曲和艺术家并依赖YTMusic算法来解决问题更有可能准确,尤其是在像“Survival by Yes”这样的短曲可能有很多冲突的搜索结果的情况下。
-
我的副本在重复出现“ERROR: (Retrying) 服务器返回HTTP 400: 错误请求”。
尝试使用"--track-sleep=3"参数在曲目之间进行3秒休眠。这将花费更长的时间,但可能在快速速率失败的地方成功。
许可
Creative Commons Zero v1.0 通用
spotify-backup.py 在MIT许可证下发布。有关更多信息,请参阅https://github.com/caseychu/spotify-backup。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
spotify2ytmusic-0.9.30.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b953088807bf99f9618323283f430b19f93a055ecf5d9e71848827a6b74ee152 |
|
MD5 | 89b939146d7837c7094247a721e780da |
|
BLAKE2b-256 | 205c520c69707aec1f8154216415874d32388bc93efabbdec0ac7102ca7978b3 |
spotify2ytmusic-0.9.30-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ba4154da5ace73fb92b5b0a8361bba5618a0f172172b307351947d4f98b805ed |
|
MD5 | 9092562abad0ff7bfc6853c76e0456f5 |
|
BLAKE2b-256 | 1a820d79cd778722a406256b0306f6dde8bbcde38a563b6ac55869d10b63fdd3 |