-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtransfer_playlist_from_spotify_to_tidal.py
95 lines (79 loc) · 2.71 KB
/
transfer_playlist_from_spotify_to_tidal.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import argparse
import datetime
import os
from dotenv import load_dotenv, find_dotenv
from spotify_client import SpotifyClient
from tidal_client import TidalClient
from transfer_utils import transfer_playlist_to_tidal
load_dotenv(find_dotenv())
SPOTIFY_CLIENT_ID: str = os.getenv("SPOTIFY_CLIENT_ID")
SPOTIFY_CLIENT_SECRET: str = os.getenv("SPOTIFY_CLIENT_SECRET")
SPOTIFY_REDIRECT_URI: str = os.getenv("SPOTIFY_REDIRECT_URI")
SPOTIFY_SCOPE: str = os.getenv("SPOTIFY_SCOPE")
TIDAL_TOKEN_TYPE: str = os.getenv("TIDAL_TOKEN_TYPE")
TIDAL_ACCESS_TOKEN: str = os.getenv("TIDAL_ACCESS_TOKEN")
TIDAL_REFRESH_TOKEN: str = os.getenv("TIDAL_REFRESH_TOKEN")
TIDAL_EXPIRY_TIME: str = os.getenv("TIDAL_EXPIRY_TIME")
LOGS_DIR = "logs"
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("spotify_playlist_name", help="Spotify playlist name or url")
parser.add_argument(
"tidal_playlist_name",
help="Tidal playlist name, if empty, will create the playlist with --prefix ",
)
parser.add_argument(
"-f",
"--rewrite",
action="store_true",
help="If playlist with tidal_playlist_name exists, delete it and rewrite it",
)
parser.add_argument(
"--prefix",
help="Prefix to use with tidal playlist names, will use spotify user name if empty",
)
parser.add_argument(
"--save_missing",
action="store_true",
help="Save missing tracks in logs/save_missing_path",
)
parser.add_argument(
"--save_missing_path",
help="Save missing tracks in logs/save_missing_path",
)
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
spotify_client = SpotifyClient(
client_id=SPOTIFY_CLIENT_ID,
client_secret=SPOTIFY_CLIENT_SECRET,
redirect_uri=SPOTIFY_REDIRECT_URI,
scope=SPOTIFY_SCOPE,
)
tidal_client = TidalClient(
token_type=TIDAL_TOKEN_TYPE,
access_token=TIDAL_ACCESS_TOKEN,
refresh_token=TIDAL_REFRESH_TOKEN,
expiry_time=TIDAL_EXPIRY_TIME,
)
print("Connecting to Spotify account...")
spotify_client.login()
print("Connecting to Tidal account...")
tidal_client.login()
save_missing_path = args.save_missing_path
if args.save_missing:
os.makedirs(LOGS_DIR, exist_ok=True)
if not save_missing_path:
save_missing_path = os.path.join(
LOGS_DIR, f"missing_{datetime.datetime.now()}.json"
)
transfer_playlist_to_tidal(
args.spotify_playlist_name,
args.tidal_playlist_name,
args.prefix,
spotify_client,
tidal_client,
args.rewrite,
args.save_missing,
save_missing_path,
)