이번 프로젝트는 스포티파이 API를 통해 과거에 연도로 가서 그 당시 빌보드 차트 100위의 플레이리스트를 스포티파이에
추가하는 것이 목표이다.
from bs4 import BeautifulSoup
import requests
import spotipy
from spotipy.oauth2 import SpotifyOAuth
# 스포티파이 인증 ID, SECRET
SPOTIFY_CLIENT_ID = "49d4b1afd2c04d47a7e5a9438f72244a"
SPOTIFY_CLIENT_SECRET = "2dac2216d3724e00bb0055dbff478ace"
# 연도 묻기
date = input("몇년도로 음악 여행을 떠나시겠어요? YYYY-MM-DD \\n > ")
# requests와 beautiful soup로 빌보드차트에서 해당연도 top100 리스트 가져오기
response = requests.get(url="<https://www.billboard.com/charts/hot-100/2010-01-01/>")
billboard_page = response.text
soup = BeautifulSoup(billboard_page,"html.parser")
titles = soup.find_all(name="h3", class_="a-no-trucate")
song_names = []
for title in titles :
text = title.getText().strip()
song_names.append(text)
# 스포티파이 인증하기
sp = spotipy.Spotify(
auth_manager=SpotifyOAuth(
scope="playlist-modify-private",
redirect_uri="<http://example.com>",
client_id=SPOTIFY_CLIENT_ID,
client_secret=SPOTIFY_CLIENT_SECRET,
show_dialog=True,
cache_path="token.txt"
)
)
# 스포티파이 유저 아이디
user_id = sp.current_user()["id"]
# top100의 리스트 스포티파이에서 검색하기
song_uris = []
year = date.split("-")[0]
for song in song_names:
result = sp.search(q=f"track:{song} year:{year}", type="track")
print(result)
try:
uri = result["tracks"]["items"][0]["uri"]
song_uris.append(uri)
# 스포티파이에 없는 곡 예외처리하기
except IndexError:
print(f"{song} doesn't exist in Spotify. Skipped.")
# 스포티파이에 플레이리스트 추가하기.
playlist = sp.user_playlist_create(user=user_id, name=f"{date} Billboard 100", public=False)
sp.playlist_add_items(playlist_id=playlist["id"], items=song_uris)