跳转到主要内容

将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 oauths2yt_ytoauthpython -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 (23.0 kB 查看哈希值)

上传时间 源代码

构建发行版

spotify2ytmusic-0.9.30-py3-none-any.whl (22.9 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面