Skip to content

Instantly share code, notes, and snippets.

@hmlON
Created May 12, 2019 13:50
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hmlON/cdcbeeaaf836902c7149c5dcdb23f494 to your computer and use it in GitHub Desktop.
Save hmlON/cdcbeeaaf836902c7149c5dcdb23f494 to your computer and use it in GitHub Desktop.
Fetching latest releases from Spotify API
sleep_time = 0.1
from spotipy import util
token = util.prompt_for_user_token('hello','user-read-email, user-follow-read',client_id='286f256e17b842a49dad8c4a45bd3c5f',client_secret='adb245ed82a0440b8d51641ad5c5c765',redirect_uri='http://0.0.0.0:3000')
import requests
import time
# fetching favorite artists
limit = 50
artists_url = f"https://api.spotify.com/v1/me/following?type=artist&limit={limit}&access_token={token}"
artists_response = requests.get(artists_url)
artists_response.json()
artists = []
all_artists_loaded = False
url = f"https://api.spotify.com/v1/me/following?type=artist&limit={limit}&access_token={token}"
while not all_artists_loaded:
time.sleep(sleep_time)
response = requests.get(url).json()['artists']
artists += response['items']
if response.get('next'):
url = response['next'] + f"&access_token={token}"
print(url)
else:
all_artists_loaded = True
# fetching favorite artists' releases
releases = []
for artist in artists:
current_artist_releases = []
all_releases_loaded = False
artist_id = artist['id']
url = f"https://api.spotify.com/v1/artists/{artist_id}/albums?limit={limit}&access_token={token}"
while not all_releases_loaded:
time.sleep(sleep_time)
response = requests.get(url).json()
current_artist_releases += response['items']
if response.get('next'):
url = response['next'] + f"&access_token={token}"
else:
all_releases_loaded = True
for release in current_artist_releases:
full_title = f"{artist['name']} — {release['name']}"
release['full_title'] = full_title
releases += current_artist_releases
# printing latest releases
import datetime
today = datetime.date.today()
year_ago = today - datetime.timedelta(days=365)
for release in releases:
previous_date = release['release_date']
if type(previous_date) is str and release['release_date_precision'] == 'day':
new_date = datetime.datetime.strptime(previous_date, '%Y-%m-%d').date()
release['release_date'] = new_date
latest_releases = [
release for release in releases
if release['release_date_precision'] == 'day' and release['release_date'] > year_ago
]
latest_releases = sorted(latest_releases, key=lambda release: release['release_date'])
for release in latest_releases:
date = release['release_date']
title = release['full_title']
print(f"{date}: {title}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment