이번 프로젝트는 스포티파이 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)