๐ ์ค์ ์ฌ์ดํธ์ api๋ฅผ ์์ฒญํ์ฌ ์ฌ์ฉํด ๋ณด๋๊ฒ์ ์ฒ์์ด์๋ค.
ํ๋ก์ ํธ๊ฐ ์์ ์ถ์ฒ ์ฌ์ดํธ์ธ๋ฐ ์์ ์ ๊ดํ api๋ฅผ ์ ๊ณตํด ์ฃผ๋๊ณณ์ ๋๋ฌผ์๋ค. ๋ฉ๋ก ๋ ์ ๊ณตํ๋ค๊ฐ ์ด์ ์ํ๋ค๊ณ ํ๋ค ใ
๋ํ์ ์ผ๋ก spotify๊ฐ ์ ๋ช ํ๋ฐ spotify๋ api ์ ๊ณต์๊น์ง ๊ฒ์ฆ ํ 2์ฃผ์ ๋ ์์๋์ด ํจ์ค ํ์๊ณ last.fm ์ด๋ผ๋ ์ฌ์ดํธ๋ ํ๊ตญ ๋ ธ๋๋ ๋ง๊ณ api๋ ๊ฐ์ ๋ง ํ๋ฉด ๋ฐ๋ก ์ ๊ณตํด์ฃผ์ด ์ฌ์ฉํ๊ฒ ๋์๋ค.์์ ์นดํ ๊ณ ๋ฆฌ ๊ธฐ์ค์ผ๋ก ๋ ธ๋๋ฅผ ์ถ์ฒํ ๊ฑฐ์๋๋ฐ ํด๋น ์ฌ์ดํธ์ ๋น์ทํ tag ๋ผ๋ ์์คํ ์ด ์์๊ณ tag ์ข ๋ฅ๋ ๋ง์๋๋ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ tag๋ฅผ ๊ฐ์ ธ์ค๋ api ๊ฐ ์์ด ์ฌ์ฉํด๋ดค๋ค.
ํํ ๋ฆฌ์ผ์ ๋ณด๋ฉฐ ๋ด ๋ฉ๋๋ก ๋ง์ด ๋ง๋ค์ด ๋ณด์๋ค.๊ตญ๋ด ์ฌ์ดํธ๋ก mariadb ๋ผ๋ ์ฌ์ดํธ๋ ์๋๋ฐ ์ฌ๊ธฐ๋ xml๋ก ๋ฐ์ดํฐ๋ฅผ ์ ํด์ฃผ๊ณ ์ค๋๋ ์ฌ์ดํธ๋ผ ํจ์คํ์๋ค.
def lastfm_get(payload): API_KEY = '' USER_AGENT = '' headers = {'user-agent': USER_AGENT} url = 'https://ws.audioscrobbler.com/2.0/' payload['api_key'] = API_KEY payload['format'] = 'json' response = requests.get(url, headers=headers, params=payload) return response
์์๊ฐ์ด ์์ฒญํ์ฌ์
return response.status_code
๋ฅผ ์ฐ์์๋ 200๋ฒ์ด ์ค๋ฉด ์์ฒญ์ ์ฑ๊ณตํ๊ฒ
๐ ํ์ ํ๋ผ๋ฏธํฐ : API_key
๋ค๋ฅธ method๋ ์ต์ ์ด ๋ง์ด ํ์ํ๋ฐ ํด๋น method๋ ํ์ ์๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋def lookup_all_tags(): response = lastfm_get({ 'method': 'tag.getTopTags', }) tags = [t['name'] for t in response.json()['toptags']['tag']] result = [x for x in tags] if response.status_code != 200: return None if not getattr(response, 'from_cache', False): time.sleep(0.25) return result
tag์ ์ด๋ฆ๋ค๋ง ๊ฐ์ ธ์ฌ๊ฑฐ์ฌ์ tags์ ์ด๋ฆ์ ์ ์ฅํ๊ณ result์ ๋ด์์ฃผ์๋ค.
getattr ํจ์๋ ์์ฒญ์ด ๊ธธ๊ณ ๋ง์๋ ๋ฒค์ด ๊ฑธ๋ฆด ์ ์์ผ๋ ์บ์์ ์ ์ฅ์์ผ์ฃผ๋ ํจ์์ด๋ค.
ํ์ง๋ง ์์ง ๊ตฌํํ์ง ์์๋ค. ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ
๐ track.search ๋ ์ฌ์ดํธ์์ ๊ฒ์๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๊ณณ์ด๋ค.
ํ๋ผ๋ฏธ๋ํฐ๋ก๋ track_name ์ด ํ์ํ์ง๋ง ๋ชจ๋ ๊ฒ์ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ํ๋์ ๊ฐ์๋ ํ๊ทธ๋ฅผ ๋ฃ์ด๋ ์์์ ๊ฒ์๋๋ค๋ ๋ป
๊ฒ์์ผ๋ก ํ ์คํธ๋ฅผ ์งํํด๋ณด๋ ๋๊ฐ์ง ํ ๊ทธ๊น์ง๋ ๋ด๋ถ ๋ก์ง์ ํตํด ๊ฒ์์ด ์ ๋์์๋ค.
ํด์ DB์ tag๋ฅผ ์ ์ฅํด๋๊ณ ์ฌ์ฉ์๊ฐ ๊ณ ๋ฅธ ์นดํ ๊ณ ๋ฆฌ์ ๋ฐ๋ผ 2๊ฐ์ง๋ฅผ ์กฐํฉํ์ฌ ์์ ์ ์ถ์ฒํด์ฃผ๋ ๊ฒ์ผ๋ก ๊ตฌ์์ ํ๋ฉฐ ๋ง๋ค์ด ๋ณด์๋ค.def lookup_track_search(tag): from pprint import pprint # tag ๊ฐ ์ฌ๋ฌ๊ฐ ์ผ ์ 2๊ฐ ๊น์ง ์๋ฅด๋ ๋ก์ง ์ถ๊ฐ ์์ temp = ' '.join(tag) response = lastfm_get({ 'method': 'track.search', 'track': tag }) music = [(x['artist'], x['name']) for x in response.json()['results']['trackmatches']['track']] # ๋๋คํ๊ฒ 1~3 ๊ฐ ๋ฝ์์ค๋ ๋ก์ง ์ถ๊ฐ ์์ return music
์์ ๊ฐ์ด ํ๋ฉด ๊ฒ์๋ ํ์ด์ง(์ง์ ๊ฐ๋ฅ)์ music๋ค์ด ๋ฆฌ์คํธ๋ก ๋ฝํ๋์จ๋ค!!!
pprint๋ก ์ ๋ ฌํด์ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ๋ชจ์ต์ด๋ค.
๐ ๋ค์ด๋ง ๋ณธ api๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด๋ ๋๋ฌด ์ฌ๋ฐ์๋ค. ํฌ๋กค๋ง๊ณผ๋ ๋ค๋ฅธ ์ฌ๋ฏธ์ธ ๊ฒ ๊ฐ๋ค. ํฌ๋กค๋ง์ ๋ถ๋ฒ์ผ๋ก ๊ฐ์ ธ์ค๋ ๋๋์ด ๋๋๋ฐ api ๋ฅผ ์ฌ์ฉํ๋ ํฉ๋ฒ์ ์ผ๋ก ๋ง๊ตฌ์ก์ด๋ก ๊ฐ์ ธ์ค๋ ๋๋?
์ค๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ชปํ ๊ฒ ๊ฐ๋ค.
์ค๋ ๋!