Alat untuk berpindah dari Spotify ke YTMusic
Ini adalah sekumpulan skrip untuk menyalin lagu dan playlist yang "disukai" dari Spotify ke YTMusic. Ini menyediakan alat CLI dan GUI (diimplementasikan oleh Yoween, sebelumnya disebut spotify_to_ytmusic_gui).
Terima kasih kepada @RadicalArti dan Meet Vora atas kontribusi finansial mereka yang besar untuk proyek ini.
Anda memerlukan versi terbaru dari Python 3.10 dan yang lebih baru yang diketahui berfungsi, 3.8-3.10 mungkin berfungsi.
Unduh Python untuk Windows dari: https://www.python.org/downloads/windows/
Anda juga dapat menggunakan choco untuk menginstalnya: choco install python
Berlari:
brew install python
brew install python-tk
Instal sertifikat dengan melakukan:
Macintosh HD > Aplikasi > Folder Python > klik dua kali pada file "Instal Sertifikat.command".
Anda mungkin sudah menginstalnya. Lihat manajer paket pilihan Anda untuk menginstalnya.
Paket ini tersedia di pip, sehingga Anda dapat menginstalnya menggunakan:
pip install spotify2ytmusic
atau:
python3 -m pip install spotify2ytmusic
(Tidak disarankan)
Pilihan lain, selain pip, adalah mengkloning repo ini dan menjalankannya langsung dari sumbernya. Namun, Anda perlu menginstal paket "ytmusicapi", jadi setidaknya Anda mungkin ingin menggunakan pip untuk menginstalnya.
Untuk menjalankan langsung dari sumber:
git clone [email protected]:linsomniac/spotify_to_ytmusic.git
cd spotify_to_ytmusic
pip install ytmusicapi
pip install tk # If using the GUI
Kemudian Anda dapat mengawali perintah yang ingin Anda jalankan dengan python3 -m spotify2ytmusic
, misalnya:
python3 -m spotify2ytmusic gui
python3 -m spotify2ytmusic list_playlists
python3 -m spotify2ytmusic load_liked
[etc...]
Jika Anda telah menginstal melalui PIP, Anda seharusnya dapat menjalankan: s2yt_gui
Sebaliknya, jika dijalankan dari sumber:
Di Windows: python -m spotify2ytmusic gui
Atau di Linux: python3 -m spotify2ytmusic gui
login
pada tab pertamaATAU
Jalankan ytmusicapi oauth
di konsol.
ATAU
Jalankan s2yt_ytoauth
ATAU
Jalankan python -m spotify2ytmusic ytoauth
Ini akan memberi Anda URL, kunjungi URL itu dan otorisasi aplikasi. Setelah selesai mengimpor, Anda dapat menghapus otorisasi untuk aplikasi ini.
Ini akan menulis file "oauth.json". Jaga kerahasiaan file ini saat aplikasi diotorisasi. File ini menyertakan token sesi masuk.
ytmusicapi adalah ketergantungan perangkat lunak ini dan harus diinstal sebagai bagian dari "penginstalan pip".
Backup
, dan tunggu hingga selesai dan beralih ke tab berikutnya.ATAU lakukan semua langkah di bawah ini
Unduh cadangan spotify.
Jalankan spotify-backup.py
dan ini akan membantu Anda mengotorisasi akses ke akun spotify Anda.
Jalankan: python3 spotify-backup.py playlists.json --dump=liked,playlists --format=json
Ini akan menyimpan daftar putar dan lagu yang Anda sukai ke dalam file "playlists.json".
Seperti disebutkan di bawah, program aslinya menambahkan lagu dalam urutan yang 'salah'. Itu adalah fitur yang saya tidak suka, jadi saya membuat skrip untuk membalikkannya. Tampaknya dapat diandalkan, tetapi jika Anda menemukan sesuatu yang aneh, silakan buka terbitannya. Itu membuat cadangan file asli untuk berjaga-jaga.
Contoh: python3 .reverse_playlist.py ./playlists.json -r
import
, dan tunggu hingga selesai dan beralih ke tab berikutnya.Ini akan menelusuri lagu-lagu yang Anda sukai di Spotify, dan menyukainya di YTMusic. Ini akan menampilkan lagu dari Spotify dan kemudian lagu yang ditemukan di YTMusic yang disukainya. Saya telah memeriksa lagu-lagu saya dan tampaknya berhasil mencocokkan lagu-lagu YTMusic dengan Spotify dengan baik. Sejauh ini saya belum melihat satu pun kegagalan pada beberapa ratus lagu yang sudah dibaca, tetapi judul-judul yang lebih esoteris mungkin bermasalah.
list
, dan tunggu hingga selesai dan beralih ke tab berikutnya.Ini akan mencantumkan daftar putar yang Anda miliki di Spotify dan YTMusic, sehingga Anda dapat menyalinnya satu per satu.
Anda dapat menyalin semua daftar putar, atau membuat salinan lebih lanjut dari masing-masing daftar putar. Menyalin semua playlist akan menggunakan nama playlist Spotify sebagai nama playlist tujuan di YTMusic.
copy
, dan tunggu hingga selesai dan beralih ke tab berikutnya.CATATAN : Ini tidak menyalin playlist yang Disukai (lihat di atas untuk melakukannya).
Dalam keluaran daftar, temukan "id daftar putar" (kolom pertama) dari daftar putar Spotify dan daftar putar YTMusic.
copy
.Salinan playlist akan mengambil nama playlist YTMusic dan akan membuat playlist jika tidak ada, jika Anda memulai playlist YTMusic dengan tanda "+":
Menjalankan kembali "copy_playlist" atau "load_liked" jika gagal harus aman, tidak akan menduplikasi entri pada playlist.
ytmusicapi oauth
atau s2yt_ytoauth
atau python -m spotify2ytmusic ytoauth
Ini akan memberi Anda URL, kunjungi URL itu dan otorisasi aplikasi. Setelah selesai mengimpor, Anda dapat menghapus otorisasi untuk aplikasi ini.
Ini akan menulis file "oauth.json". Jaga kerahasiaan file ini saat aplikasi diotorisasi. File ini menyertakan token sesi masuk.
ytmusicapi adalah ketergantungan perangkat lunak ini dan harus diinstal sebagai bagian dari "penginstalan pip".
Unduh cadangan spotify.
Jalankan spotify-backup.py
dan ini akan membantu Anda mengotorisasi akses ke akun spotify Anda.
Jalankan: python3 spotify-backup.py playlists.json --dump=liked,playlists --format=json
Ini akan menyimpan daftar putar dan lagu yang Anda sukai ke dalam file "playlists.json".
Jalankan: s2yt_load_liked
Ini akan menelusuri lagu-lagu yang Anda sukai di Spotify, dan menyukainya di YTMusic. Ini akan menampilkan lagu dari Spotify dan kemudian lagu yang ditemukan di YTMusic yang disukainya. Saya telah memeriksa lagu-lagu saya dan sepertinya berhasil mencocokkan lagu-lagu YTMusic dengan Spotify dengan baik. Sejauh ini saya belum melihat satu pun kegagalan pada beberapa ribu lagu, tetapi judul-judul yang lebih esoteris mungkin bermasalah.
Jalankan: s2yt_load_liked_albums
Toko Spotify menyukai album di luar playlist "Lagu yang Disukai". Ini adalah perintah untuk memuat album yang Anda sukai ke dalam lagu yang disukai YTMusic.
Jalankan s2yt_list_playlists
Ini akan mencantumkan daftar putar yang Anda miliki di Spotify dan YTMusic. Anda harus menyalinnya satu per satu.
Anda dapat menyalin semua daftar putar, atau membuat salinan lebih lanjut dari masing-masing daftar putar. Menyalin semua playlist akan menggunakan nama playlist Spotify sebagai nama playlist tujuan di YTMusic. Untuk menyalin semua daftar putar, jalankan:
s2yt_copy_all_playlists
CATATAN : Ini tidak menyalin playlist yang Disukai (lihat di atas untuk melakukannya).
Dalam output daftar di atas, temukan "id daftar putar" (kolom pertama) dari daftar putar Spotify, dan daftar putar YTMusic, lalu jalankan:
s2yt_copy_playlist <SPOTIFY_PLAYLIST_ID> <YTMUSIC_PLAYLIST_ID>
Jika Anda perlu membuat playlist, Anda dapat menjalankan:
s2yt_create_playlist "<PLAYLIST_NAME>"
Atau salinan playlist dapat mengambil nama playlist YTMusic dan akan membuat playlist jika tidak ada, jika Anda memulai playlist YTMusic dengan tanda "+":
s2yt_copy_playlist <SPOTIFY_PLAYLIST_ID> +<YTMUSIC_PLAYLIST_NAME>
Misalnya:
s2yt_copy_playlist SPOTIFY_PLAYLIST_ID "+Feeling Like a PUNK"
Menjalankan kembali "copy_playlist" atau "load_liked" jika gagal harus aman, tidak akan menduplikasi entri pada playlist.
Ini sebagian besar untuk debugging, tetapi ada perintah untuk mencari trek di YTMusic:
s2yt_search --artist <ARTIST> --album <ALBUM> <TRACK_NAME>
Fungsi ini pertama-tama mencari album berdasarkan nama artis tertentu di YTMusic.
Kemudian mengulangi tiga hasil album pertama dan mencoba menemukan lagu dengan nama yang sama persis dengan nama lagu yang diberikan. Jika menemukan kecocokan, ia mengembalikan informasi trek.
Jika fungsi tersebut tidak dapat menemukan trek dalam album, maka fungsi tersebut akan mencari lagu berdasarkan nama trek dan nama artis yang diberikan.
Bergantung pada parameter yt_search_algo, ia melakukan salah satu tindakan berikut:
Jika yt_search_algo adalah 0, ini hanya mengembalikan hasil lagu pertama.
Jika yt_search_algo adalah 1, ia akan mengulangi hasil lagu dan mengembalikan lagu pertama yang sama persis dengan nama trek, nama artis, dan nama album. Jika tidak dapat menemukan kecocokan, maka akan muncul ValueError.
Jika yt_search_algo adalah 2, ia melakukan pencocokan fuzzy. Ini menghapus semua yang ada dalam tanda kurung di judul lagu dan memeriksa kecocokan dengan nama trek, nama artis, dan nama album. Jika tidak dapat menemukan kecocokan, maka ia akan mencari video dengan nama track dan nama artis. Jika masih tidak dapat menemukan kecocokan, maka akan muncul ValueError.
Jika fungsi tidak dapat menemukan trek menggunakan salah satu metode di atas, maka akan muncul ValueError.
Tidak, ini berjalan di Linux/Windows/MacOS.
Saya mendapatkan "Tidak ditemukan distribusi yang cocok untuk spotify2ytmusic".
Hal ini telah dilaporkan di Edisi #39 dan sepertinya ada ketidakcocokan antara versi python. Pengguna di sana, di MacOS, perlu menginstal versi Python tertentu, lalu menggunakan versi PIP yang cocok:
brew install [email protected]
brew install [email protected]
pip3.10 install spotify2ytmusic
Bagaimana cara kerja algoritma pencarian?
Berdasarkan informasi lagu Spotify, Spotify mencari album dari artis yang sama di YTMusic, lalu melihat 3 hits pertama untuk mencari lagu dengan nama yang persis sama. Jika tidak dapat menemukan lagu yang tepat, ia kemudian melakukan pencarian lagu untuk nama lagu dari artis yang sama dan mengembalikan hit pertama.
Idenya adalah menemukan album dan artis lalu mencari track yang cocok akan lebih akurat daripada mencari lagu dan artis dan mengandalkan algoritma YTMusic untuk mencari tahu, terutama untuk track pendek yang mungkin ada. banyak hits yang kontradiktif seperti "Survival by Yes".
Salinan saya gagal dengan "ERROR: (Mencoba lagi) Server mengembalikan HTTP 400: Permintaan Buruk" yang berulang.
Coba jalankan dengan argumen "--track-sleep=3" untuk melakukan tidur 3 detik di antara trek. Hal ini akan memakan waktu lebih lama, namun mungkin akan berhasil jika tarif yang lebih cepat gagal.
Creative Commons Zero v1.0 Universal
spotify-backup.py dilisensikan di bawah Lisensi MIT. Lihat https://github.com/caseychu/spotify-backup untuk informasi lebih lanjut.