본문 바로가기
DATA Science/DataEngineering

spotify api 설정 및 간단한 검색

by Rainbound-IT 2021. 6. 22.
반응형

spotify 가입후 dashboard에들어가서 api id, secret key를 획득하자

 

https://developer.spotify.com/dashboard/applications

 

 

My Dashboard | Spotify for Developers

Create and manage Spotify Applications to use the Spotify Web API. Obtain credentials to authenticate with Spotify and fetch metadata.

developer.spotify.com

 

여기서 create an app을 누르자

 

name과 decription, 체크박스 클릭후 create

 

 

만들면 위처럼 id와 secret이 나온다 이걸 post에 header 값으로 넣으면 통신이 가능!

 

 

https://developer.spotify.com/documentation/general/guides/authorization-guide/

 

 

Authorization Guide | Spotify for Developers

Music, meet code. Powerful APIs, SDKs and widgets for simple and advanced applications.

developer.spotify.com

 

인증방식에는 app, user 방식이 있는데 나는 app 방식으로 했다.

app은 내 앱으로 접근 하는거고 user는 oauth 방식으로 접근하는 방식이다.

 

app 인증방식
https://developer.spotify.com/documentation/general/guides/authorization-guide/

api에 필요한걸 보면 grant_type와 authorization이 필요하다고 한다.

 

 

 

이것이 통신이 되는지 id와 secret 값을 넣어 post 방식으로 코딩해보았다

import sys
import requests
import base64
import json
import logging

client_id = "spotify id를 넣는다"
client_secret = "spotify secret을 넣는다"


def main():


    endpoint = "https://accounts.spotify.com/api/token" ## 토큰 받아옴
    encoded = base64.b64encode("{}:{}".format(client_id, client_secret).encode('utf-8')).decode('ascii')    ## id ,secret 인코딩

    headers = {
        "Authorization": "Basic {}".format(encoded)
    }

    payload = {
        "grant_type": "client_credentials"
    }

    r = requests.post(endpoint, data=payload, headers=headers)

    print(r.status_code) ## 에러 코드
    print(r.text) ## 내용물

    sys.exit(0) ##중간에 끊어서 보기 위함

 

200은 코드로 잘들어왔다는 뜻이다

 

 

 

헤더에 필요한 값을 넣고 parameter로 bts 관련 정보를 넣어 get 방식으로 출력해보자

 

def main():

    headers = get_headers(client_id, client_secret)

    print(headers)
    sys.exit(0)




    params = {
        "q": "BTS",
        "type": "artist",
        "limit": "5"
    }


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')    ## id ,secret 인코딩

        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']
        ## 위에서 받아온 r이 str 타입이라 이걸 dictionary 형태로 바꾼다.

        headers = {
            "Authorization": "Bearer {}".format(access_token)
        }

        return headers



if __name__=='__main__':
    main()

 

 

길어서 짜름

위와 마찬가지로 출력이 잘되는것을 볼수 있다.

반응형

댓글