-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlastfm_db.py
276 lines (212 loc) · 8.24 KB
/
lastfm_db.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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
import sys
import requests
import json
import pyodbc
import datetime
import time
user = sys.argv[1] # Argumento pasado al script. Usuario sobre el que se realiza la búsqueda.
# Comando para mostrar la hora al empezar
hora_inicio = datetime.datetime.now()
print("Hora de inicio:", datetime.datetime.now())
print()
# ARTISTAS
def obtener_artistas(user):
url = "http://ws.audioscrobbler.com/2.0/"
api_key = "clave_api" # Reemplaza esto con tu clave API
limit = 50 # Número máximo de resultados por página
page = 1 # Número de página inicial
total_pages = 1 # Inicializa el número total de páginas
artists = [] # Lista para almacenar los nombres de los artistas y el número de scrobbles
while page <= total_pages:
params = {
"method": "user.getTopArtists",
"user": user,
"api_key": api_key,
"format": "json",
"limit": limit,
"page": page
}
response = requests.get(url, params=params)
data = json.loads(response.text)
# Añade los rankings, los nombres de los artistas y el número de scrobbles a la lista
artists.extend([(artist['@attr']['rank'], artist['name'], artist['playcount']) for artist in data['topartists']['artist']])
# Actualiza el número total de páginas
total_pages = int(data['topartists']['@attr']['totalPages'])
# Incrementa el número de página para la próxima solicitud
page += 1
return artists
artists_scrobbles = obtener_artistas(user)
# DISCOS
def obtener_discos(user):
url = "http://ws.audioscrobbler.com/2.0/"
api_key = "clave_api" # Reemplaza esto con tu clave API
limit = 50 # Número máximo de resultados por página
page = 1 # Número de página inicial
total_pages = 1 # Inicializa el número total de páginas
albums = [] # Lista para almacenar los nombres de los álbumes, artistas y el número de scrobbles
while page <= total_pages:
params = {
"method": "user.getTopAlbums",
"user": user,
"api_key": api_key,
"format": "json",
"limit": limit,
"page": page
}
response = requests.get(url, params=params)
data = json.loads(response.text)
# Añade los nombres de los álbumes, artistas y el número de scrobbles a la lista
albums.extend([(album['@attr']['rank'], album['name'], album['artist']['name'], album['playcount']) for album in data['topalbums']['album']])
# Actualiza el número total de páginas
total_pages = int(data['topalbums']['@attr']['totalPages'])
# Incrementa el número de página para la próxima solicitud
page += 1
return albums
albums_scrobbles = obtener_discos(user)
# CANCIONES
def obtener_canciones(user):
url = "http://ws.audioscrobbler.com/2.0/"
api_key = "clave_api" # Reemplaza esto con tu clave API
limit = 50 # Número máximo de resultados por página
page = 1 # Número de página inicial
total_pages = 1 # Inicializa el número total de páginas
tracks = [] # Lista para almacenar los nombres de las canciones, álbumes, artistas y el número de scrobbles
while page <= total_pages:
params = {
"method": "user.getTopTracks",
"user": user,
"api_key": api_key,
"format": "json",
"limit": limit,
"page": page
}
response = requests.get(url, params=params)
data = json.loads(response.text)
for track in data['toptracks']['track']:
# Añade el nombre de la canción, el álbum, el artista y el número de scrobbles a la lista
tracks.append((track['@attr']['rank'], track['name'], track['artist']['name'], track['playcount']))
# Actualiza el número total de páginas
total_pages = int(data['toptracks']['@attr']['totalPages'])
# Incrementa el número de página para la próxima solicitud
page += 1
return tracks
tracks = obtener_canciones(user)
# SCROBBLES (ESCUCHAS)
def obtener_escuchas(user):
url = "http://ws.audioscrobbler.com/2.0/"
api_key = "clave_api" # Reemplaza esto con tu clave API
limit = 200 # Número máximo de resultados por página
page = 1 # Número de página inicial
total_pages = 1 # Inicializa el número total de páginas
tracks2 = [] # Lista para almacenar los nombres de las canciones, álbumes, artistas y fechas
while page <= total_pages:
params = {
"method": "user.getRecentTracks",
"user": user,
"api_key": api_key,
"format": "json",
"limit": limit,
"page": page,
"extended": 1
}
response = requests.get(url, params=params)
data = json.loads(response.text)
tracks2.extend([(track['name'], track['album']['#text'], track['artist']['name'], track['date']['#text']) for track in data['recenttracks']['track']])
# Actualiza el número total de páginas
total_pages = int(data['recenttracks']['@attr']['totalPages'])
# Incrementa el número de página para la próxima solicitud
page += 1
return tracks2
tracks2 = obtener_escuchas(user)
# CONEXIÓN SQL SERVER. CREACIÓN BBDD E INSERCIÓN DE LOS REGISTROS
SERVER = 'Servidor SQL SERVER'
USERNAME = 'usuario'
PASSWORD = 'clave'
connectionString = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={SERVER};UID={USERNAME};PWD={PASSWORD}'
conn = pyodbc.connect(connectionString, autocommit=True)
cursor = conn.cursor()
cursor.execute('CREATE DATABASE LASTFM')
cursor.execute('USE LASTFM')
SQL_QUERY_ARTISTAS = """
CREATE TABLE Artistas(
Puesto int,
Artista nvarchar(255) PRIMARY KEY,
Escuchas int
)
"""
cursor.execute(SQL_QUERY_ARTISTAS)
for rank, artist, scrobbles in artists_scrobbles:
cursor.execute("""
INSERT INTO Artistas (Puesto, Artista, Escuchas)
VALUES (?, ?, ?)
""", rank, artist, scrobbles)
cursor.execute("""SELECT COUNT(*) FROM Artistas""")
# Obtener y mostrar el resultado
resultado = cursor.fetchone()
print("Artistas registrados:", resultado[0])
SQL_QUERY_DISCOS = """
CREATE TABLE Discos(
Puesto int PRIMARY KEY,
Disco nvarchar (255),
Artista nvarchar(255),
Escuchas int,
)
"""
cursor.execute(SQL_QUERY_DISCOS)
for rank, album, artist, scrobbles in albums_scrobbles:
cursor.execute("""
INSERT INTO Discos (Puesto, Disco, Artista, Escuchas)
VALUES (?, ?, ?, ?)
""", rank, album, artist, scrobbles)
cursor.execute("""SELECT COUNT(*) FROM Discos""")
# Obtener y mostrar el resultado
resultado = cursor.fetchone()
print("Discos registrados:", resultado[0])
SQL_QUERY_CANCIONES = """
CREATE TABLE Canciones(
Puesto int PRIMARY KEY,
Canción nvarchar (255),
Artista nvarchar(255),
Escuchas int,
)
"""
cursor.execute(SQL_QUERY_CANCIONES)
for rank, track, artist, scrobbles in tracks:
cursor.execute("""
INSERT INTO Canciones (Puesto, Canción, Artista, Escuchas)
VALUES (?, ?, ?, ?)
""", rank, track, artist, scrobbles)
cursor.execute("""SELECT COUNT(*) FROM Canciones""")
# Obtener y mostrar el resultado
resultado = cursor.fetchone()
print("Canciones registradas:", resultado[0])
SQL_QUERY_ESCUCHAS = """
CREATE TABLE Escuchas(
ID int IDENTITY(1,1) PRIMARY KEY,
Canción nvarchar(255),
Disco nvarchar(255),
Artista nvarchar(255),
Fecha nvarchar(255)
)
"""
cursor.execute(SQL_QUERY_ESCUCHAS)
for track, album, artist, date in tracks2:
cursor.execute("""
INSERT INTO Escuchas (Canción, Disco, Artista, Fecha)
VALUES (?, ?, ?, ?)
""", track, album, artist, date)
cursor.execute("""SELECT COUNT(*) FROM Escuchas""")
# Obtener y mostrar el resultado
resultado = cursor.fetchone()
print("Escuchas registradas:", resultado[0])
conn.commit()
cursor.close()
conn.close()
print()
# Comando para mostrar la hora al terminar
hora_fin = datetime.datetime.now()
print("Hora de finalización:", datetime.datetime.now())
# Mostrar la duración del script
duracion = hora_fin - hora_inicio
minutes, seconds = divmod(duracion.seconds, 60)
print(f"Duración del script: {minutes} minutos y {seconds} segundos")