개요
- python을 사용하여 spotify API 를 호출하여 json 데이터를 받아온다.
- 이 데이터를 원하는 형태로 처리한다.
Spotify API 인증 방식
대부분의 API 호출은 인증이 필요하다.
본 포스팅에서는 아래와 같은 인증방식(client_credentials)을 사용한다. API를 호출할 때 client_id, client_secret, grant_type(=client_credentials) 값을 넘겨준다. 그러면 spotify가 access_token을 준다. 이후 API를 호출할 때 header에 access_token 값을 포함하여 요청하면 된다.
client_id, client_secret 값은 spotify app을 생성하여 발급받는다.
python requests 패키지
python으로 API를 호출할 때 사용하는 패키지이다. get, put 등 API 함수를 제공해준다. url, data, header, parameter, cookie 등을 인수로 같이 넘겨서 사용한다.
import requests url = "<http://www.tistory.com>" response = requests.get(url)
토큰 발급받기
header 값은 base64로 인코딩해야 한다. (spotify가 그렇게 하래요..)
import requests
import base64
client_id = ""
client_secret = ""
endpoint = "https://accounts.spotify.com/api/token"
# python 3.x 버전
encoded = base64.b64encode("{}:{}".format(client_id, client_secret).encode('utf-8')).decode('ascii')
# python 2.x 버전
#encoded = base64.b64encode("{}:{}".format(client_id, client_secret))
headers = {"Authorization": "Basic {}".format(encoded)}
payload = {"grant_type": "client_credentials"}
response = requests.post(endpoint, data=payload, headers=headers)
access_token = json.loads(response.text)['access_token']
API 호출하여 json 데이터 받기
API를 호출한 결과를 확인해보면 json 데이터가 출력되는 것을 확인할 수 있다. 또한 requests 패키지를 사용해서 API 응답코드, 응답헤더 등도 확인할 수 있다. json 데이터에는 아티스트의 장르, 팔로워 수, 이미지 등의 정보가 포함되어 있다.
headers = {"Authorization": "Bearer {}".format(access_token)}
## Spotify Search API
params = {
"q": "BTS",
"type": "artist",
"limit": "1"
}
r = requests.get("https://api.spotify.com/v1/search", params=params, headers=headers)
print(r.text)
print(r.status_code)
print(r.headers)
json 데이터 처리하기
python에서 json 데이터를 다루기 위해서 텍스트를 json 형태로 변환한다.
json 구조는 아래와 같다.
- artists
-
href
-
items
external_urls
followers
genres
...
-
limit
-
next
-
offset
-
previous
-
total
-
그런 다음에 원하는 데이터를 뽑아오자.
import json
raw = json.loads(r.text)
artist_raw = raw['artists']['items'][0]
print(artist_raw)
followers = artist_raw['followers']['total']
genres = artist_raw['genres']
href = artist_raw['href']
print("followers: " + str(followers))
print("genres: " + str(genres))
print("href: " + str(href))
BTS의 팔로워수, 장르, spotify 링크가 출력되는 것을 확인할 수 있다.
followers: 22644335
genres: ['k-pop', 'k-pop boy group']
href: <https://api.spotify.com/v1/artists/3Nrfpe0tUJi4K4DXYWgMUX>
python 최종코드
import requests
import base64
import json
import sys
client_id = "***"
client_secret = "****"
endpoint = "https://accounts.spotify.com/api/token"
# python 3.x 버전
encoded = base64.b64encode("{}:{}".format(client_id, client_secret).encode('utf-8')).decode('ascii')
# python 2.x 버전
#encoded = base64.b64encode("{}:{}".format(client_id, client_secret))
headers = {"Authorization": "Basic {}".format(encoded)}
payload = {"grant_type": "client_credentials"}
response = requests.post(endpoint, data=payload, headers=headers)
access_token = json.loads(response.text)['access_token']
headers = {"Authorization": "Bearer {}".format(access_token)}
## Spotify Search API
params = {
"q": "BTS",
"type": "artist",
"limit": "1"
}
r = requests.get("https://api.spotify.com/v1/search", params=params, headers=headers)
print(r.text)
print(r.status_code)
print(r.headers)
raw = json.loads(r.text)
artist_raw = raw['artists']['items'][0]
print(artist_raw)
followers = artist_raw['followers']['total']
genres = artist_raw['genres']
href = artist_raw['href']
print("followers: " + str(followers))
print("genres: " + str(genres))
print("href: " + str(href))
결론
spotify, naver, kakao 등 다양한 API들이 있다. 어떤 데이터를 얻을 수 있는지, 호출할 때 필요한 데이터는 무엇인지 다 제각각이다. 입맛에 맞게 사용할 수 있도록 API 문서에 익숙해지잣!
'Side Project > AWS와 Python으로 페이스북 챗봇 개발하기' 카테고리의 다른 글
[python] boto3를 통해 AWS 서비스와 연동하기 (boto3 예시 2가지) (250) | 2020.09.27 |
---|---|
[python] 파일 한 줄씩 읽어서 저장하기 (8) | 2020.09.27 |
[python] python으로 mysql connect 하기 (8) | 2020.08.29 |
패스트캠퍼스 데이터 엔지니어링 강의 (8) | 2020.08.23 |
[AWS] AWS CLI 설정하기 (Access Key, Secret Key) (533) | 2020.08.09 |
댓글