Skip to content

Commit 8642975

Browse files
committed
- playing around with the spotify API
1 parent de4cc5b commit 8642975

File tree

1 file changed

+36
-51
lines changed

1 file changed

+36
-51
lines changed

tools/spotify_test.html

Lines changed: 36 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,40 @@
1717
left: 0;
1818
top: 0;
1919
}
20-
.card {
21-
break-inside: avoid;
22-
page-break-inside: avoid;
23-
}
2420
}
2521

2622
.card {
2723
width: 6cm;
2824
height: 6cm;
29-
position: relative;
30-
perspective: 1000px;
31-
}
32-
33-
.card-inner {
34-
position: relative;
35-
width: 100%;
36-
height: 100%;
37-
text-align: center;
38-
transition: transform 0.8s;
39-
transform-style: preserve-3d;
40-
}
41-
42-
.card:hover .card-inner {
43-
transform: rotateY(180deg);
25+
border: 1px solid #e5e7eb;
26+
border-radius: 8px;
27+
background: white;
28+
padding: 10px;
29+
margin: 10px;
4430
}
4531

46-
.card-front, .card-back {
47-
position: absolute;
48-
width: 100%;
49-
height: 100%;
50-
backface-visibility: hidden;
32+
.qr-container {
5133
display: flex;
52-
align-items: center;
5334
justify-content: center;
54-
border: 1px solid #e5e7eb;
55-
border-radius: 8px;
56-
background: white;
35+
margin-bottom: 10px;
5736
}
5837

59-
.card-back p.year {
38+
.metadata {
39+
text-align: center;
40+
}
41+
42+
.metadata .year {
6043
font-size: 24px;
6144
margin-top: 8px;
6245
}
6346

47+
#printArea {
48+
display: grid;
49+
grid-template-columns: repeat(3, 1fr);
50+
gap: 20px;
51+
padding: 20px;
52+
}
53+
6454
.hidden {
6555
display: none;
6656
}
@@ -103,7 +93,7 @@
10393
<button id="createQRButton" class="fixed top-4 right-4 bg-green-500 text-white py-2 px-4 rounded">Create QR codes from Playlist</button>
10494
</div>
10595

106-
<div id="printArea" class="grid grid-cols-3 gap-4 p-4"></div>
96+
<div id="printArea"></div>
10797

10898
<script>
10999
let playerInstance = null;
@@ -150,19 +140,15 @@
150140
if (!playlistId) {
151141
throw new Error('Could not extract playlist ID from URL');
152142
}
153-
154143
const response = await fetch(`https://api.spotify.com/v1/playlists/${playlistId}/tracks`, {
155144
headers: {
156145
'Authorization': `Bearer ${localStorage.getItem('spotify_access_token')}`
157146
}
158147
});
159-
160148
if (!response.ok) {
161149
throw new Error(`API request failed with status ${response.status}`);
162150
}
163-
164151
const data = await response.json();
165-
166152
return data.items
167153
.filter(item => item?.track && item.track.album?.release_date)
168154
.map(item => ({
@@ -177,19 +163,17 @@
177163
const card = document.createElement('div');
178164
card.className = 'card';
179165

180-
// Create a container for the QR code
181166
const qrContainer = document.createElement('div');
182167
qrContainer.className = 'qr-container';
183168
qrContainer.id = `qr-${track.id}`;
184169

185-
// Create the metadata section
186170
const metadata = document.createElement('div');
187171
metadata.className = 'metadata';
188172
metadata.innerHTML = `
189-
<h3 class="title">${track.name}</h3>
190-
<p class="artist">${track.artist}</p>
191-
<p class="year">${track.year}</p>
192-
`;
173+
<h3 class="title">${track.name}</h3>
174+
<p class="artist">${track.artist}</p>
175+
<p class="year">${track.year}</p>
176+
`;
193177

194178
card.appendChild(qrContainer);
195179
card.appendChild(metadata);
@@ -205,11 +189,8 @@ <h3 class="title">${track.name}</h3>
205189
return card;
206190
}
207191

208-
209192
async function createQRCodesFromPlaylist() {
210193
const input = prompt("Enter Spotify playlist URL:");
211-
const maxTracks = 20; // Limit to 20 tracks
212-
213194
if (!input) return;
214195

215196
try {
@@ -221,15 +202,13 @@ <h3 class="title">${track.name}</h3>
221202
const printArea = document.getElementById('printArea');
222203
printArea.innerHTML = '';
223204

224-
// Take only the first 20 tracks
225-
tracks.slice(0, maxTracks).forEach(track => {
205+
tracks.slice(0, 21).forEach(track => {
226206
printArea.appendChild(createQRCard(track));
227207
});
228208

229-
// Add a small delay before printing to ensure QR codes are generated
230209
setTimeout(() => {
231210
window.print();
232-
}, 500);
211+
}, 1000);
233212

234213
} catch (error) {
235214
alert('Error processing tracks: ' + error.message);
@@ -240,12 +219,13 @@ <h3 class="title">${track.name}</h3>
240219
function initializePlayer(token) {
241220
document.getElementById('setup').classList.add('hidden');
242221
document.getElementById('player').classList.remove('hidden');
243-
244222
localStorage.setItem('spotify_access_token', token);
245223

246224
playerInstance = new Spotify.Player({
247225
name: 'Development Player',
248-
getOAuthToken: cb => { cb(token); }
226+
getOAuthToken: cb => {
227+
cb(token);
228+
}
249229
});
250230

251231
playerInstance.addListener('ready', async ({ device_id }) => {
@@ -255,7 +235,10 @@ <h3 class="title">${track.name}</h3>
255235
'Authorization': `Bearer ${token}`,
256236
'Content-Type': 'application/json'
257237
},
258-
body: JSON.stringify({ device_ids: [device_id], play: true })
238+
body: JSON.stringify({
239+
device_ids: [device_id],
240+
play: true
241+
})
259242
});
260243

261244
const trackId = getUrlParameter('track');
@@ -266,7 +249,9 @@ <h3 class="title">${track.name}</h3>
266249
'Authorization': `Bearer ${token}`,
267250
'Content-Type': 'application/json'
268251
},
269-
body: JSON.stringify({ uris: [`spotify:track:${trackId}`] })
252+
body: JSON.stringify({
253+
uris: [`spotify:track:${trackId}`]
254+
})
270255
});
271256
}
272257
});

0 commit comments

Comments
 (0)