๐ŸŽง Spotify API ๋‹ค๋ฃจ๊ธฐ - (1)

์„œ์€์„œยท2023๋…„ 8์›” 31์ผ
2
post-custom-banner

์Šคํฌํ‹ฐํŒŒ์ด๋Š” ์„ธ๊ณ„ 1์œ„์˜ ์Œ์•… ์ŠคํŠธ๋ฆฌ๋ฐ ์•ฑ์œผ๋กœ 2020๋…„ 2๋ถ„๊ธฐ ๋ง ๊ธฐ์ค€ 1์–ต 3,800๋งŒ๋ช…์˜ ์œ ๋ฃŒ ๊ตฌ๋…์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์Šคํฌํ‹ฐํŒŒ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œ๋‹ˆ๋ฎค์ง, EMI, ์›Œ๋„ˆ ๋ฎค์ง, ์œ ๋‹ˆ๋ฒ„์„ค ๋“ฑ๊ณผ ์ œํœดํ•ด ์Œ์›์„ ๋ฌด๋ฃŒ๋กœ ๊ณต๊ธ‰๊ณผ ๋”๋ถˆ์–ด, ๊ตญ๋‚ด ์Œ์› ํ”Œ๋žซํผ๊ณผ๋Š” ๋น„๊ต๋ฅผ ๋ถˆํ—ˆํ•  ์ •๋„๋กœ ๋งŽ์€ ์Œ์›์„ ๊ณ ์Œ์งˆ๋กœ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค.

Spotify API

deep.daiv์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํŒ€๋ณ„ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์ œ๋ฅผ ๋„์„œ ๋งž์ถค ์Œ์•… ์ถ”์ฒœ์‹œ์Šคํ…œ์œผ๋กœ ์„ ์ •ํ–ˆ๋‹ค. ์ „์ฒด์ ์ธ ํ”„๋กœ์ ํŠธ์˜ ํ๋ฆ„์€ ์ฑ…์˜ ๋ถ„์œ„๊ธฐ๋ฅผ ์ž˜ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ •ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ‚ค์›Œ๋“œ์™€ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์Œ์•…์„ ์ถ”์ฒœํ•  ๊ฒƒ์ด๋‹ค.

๐Ÿค” ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ์Œ์•… ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์œ ์‚ฌ๋„๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

์ด ๋•Œ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋กœ spotify ๋ฐ์ดํ„ฐ์˜ Audio features์ด๋‹ค!
Audio features๋Š” ๊ฐ ๋…ธ๋ž˜์˜ ํŠน์ง•๋“ค์„ ์ˆ˜์น˜ํ™”ํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
ํŠนํžˆ tempo, danceability, acousticness์™€ ๊ฐ™์ด ์Œ์•…์˜ ํŠน์ง•์„ ์ •๋Ÿ‰์ ์ธ ์ง€ํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด๋†“๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๋ถ„์„์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ณธ๊ฒฉ์ ์œผ๋กœ Spotify API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

ํ™˜๊ฒฝ ์„ธํŒ…

Spotify API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € KEY์™€ Secret ๋„˜๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
์•„๋ž˜์˜ ๋งํฌ์—์„œ ๊ณผ์ •์ด ์ง„ํ–‰๋œ๋‹ค.
๐Ÿ”— Spotify์˜ ๊ฐœ๋ฐœ์ž ํŽ˜์ด์ง€: https://developer.spotify.com/

1๏ธโƒฃ ๋กœ๊ทธ์ธ or ํšŒ์›๊ฐ€์ž…

๋งŒ์•ฝ ์•„์ด๋””๊ฐ€ ์žˆ๋‹ค๋ฉด ๋กœ๊ทธ์ธ์„ ์—†๋‹ค๋ฉด ํšŒ์›๊ฐ€์ž…์ด ํ•„์š”ํ•˜๋‹ค.

2๏ธโƒฃ APP ๋งŒ๋“ค๊ธฐ

Dashboard > Create app ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด APP์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

โ–ถ๏ธŽ ์˜ˆ์‹œ(BookOST๋ผ๋Š” APP์„ ์ƒ์„ฑ)

3๏ธโƒฃ Key & Secret ํ™•์ธ

Dashboard > BookOST > Settings > Basic Information ์„ ํ†ตํ•ด Key์™€ Secret ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿšจ ๋งŒ์•ฝ secret ๊ฐ’์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด, ์•„๋ž˜์˜ View client secret ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋ณด์ž!

4๏ธโƒฃ Python์„ ์ด์šฉํ•ด์„œ API ๋‹ค๋ฃจ๊ธฐ

๋จผ์ € spotify module์„ ์„ค์น˜ํ•ด ์ค€๋‹ค.

pip install spotipy
# ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ module๋ช…์ด spotify๊ฐ€ ์•„๋‹Œ spotipy์ด๋‹ค!

import spotipy
from spotipy.oauth2 import SpotifyOAuth
import pprint

pprint?
pprint๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ถœ๋ ฅ(pretty print)ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋””๋ฒ„๊น… ์šฉ๋„๋กœ ์ถœ๋ ฅํ•  ๋•Œ pprint๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.

API์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Authorization ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ์ด ๋•Œ ๋ฐœ๊ธ‰๋ฐ›์•˜๋˜ Key์™€ Secret๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

cid = '392ea3c6dfdc4c959fd125e2c7a6e86b'
secret = '๋ฐœ๊ธ‰๋ฐ›์€ secret ๋ฒˆํ˜ธ'
redirect_uri = 'http://localhost:8080/callback'
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=cid, client_secret=secret, redirect_uri=redirect_uri))

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด์ œ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค! ์ด์ œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ Spotify API์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•ด๋ณด์ž

๋ฐ์ดํ„ฐ ๊ตฌ์กฐํŒŒ์•…

Spotify API๋Š” ๊ต‰์žฅํžˆ ๋งŽ์€ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ ์ค‘ ๋ช‡๊ฐ€์ง€๋ฅผ ๊ณจ๋ผ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.
์•„๋ž˜์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋งŽ์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ”— https://spotipy.readthedocs.io/en/2.22.1/#redirect-uri

search()๋Š” ์Šคํฌํ‹ฐํŒŒ์ด์˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๊ฐ Artist๋‚˜ Track์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
search์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฐ€์ˆ˜ ์•„์ด์œ ์— ๋Œ€ํ•ด์„œ search()๋ฅผ ์ง„ํ–‰ํ•ด ๋ณด์•˜๋‹ค.

์ฝ”๋“œ

result = sp.search('iu',limit=2,type = 'artist')
pprint.pprint(result)

๊ฒฐ๊ณผ

๊ทธ๋ ‡๋‹ด items ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด์ž!

items


limit๋ฅผ 2๋กœ ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— items ๋ฆฌ์ŠคํŠธ ์•ˆ์— 2๊ฐœ์˜ ๊ฐ’์ด ๋“ค์–ด์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
์ฒซ๋ฒˆ์งธ ์›์†Œ๋Š” name์ด 'IU'์ธ ํ•œ๊ตญ๊ฐ€์ˆ˜์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‘๋ฒˆ์งธ ์›์†Œ๋Š” name์ด 'IURII'์ธ ๊ฐ€์ˆ˜์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋ดค์„ ๋•Œ iu๋ผ๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์„œ์น˜ ๊ฐ’์€ ์ฟผ๋ฆฌ๋ฌธ์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ์ •๋ณด์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.(๋‚˜์˜ ์ถ”์ธก)

โ–ถ๏ธŽ 'IU'์˜ ์ •๋ณด ํ™•์ธํ•˜๊ธฐ

์ฝ”๋“œ

pprint.pprint(result['artists']['items'][0])

๊ฒฐ๊ณผ

artist()

'IU'์˜ ์•„ํ‹ฐ์ŠคํŠธ ๊ณ ์œ ๋ฒˆํ˜ธ(id)์ธ '3HqSLMAZ3g3d5poNaI7GOU'์„ ์ด์šฉํ•ด์„œ search()์™€๋Š” ๋ฐ˜๋Œ€๋กœ ์•„ํ‹ฐ์ŠคํŠธ์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž

์ฝ”๋“œ

uri = 'spotify:artist:3HqSLMAZ3g3d5poNaI7GOU' # ํ˜•ํƒœ : spotify:artist:(์•„ํ‹ฐ์ŠคํŠธ id)
artist = sp.artist(uri)
pprint.pprint(artist)

๊ฒฐ๊ณผ

์œ„์˜ ๊ฒฐ๊ณผ์™€ ๋™์ผํ•˜๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ถœ์ฒ˜

profile
๋‚ด์ผ์˜ ๋‚˜๋Š” ์˜ค๋Š˜๋ณด๋‹ค ๋” ๋‚˜์•„์ง€๊ธฐ๋ฅผ :D
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€