kopia lustrzana https://github.com/Michael-K-Stein/SpotiFile
Fix scraper crash on local files
rodzic
d4d4c48150
commit
fe43b16edf
|
@ -39,7 +39,7 @@ class SpotifyScraper:
|
||||||
def extract_id_from_link(self, link: str) -> str:
|
def extract_id_from_link(self, link: str) -> str:
|
||||||
return link[link.rindex('/') + 1:]
|
return link[link.rindex('/') + 1:]
|
||||||
|
|
||||||
def scrape_tracks(self, link: str, console=None) -> list:
|
def scrape_tracks(self, link: str, console=None) -> list[SpotifyTrack]:
|
||||||
id_type = self.identify_link_type(link)
|
id_type = self.identify_link_type(link)
|
||||||
if id_type == self.IDTypes.Playlist:
|
if id_type == self.IDTypes.Playlist:
|
||||||
return self.scrape_playlist_tracks(self.extract_id_from_link(link))
|
return self.scrape_playlist_tracks(self.extract_id_from_link(link))
|
||||||
|
|
|
@ -14,8 +14,11 @@ class SpotifyAlbum:
|
||||||
self.load_from_data(album_data)
|
self.load_from_data(album_data)
|
||||||
|
|
||||||
def load_from_data(self, data):
|
def load_from_data(self, data):
|
||||||
|
if not data['album_type']:
|
||||||
|
return
|
||||||
self.title = data['name']
|
self.title = data['name']
|
||||||
self.thumbnail_href = data['images'][0]['url']
|
if len(data['images']) > 0:
|
||||||
|
self.thumbnail_href = data['images'][0]['url']
|
||||||
self.track_count = data['total_tracks']
|
self.track_count = data['total_tracks']
|
||||||
try:
|
try:
|
||||||
self.release_date = time.mktime(datetime.datetime.strptime(data['release_date'], "%Y-%m-%d").timetuple())
|
self.release_date = time.mktime(datetime.datetime.strptime(data['release_date'], "%Y-%m-%d").timetuple())
|
||||||
|
|
|
@ -48,7 +48,9 @@ class SpotifyTrack:
|
||||||
self.explicit = data['explicit']
|
self.explicit = data['explicit']
|
||||||
self.href = data['href']
|
self.href = data['href']
|
||||||
self.popularity = data['popularity']
|
self.popularity = data['popularity']
|
||||||
self.isrc = data['external_ids']['isrc']
|
if 'isrc' in data['external_ids']:
|
||||||
|
# isrc is not available for local files
|
||||||
|
self.isrc = data['external_ids']['isrc']
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f'SpotifyTrack< {self.title} >'
|
return f'SpotifyTrack< {self.title} >'
|
||||||
|
@ -65,9 +67,13 @@ class SpotifyTrack:
|
||||||
return scraper.get(self.thumbnail_href).content
|
return scraper.get(self.thumbnail_href).content
|
||||||
|
|
||||||
def get_download_link(self, scraper) -> str:
|
def get_download_link(self, scraper) -> str:
|
||||||
|
if not self.isrc:
|
||||||
|
return ''
|
||||||
return Deezer.get_track_download_url(Deezer.get_track_data(Deezer.get_track_id_from_isrc(self.isrc)))[0]
|
return Deezer.get_track_download_url(Deezer.get_track_data(Deezer.get_track_id_from_isrc(self.isrc)))[0]
|
||||||
|
|
||||||
def download(self, scraper) -> bytes:
|
def download(self, scraper) -> bytes:
|
||||||
|
if not self.isrc:
|
||||||
|
raise SpotifyTrackException(f'Cannot download local file {self.title}!')
|
||||||
try:
|
try:
|
||||||
download_link = self.get_download_link(scraper)
|
download_link = self.get_download_link(scraper)
|
||||||
data = Deezer.decrypt_download_data(requests.get(download_link, headers={'Accept':'*/*'}), self.isrc)
|
data = Deezer.decrypt_download_data(requests.get(download_link, headers={'Accept':'*/*'}), self.isrc)
|
||||||
|
|
Ładowanie…
Reference in New Issue