Snippets listos para copiar y pegar: autenticación, búsquedas, reproductores y más.
// 1. Obtén tu token
const getToken = async () => {
const res = await fetch('https://accounts.spotify.com/api/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' + btoa(clientId + ':' + clientSecret)
},
body: 'grant_type=client_credentials'
});
const data = await res.json();
return data.access_token;
};
// 2. Busca pista
const searchTrack = async (query, token) => {
const res = await fetch(`https://api.spotify.com/v1/search?q=${query}&type=track&limit=1`, {
headers: { 'Authorization': 'Bearer ' + token }
});
const data = await res.json();
return data.tracks.items[0];
};
const getStations = async (country = 'Spain') => {
const res = await fetch(`https://de1.api.radio-browser.info/json/stations/bycountry/${country}`);
const data = await res.json();
return data.slice(0, 10); // top 10
};
import { BPM } from 'https://unpkg.com/essentia.js';
const audioContext = new AudioContext();
const source = audioContext.createMediaElementSource(audioElement);
const bpm = new BPM(audioContext.sampleRate);
source.connect(bpm);
bpm.activate();
bpm.onBpm = (value) => console.log('BPM:', value);
const getConcerts = async (artistId) => {
const res = await fetch(`https://api.songkick.com/api/3.0/artists/${artistId}/calendar.json?apikey=${songkickKey}`);
const data = await res.json();
return data.resultsPage.results.event;
};