#!/usr/bin/python3 from deezspot.easy_spoty import Spo from datetime import datetime from deezspot.libutils.utils import convert_to_date import traceback from deezspot.libutils.logging_utils import logger def tracking(ids, album=None): datas = {} try: json_track = Spo.get_track(ids) if not album: album_ids = json_track['album']['id'] json_album = Spo.get_album(album_ids) datas['image'] = json_album['images'][0]['url'] datas['image2'] = json_album['images'][1]['url'] datas['image3'] = json_album['images'][2]['url'] datas['genre'] = "; ".join(json_album['genres']) ar_album = [ artist['name'] for artist in json_album['artists'] ] datas['ar_album'] = "; ".join(ar_album) datas['album'] = json_album['name'] datas['label'] = json_album['label'] external_ids = json_album.get('external_ids', {}) datas['upc'] = external_ids.get('upc', "Unknown") datas['nb_tracks'] = json_album['total_tracks'] datas['music'] = json_track['name'] artists = [ artist['name'] for artist in json_track['artists'] ] datas['artist'] = "; ".join(artists) datas['tracknum'] = json_track['track_number'] datas['discnum'] = json_track['disc_number'] datas['year'] = convert_to_date( json_track['album']['release_date'] ) datas['bpm'] = "Unknown" datas['duration'] = json_track['duration_ms'] // 1000 external_ids = json_track.get('external_ids', {}) datas['isrc'] = external_ids.get('isrc', 'Unknown') datas['gain'] = "Unknown" datas['ids'] = ids logger.debug(f"Successfully tracked metadata for track {ids}") except Exception as e: logger.error(f"Failed to track metadata for track {ids}: {str(e)}") traceback.print_exc() return None return datas def tracking_album(album_json): song_metadata = {} try: song_metadata = { "music": [], "artist": [], "tracknum": [], "discnum": [], "bpm": [], "duration": [], "isrc": [], "gain": [], "ids": [], "image": album_json['images'][0]['url'], "image2": album_json['images'][1]['url'], "image3": album_json['images'][2]['url'], "album": album_json['name'], "label": album_json['label'], "year": convert_to_date(album_json['release_date']), "nb_tracks": album_json['total_tracks'], "genre": "; ".join(album_json['genres']) } ar_album = [ artist['name'] for artist in album_json['artists'] ] song_metadata['ar_album'] = "; ".join(ar_album) external_ids = album_json.get('external_ids', {}) song_metadata['upc'] = external_ids.get('upc', "Unknown") sm_items = song_metadata.items() for track in album_json['tracks']['items']: c_ids = track['id'] detas = tracking(c_ids, album=True) if detas is None: logger.warning(f"Could not retrieve metadata for track {c_ids} in album {album_json['id']}. Skipping.") for key, item in sm_items: if type(item) is list: if key == 'isrc': song_metadata[key].append('Unknown') elif key in detas: song_metadata[key].append(detas[key]) else: song_metadata[key].append('Unknown') continue for key, item in sm_items: if type(item) is list: if key == 'isrc': song_metadata[key].append(detas.get('isrc', 'Unknown')) elif key in detas: song_metadata[key].append(detas[key]) else: song_metadata[key].append('Unknown') logger.debug(f"Successfully tracked metadata for album {album_json['id']}") except Exception as e: logger.error(f"Failed to track album metadata: {str(e)}") traceback.print_exc() return None return song_metadata def tracking_episode(ids): datas = {} try: json_episode = Spo.get_episode(ids) datas['audio_preview_url'] = json_episode.get('audio_preview_url', '') datas['description'] = json_episode.get('description', '') datas['duration'] = json_episode.get('duration_ms', 0) // 1000 datas['explicit'] = json_episode.get('explicit', False) datas['external_urls'] = json_episode.get('external_urls', {}).get('spotify', '') datas['href'] = json_episode.get('href', '') datas['html_description'] = json_episode.get('html_description', '') datas['id'] = json_episode.get('id', '') datas['image'] = json_episode['images'][0]['url'] if json_episode.get('images') else '' datas['image2'] = json_episode['images'][1]['url'] if len(json_episode.get('images', [])) > 1 else '' datas['image3'] = json_episode['images'][2]['url'] if len(json_episode.get('images', [])) > 2 else '' datas['is_externally_hosted'] = json_episode.get('is_externally_hosted', False) datas['is_playable'] = json_episode.get('is_playable', False) datas['language'] = json_episode.get('language', '') datas['languages'] = "; ".join(json_episode.get('languages', [])) datas['name'] = json_episode.get('name', '') datas['release_date'] = convert_to_date(json_episode.get('release_date', '')) datas['show'] = json_episode.get('show', {}).get('name', '') datas['publisher'] = json_episode.get('show', {}).get('publisher', '') datas['ids'] = ids logger.debug(f"Successfully tracked metadata for episode {ids}") except Exception as e: logger.error(f"Failed to track episode metadata: {str(e)}") traceback.print_exc() return None return datas