kopia lustrzana https://github.com/Michael-K-Stein/SpotiFile
Implement artist 'this is' playlist scraping
rodzic
3e7e4b38c7
commit
36ead220fa
|
@ -5,6 +5,7 @@ from utils.spotify_track import SpotifyTrack
|
||||||
from utils.spotify_album import SpotifyAlbum
|
from utils.spotify_album import SpotifyAlbum
|
||||||
from utils.spotify_playlist import SpotifyPlaylist
|
from utils.spotify_playlist import SpotifyPlaylist
|
||||||
from utils.spotify_category import SpotifyCategory
|
from utils.spotify_category import SpotifyCategory
|
||||||
|
from utils.spotify_artist import SpotifyArtist
|
||||||
from spotify_client import SpotifyClient
|
from spotify_client import SpotifyClient
|
||||||
from typing import List
|
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]:
|
def scrape_artist_tracks(self, artist_id: str, intense:bool=False, console=None) -> Generator[SpotifyTrack, None, None]:
|
||||||
tracks = self.scrape_artist(artist_id)['tracks']
|
tracks = self.scrape_artist(artist_id)['tracks']
|
||||||
try:
|
artist = SpotifyArtist(artist_data=tracks[0]['album']['artists'][0])
|
||||||
artist_name = tracks[0]['album']['artists'][0]['name']
|
|
||||||
except:
|
|
||||||
artist_name = 'Unknown'
|
|
||||||
for track_data in tracks:
|
for track_data in tracks:
|
||||||
yield SpotifyTrack(track_data)
|
yield SpotifyTrack(track_data)
|
||||||
|
for track in self.scrape_playlist_tracks(artist.get_this_is_playlist(self)):
|
||||||
|
yield track
|
||||||
if intense:
|
if intense:
|
||||||
for album in self.scrape_artist_albums(artist_id):
|
for album in self.scrape_artist_albums(artist_id):
|
||||||
for track in self.scrape_album_tracks(album.spotify_id):
|
for track in self.scrape_album_tracks(album.spotify_id):
|
||||||
|
|
|
@ -31,3 +31,17 @@ class SpotifyArtist:
|
||||||
raise SpotifyArtistException(f'Artist "{self.name}" has no image!')
|
raise SpotifyArtistException(f'Artist "{self.name}" has no image!')
|
||||||
image_response = requests.get(artist_images[0]['url'])
|
image_response = requests.get(artist_images[0]['url'])
|
||||||
return image_response.content
|
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
|
||||||
|
|
Ładowanie…
Reference in New Issue