본문 바로가기
Side Project/AWS와 Python으로 페이스북 챗봇 개발하기

[python] spotify API 호출하여 json 데이터 받아오고 처리하기

by 잇서니 2020. 9. 17.
반응형

 

개요

  • 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)

 

토큰 발급받기

spotify 인증 가이드 문서

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 데이터 받기

spotify artist 검색 API

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 문서에 익숙해지잣!

 

 

 

 

반응형

댓글