forked from takeuchi-masaki/top_trackify_hack_uci2022
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
156 lines (128 loc) · 4.82 KB
/
main.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import time
import google_auth_oauthlib.flow
import googleapiclient.discovery
import spotipy
from spotipy.oauth2 import SpotifyOAuth
SLEEP_INTERVAL = 3
TOP_TRACK_CNT = 20
def spotify_init(f):
scope = 'user-top-read playlist-modify-private playlist-modify-public'
client_id = f.readline().strip()
client_secret = f.readline().strip()
redirect_uri = f.readline().strip()
return spotipy.Spotify(
auth_manager=SpotifyOAuth(
client_id=client_id,
client_secret=client_secret,
redirect_uri=redirect_uri,
scope=scope
),
)
def youtube_init():
api_service_name = "youtube"
api_version = "v3"
client_secrets_file = "client_secret2.json"
scopes = ["https://www.googleapis.com/auth/youtube"]
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
client_secrets_file, scopes
)
credentials = flow.run_local_server()
return googleapiclient.discovery.build(
api_service_name,
api_version,
credentials=credentials
)
def get_top_spotify(sp, track_cnt: int):
spotify_request = sp.current_user_top_tracks(track_cnt, 0, "medium_term")
top_tracks = []
for track in spotify_request['items']:
track_name = track['name']
track_artist_name = track['artists'][0]['name']
top_tracks.append((track_name, track_artist_name))
return top_tracks
def get_top_spotify_ids(sp):
song_ids = []
spotify_request = sp.current_user_top_tracks(TOP_TRACK_CNT, 0, "medium_term")
for track in spotify_request['items']:
song_ids.append(track['id'])
return song_ids
def get_tracks_spotify_playlist(sp, playlist_id, limit):
cnt = 0
tracks = []
playlist_tracks = sp.playlist_items(playlist_id=playlist_id, additional_types=["track"])
for track in playlist_tracks['items']:
track_name = track['track']['name']
track_artist_name = track['track']['artists'][0]['name']
tracks.append((track_name, track_artist_name))
cnt += 1
if cnt == limit:
break
return tracks
def create_new_sp_playlist(sp, song_ids, playlist_name, user):
new_playlist = sp.user_playlist_create(user, playlist_name)
sp.user_playlist_add_tracks(user=user, playlist_id=new_playlist['id'], tracks=song_ids)
def create_new_yt_playlist(yt, playlist_title):
create_playlist = yt.playlists().insert(
part="snippet,status",
body={
"snippet": {
"title": playlist_title,
"description": "Created for UCI Hackathon 2022",
"defaultLanguage": "en"
},
"status": {
"privacyStatus": "private"
},
}
)
response_create_playlist = create_playlist.execute()
return response_create_playlist['id']
def add_to_yt_playlist(yt, playlist_id, tracks):
for track in tracks:
request_song = yt.search().list(
part="snippet",
maxResults=1,
q=track[0] + ' ' + track[1]
)
time.sleep(SLEEP_INTERVAL)
song_response = request_song.execute()
video_id = song_response['items'][0]['id']['videoId']
add_video_request = yt.playlistItems().insert(
part="snippet,status",
body={
'snippet': {
'playlistId': playlist_id,
'resourceId': {
'kind': 'youtube#video',
'videoId': video_id
}
}
}
)
time.sleep(SLEEP_INTERVAL)
response = add_video_request.execute()
def conv_playlist_spotify_youtube(sp, yt, playlist_id, playlist_name):
tracks = get_tracks_spotify_playlist(sp, playlist_id, limit=10)
yt_playlist_id = create_new_yt_playlist(yt, playlist_name)
add_to_yt_playlist(yt, yt_playlist_id, tracks)
def main():
f = open('client_info.txt', 'r')
user = f.readline().strip()
sp = spotify_init(f)
f.close()
# yt = youtube_init()
# convert a spotify playlist to a YouTube playlist
# playlist_url = 'https://open.spotify.com/playlist/5FvzeSjMVp0xYt9loCuP8A'
# playlist_url = 'https://open.spotify.com/playlist/4sjcxbRlA4E4cb9XgxozsB'
# playlist_id = playlist_url.split('/')[-1]
# conv_playlist_spotify_youtube(sp, yt, playlist_id, 'Converted Playlist')
# convert top spotify tracks to a spotify playlist
top_ids = get_top_spotify_ids(sp)
playlist_name = 'Your Top Spotify Tracks'
create_new_sp_playlist(sp, top_ids, playlist_name, user)
# convert top spotify tracks to a YouTube playlist
# top_tracks = get_top_spotify(sp, TOP_TRACK_CNT)
# new_playlist_id = create_new_yt_playlist(yt, "Top Spotify Tracks")
# add_to_yt_playlist(yt, new_playlist_id, top_tracks)
if __name__ == '__main__':
main()