-
Notifications
You must be signed in to change notification settings - Fork 0
/
spotifyFetch.js
66 lines (52 loc) · 2.04 KB
/
spotifyFetch.js
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
import Api from "./api"
import _ from 'lodash'
import base64 from 'base-64'
let accessHeader = null
//Gets JSON
const getData = (trackName) => {
//get tracks then shape the data
return Api.get(`https://api.spotify.com/v1/search?q=${trackName + "&type=track"}`, null, accessHeader)
}
//Turns JSON into what I can work with
const shapeData = (trackJSON) => {
let tracks = []
const trackList = trackJSON.tracks.items
const size = trackList.length
let count = 0
return new Promise((resolve,reject) => {
_.forEach(trackList, function(track) {
//shape data, add bpm for each track, then dispatch to store
Api.get("https://api.spotify.com/v1/audio-features/" + track.id, null, accessHeader).then( json => {
count++
const x = {
name: track.name,
bpm: json.tempo,
key: track.id,
artist: track.artists[0].name
}
tracks.push(x)
if (count === size) {
resolve(tracks)
}
}).catch((err) => {console.log("shapeData Failed") //eslint-disable-line no-console
return err})
})
})
}
export const getTracks = (songName) => {
const client_id = 'ID GOES HERE'
const client_secret = 'SECRET GOES HERE'
const header = {"Authorization" : 'Basic ' + (base64.encode(client_id + ':' + client_secret)).toString(),'Content-Type':'application/x-www-form-urlencoded'}
//Get access token then get tracks
return new Promise((resolve) => {
Api.post("https://accounts.spotify.com/api/token", "grant_type=client_credentials", header).then(
json => {
const accessToken = json.access_token
accessHeader = {"Authorization" : "Bearer " + accessToken}
getData(songName).then(
data => {
shapeData(data).then(
tracks => resolve(tracks))})
})
})
}