( 참고 : “FastCampus, 데이터 엔지니어링 올인원” )
[ Data Engineering ]
Spotify Project - Access Token
1. Basic Setup
Import Packages
import sys
import requests
import base64
import json
import logging
import pymysql
import csv
client_id와 client_secret
client_id = "fa7ada24bea8410a8e98159f09154c76"
client_secret = "1d3d8e0535b042f78665680cc50bd339"
2. Access Token 받아오기
Endpoint
-
우선, client id와 client secret을 입력하여 access token을 받아와야한다.
그러기 위한 endpoint는 아래와 같다.
-
endpoint = "https://accounts.spotify.com/api/token"
Encoding
-
base64를 사용하여, client_id와 client_secret을 인코딩한다
-
encoded = base64.b64encode("{}:{}".format(client_id, client_secret).encode('utf-8')).decode('ascii')
.
Header
-
인코딩 한 부분을, header안에 넣어줘야한다.
-
headers = {"Authorization": "Basic {}".format(encoded)}
Body parameter
payload = {"grant_type": "client_credentials"}
Method
-
method로는, 위에서 요구한대로 POST를 사용한다
-
r = requests.post(endpoint, data=payload, headers=headers)
( 여기서 반환받게되는
r
은 access token 및 이와 관련된 정보가 담겨있다 )
Access Token
- 위의
r
은 “dictionary형태로 보이는” string이다. - 따라서, 이를
json.loads
함수를 사용하여 dictionary 형태로 변환해주고, 여기서 access_token 값을 받아와야 한다. access_token = json.loads(r.text)['access_token']
Final Header
-
그렇다면, 우리가 받은 access token을 어떠한 식으로 넣어줘야하는가?
-
headers = {"Authorization": "Bearer {}".format(access_token)}
3. Code Summary
위의 1. Access Token 받아오기에서 신경써야 할 점이 있다. Access Token은 3600초마다 만료가 되기 때문에, 지속적으로 access token을 발급 받고, 이에 맞는 최종 header를 return하는 과정이 필요하다. 이를 지속적으로 하기 위해 구현한 함수(get_headers()
) 는 아래와 같다.
def get_headers(client_id, client_secret):
endpoint = "https://accounts.spotify.com/api/token"
encoded = base64.b64encode("{}:{}".format(client_id, client_secret).encode('utf-8')).decode('ascii')
headers = {
"Authorization": "Basic {}".format(encoded)
}
payload = {
"grant_type": "client_credentials"
}
r = requests.post(endpoint, data=payload, headers=headers)
access_token = json.loads(r.text)['access_token']
headers = {
"Authorization": "Bearer {}".format(access_token)
}
return headers