Skip to content

Instantly share code, notes, and snippets.

@TheMuellenator
Forked from angelabauer/main.py
Last active March 17, 2026 19:32
Show Gist options
  • Select an option

  • Save TheMuellenator/c84616c21f0f9ce68c12c357d3e1c794 to your computer and use it in GitHub Desktop.

Select an option

Save TheMuellenator/c84616c21f0f9ce68c12c357d3e1c794 to your computer and use it in GitHub Desktop.
sp = spotipy.Spotify(
auth_manager=SpotifyOAuth(
scope="playlist-modify-private",
redirect_uri="http://example.com",
client_id=YOUR UNIQUE CLIENT ID,
client_secret= YOUR UNIQUE CLIENT SECRET,
show_dialog=True,
cache_path="token.txt"
)
)
user_id = sp.current_user()["id"]
date = input("Which year do you want to travel to? Type the date in this format YYYY-MM-DD: ")
song_uris = ["The list of", "song URIs", "you got by", "searching Spotify"]
playlist = sp.user_playlist_create(user=user_id, name=f"{date} Billboard 100", public=False)
# print(playlist)
sp.playlist_add_items(playlist_id=playlist["id"], items=song_uris)
@rajuashokk-git

Copy link
Copy Markdown

Good to hear, ChaVarilla!
Happy Learning!

@GreggRodgers02

GreggRodgers02 commented Oct 31, 2025 •

Copy link
Copy Markdown

As of October 2025, this code is working as attended for everyone reference

import requests
from bs4 import BeautifulSoup
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import os
from dotenv import load_dotenv

load_dotenv()

user_input = input('Which year do you want to travel to? Type the date in this format YYYY-MM-DD: ')

headers = {'User-Agent': 'MY USER AGENT'}

site_html = requests.get(f'https://www.billboard.com/charts/hot-100/{user_input}/', headers=headers).text
soup = BeautifulSoup(site_html, features='html.parser')

top_100 = soup.select('li ul li h3')
top_100_list = [songs.text.strip().replace('\n', '').replace('\t', '') for songs in top_100]

#print(top_100_list)
sp = spotipy.Spotify(
    auth_manager=SpotifyOAuth(
        client_id=os.getenv('SPOTIFY_CLIENT_ID'),
        client_secret=os.getenv('SPOTIFY_CLIENT_SECRET'),
        scope='playlist-modify-private',
        cache_path='token.txt',
        redirect_uri='http://127.0.0.1:9090',
        show_dialog=True,
        username='g35k',
))
user_id = sp.current_user()["id"]

song_uris = []
year = user_input.split('-')[0]
print(year)
for song in top_100_list:
    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} not found')


playlist = sp.user_playlist_create(user=user_id, name=f'{user_input} Billboard 100', public=False)


sp.playlist_add_items(playlist_id=playlist['id'], `items=song_uris)```

I believe struggling to understand the API document is a benefit, Learning happen best when struggling lol.

@dheerajdhami2001-cyber

dheerajdhami2001-cyber commented Dec 14, 2025 •

Copy link
Copy Markdown

I think now the billboard is only giving list to subscribers
Screenshot 2025-12-14 at 7 00 47 PM

@rukkho

rukkho commented Mar 17, 2026

Copy link
Copy Markdown

PLEASE I NEED HELP WHY THIS CODE DOESN'T WORK FOR ME?

import requests from bs4 import BeautifulSoup import spotipy from spotipy.oauth2 import SpotifyOAuth

CLIENT_ID = "9067a23713c34ea68d7276265816c720" CLIENT_SECRET = "334e6b70064546b092ad6b355ec171db"

url = "https://www.billboard.com/charts/hot-100/"

date = input("Which year do you want to travel to? Type the date in this Format YY-MM-DD.")

response = requests.get(f"{url}{date}") web = response.text

soup = BeautifulSoup(web, "html.parser")

musics = soup.find_all("h3", "a-no-trucate") music_titles = [] for music in musics: title = music.get_text().strip() music_titles.append(title)

sp = spotipy.Spotify( auth_manager=SpotifyOAuth( scope="playlist-modify-private", redirect_uri="http://example.com", client_id=CLIENT_ID, client_secret=CLIENT_SECRET, show_dialog=True, cache_path="token.txt" ) )

user_id = sp.current_user()["id"]

song_uris = [] year = date.split("-")[0] for song in music_titles: result = sp.search(q=f"track:{song} year:{year}", type="track") # print(result) # print("space\n\n") try: uri = result["tracks"]["items"][0] song_uris.append(uri) except IndexError: print(f"{song} doesn't exist in Spotify. Skipped.")

Creating a new private playlist in Spotify

playlist = sp.user_playlist_create(user=user_id, name=f"{date} Billboard 100", public=False) print(playlist)

Adding songs found into the new playlist

sp.playlist_add_items(playlist_id=playlist['id'], items=song_uris)

print(playlist['id'])

It didn't work because you didn't target the "uri". Note what you did:

uri = result["tracks"]["items"][0] instead:
uri = result["tracks"]["items"][0]["uri"]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment