mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-12-29 21:31:23 +00:00
Decouple fetching metadata
This commit is contained in:
66
spotdl/metadata/providers/spotify.py
Normal file
66
spotdl/metadata/providers/spotify.py
Normal file
@@ -0,0 +1,66 @@
|
||||
import spotipy
|
||||
import spotipy.oauth2 as oauth2
|
||||
|
||||
from spotdl.metadata import MetadataBase
|
||||
|
||||
|
||||
class MetadataSpotify(MetadataBase):
|
||||
def __init__(self, spotify=None):
|
||||
self.spotify = spotify
|
||||
|
||||
def set_credentials(self, client_id, client_secret):
|
||||
token = self._generate_token(client_id, client_secret)
|
||||
self.spotify = spotipy.Spotify(auth=token)
|
||||
|
||||
def from_url(self, url):
|
||||
metadata = self.spotify.track(url)
|
||||
return self.metadata_to_standard_form(metadata)
|
||||
|
||||
def from_query(self, query):
|
||||
metadata = self.spotify.search(query, limit=1)["tracks"]["items"][0]
|
||||
return self.metadata_to_standard_form(metadata)
|
||||
|
||||
def _generate_token(self, client_id, client_secret):
|
||||
""" Generate the token. """
|
||||
credentials = oauth2.SpotifyClientCredentials(
|
||||
client_id=client_id,
|
||||
client_secret=client_secret,
|
||||
)
|
||||
token = credentials.get_access_token()
|
||||
return token
|
||||
|
||||
def _titlecase(self, string):
|
||||
return " ".join(word.capitalize() for word in string.split())
|
||||
|
||||
def metadata_to_standard_form(self, metadata):
|
||||
artist = self.spotify.artist(metadata["artists"][0]["id"])
|
||||
album = self.spotify.album(metadata["album"]["id"])
|
||||
|
||||
try:
|
||||
metadata[u"genre"] = self._titlecase(artist["genres"][0])
|
||||
except IndexError:
|
||||
metadata[u"genre"] = None
|
||||
try:
|
||||
metadata[u"copyright"] = album["copyrights"][0]["text"]
|
||||
except IndexError:
|
||||
metadata[u"copyright"] = None
|
||||
try:
|
||||
metadata[u"external_ids"][u"isrc"]
|
||||
except KeyError:
|
||||
metadata[u"external_ids"][u"isrc"] = None
|
||||
|
||||
metadata[u"release_date"] = album["release_date"]
|
||||
metadata[u"publisher"] = album["label"]
|
||||
metadata[u"total_tracks"] = album["tracks"]["total"]
|
||||
|
||||
# Some sugar
|
||||
metadata["year"], *_ = metadata["release_date"].split("-")
|
||||
metadata["duration"] = metadata["duration_ms"] / 1000.0
|
||||
metadata["provider"] = "spotify"
|
||||
|
||||
# Remove unwanted parameters
|
||||
del metadata["duration_ms"]
|
||||
del metadata["available_markets"]
|
||||
del metadata["album"]["available_markets"]
|
||||
|
||||
return metadata
|
||||
Reference in New Issue
Block a user