import argparse import requests from db.redshift import conn as redshift_conn from db.art_relations import conn as ar_conn import spotify_credentials SPOTIFY_QUERY = """SELECT track_uri FROM staging_raw_spotify_v2 WHERE upc = {} LIMIT 1 """ AR_QUERY = """SELECT isrc from track WHERE upc = {} LIMIT 1 """ SPOTIFY_TRACK_URL = 'https://api.spotify.com/v1/tracks/{}' SPOTIFY_TRACK_ISRC_URL = 'https://api.spotify.com/v1/search?' \ 'q=isrc%3A{}&type=track&limit=1' def get_any_isrc(upc): cursor = ar_conn.cursor() cursor.execute(AR_QUERY.format(upc)) row = cursor.fetchone() if row: return row[0] def get_headers(): return { 'Authorization': 'Bearer ' + spotify_credentials.get_access_token() } def get_spotify_track_url(spotify_id): return SPOTIFY_TRACK_URL.format(spotify_id) def get_spotify_track_isrc_url(isrc): return SPOTIFY_TRACK_ISRC_URL.format(isrc) def get_spotify_album_link(spotify_id): track_url = get_spotify_track_url(spotify_id) r = requests.get(track_url) if r.status_code == 200: response = r.json() return response['album']['external_urls']['spotify'] def search_in_redshift(upc): cur = redshift_conn.cursor() cur.execute(SPOTIFY_QUERY.format(upc)) row = cur.fetchone()[0] if row: spotify_id = row[14:] return get_spotify_album_link(spotify_id) def search_in_spotify(isrc): url = get_spotify_track_isrc_url(isrc) r = requests.get(url) if r.status_code == 200: response = r.json() r = response['tracks']['items'][0]['album']['external_urls']['spotify'] return r def get_spotify_link(upc): link = search_in_redshift(upc) if not link: isrc = get_any_isrc(upc) if isrc: link = search_in_spotify(isrc) return link def get_cl_args(): """Process command-line args Args: Argparse Namespace object containing args and/or defaults """ help_str = """ Download files from streaming service and save in specified directory. Examples: python spotify_link.py --upc=13178100137 --isrc=US4R30926120 """ parser = argparse.ArgumentParser(help_str) parser.add_argument( '--upc', type=int, required=True, help='upc of your album') return parser.parse_args() def main(): args = get_cl_args() print(get_spotify_link(args.upc)) main()