diff --git a/spotify_scraper.py b/spotify_scraper.py index d8f9f29..dedf9ad 100644 --- a/spotify_scraper.py +++ b/spotify_scraper.py @@ -5,6 +5,7 @@ from utils.spotify_track import SpotifyTrack from utils.spotify_album import SpotifyAlbum from utils.spotify_playlist import SpotifyPlaylist from utils.spotify_category import SpotifyCategory +from utils.spotify_artist import SpotifyArtist from spotify_client import SpotifyClient from typing import List @@ -96,12 +97,11 @@ class SpotifyScraper: def scrape_artist_tracks(self, artist_id: str, intense:bool=False, console=None) -> Generator[SpotifyTrack, None, None]: tracks = self.scrape_artist(artist_id)['tracks'] - try: - artist_name = tracks[0]['album']['artists'][0]['name'] - except: - artist_name = 'Unknown' + artist = SpotifyArtist(artist_data=tracks[0]['album']['artists'][0]) for track_data in tracks: yield SpotifyTrack(track_data) + for track in self.scrape_playlist_tracks(artist.get_this_is_playlist(self)): + yield track if intense: for album in self.scrape_artist_albums(artist_id): for track in self.scrape_album_tracks(album.spotify_id): diff --git a/utils/spotify_artist.py b/utils/spotify_artist.py index 619d0b7..d8ae3e4 100644 --- a/utils/spotify_artist.py +++ b/utils/spotify_artist.py @@ -31,3 +31,17 @@ class SpotifyArtist: raise SpotifyArtistException(f'Artist "{self.name}" has no image!') image_response = requests.get(artist_images[0]['url']) return image_response.content + + def get_this_is_playlist(self, scraper) -> str: + if 'this_is_playlist_id' in self.__dict__ and self.this_is_playlist_id: + return self.this_is_playlist_id + this_is = requests.utils.quote(f'this is {self.name}') + search_results = scraper.get(f'https://api.spotify.com/v1/search?type=playlist&q={this_is}&market=IL').json() + for playlist_json in search_results['playlists']['items']: + if playlist_json['name'].lower() != f'this is {self.name}'.lower(): + continue + if playlist_json['description'].lower() != f'This is {self.name}. The essential tracks, all in one playlist.'.lower(): + continue + self.this_is_playlist_id = playlist_json['id'] + break + return self.this_is_playlist_id