-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspotify.py
136 lines (103 loc) · 4.07 KB
/
spotify.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
import spotipy
import spotipy.util
from spotipy.oauth2 import SpotifyClientCredentials #To access authorised Spotify data
import pandas as pd
import numpy
class Spotify:
def __init__(self, setup):
# Connect to Spotify
client_id = setup.configs['client_id']
client_secret = setup.configs['client_secret']
client_credentials_manager = SpotifyClientCredentials(client_id=client_id, client_secret=client_secret)
self.sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
self.name = setup.configs['artist']
def artist_table(self):
# Search For Artist
result = self.sp.search({self.name})
#Extract Artist's URI
self.uri = result['tracks']['items'][0]['artists'][0]['uri']
self.artist_df = pd.DataFrame({
'artist_uri': [self.uri],
'artist_name': [self.name]
})
def track_table(self):
uri = self.uri
sp = self.sp
# Album List
albums = sp.artist_albums(uri)
album_uri_loop = []
for album in range(len(albums['items'])):
album_uri_loop.append(albums['items'][album]['uri'])
# Preparing Empty Lists
album_uri = []
disc_number = []
duration_ms = []
track_name = []
track_number = []
track_uri = []
artist_uri = []
# Loop
for album in album_uri_loop:
tracks = sp.album_tracks(album_id=album, offset=0)
for track in range(len(tracks['items'])):
album_uri.append(album)
disc_number.append(tracks['items'][track]['disc_number'])
duration_ms.append(tracks['items'][track]['duration_ms'])
track_name.append(tracks['items'][track]['name'])
track_number.append(tracks['items'][track]['track_number'])
track_uri.append(tracks['items'][track]['uri'])
artist_uri.append(self.uri)
self.track_df = pd.DataFrame({
'track_uri': track_uri,
'track_name': track_name,
'track_number': track_number,
'duration_ms': duration_ms,
'disc_number': disc_number,
'album_uri': album_uri,
'artist_uri': artist_uri
})
def album_table(self):
uri = self.uri
sp = self.sp
albums = sp.artist_albums(uri, album_type = 'album')
import pandas as pd
album_uri=[]
album_name=[]
album_tracks=[]
release_date=[]
# Extract Data From API
for album in range(len(albums['items'])):
album_uri.append(albums['items'][album]['uri']) #
album_name.append(albums['items'][album]['name']) #
album_tracks.append(albums['items'][album]['total_tracks'])
release_date.append(albums['items'][album]['release_date'])
self.album_df = pd.DataFrame({
'album_uri': album_uri,
'album_name': album_name,
'release_date': release_date,
'album_tracks': album_tracks
})
def track_pop_table(self):
track_df = self.track_df
sp = self.sp
import pandas as pd
tracklist = track_df['track_uri'].to_list()
tracks = []
for track in tracklist:
if track not in tracks:
tracks.append(track)
track_uri = []
track_pop = []
for track in tracks:
track = sp.track(track)
track_uri.append(track['uri'])
track_pop.append(track['popularity'])
self.track_pop_df = pd.DataFrame({
'track_uri': track_uri,
'track_pop': track_pop,
})
def get_tables(self):
self.artist_table()
self.track_table()
self.album_table()
self.track_pop_table()