def analyze_artist(artist_name): total_lyrics = dict() long_lyrics = dict() musixmatch = Musixmatch('1d5d5c029c5f15411a43e55e7efe4517') print(musixmatch) search_term = artist_name result = (musixmatch.artist_search(search_term, 1, 5, '', '')) # print(result) artist = result['message']['body']['artist_list'][0]['artist'] #print(artist['artist_name']) artist_id = artist['artist_id'] artist_name = artist['artist_name'] albums = musixmatch.artist_albums_get( artist_id, '', 1, 10, 'desc')['message']['body']['album_list'] try: genre = albums[0]['album']['primary_genres']['music_genre_list'][0][ 'music_genre']['music_genre_name_extended'] except IndexError: genre = 'N/A' for album in albums: album_id = album['album']['album_id'] # try: # print('\t' + album['album']['album_name']) # except: # pass track_list = musixmatch.album_tracks_get( album_id, 1, 25, '')['message']['body']['track_list'] for track in track_list: track_id = track['track']['track_id'] # try: # print('\t\t' + track['track']['track_name']) # except: # pass track_lyrics = musixmatch.track_lyrics_get( track_id)['message']['body']['lyrics']['lyrics_body'] total_lyrics, long_lyrics = tokenize_song( "\n".join(track_lyrics.split("\n")[:-2]), total_lyrics, long_lyrics) ego_rating = rateEgo(total_lyrics) unique_word_count = len(total_lyrics.keys()) top_fifteen = sorted(long_lyrics.items(), key=lambda t: (-t[1], t[0]))[0:10] return (artist_name, unique_word_count, genre, top_fifteen, ego_rating, total_lyrics) '''print('Unique words in vocabulary:' + str(unique_word_count))
def get_lyrics_api(artist_name): musixmatch_key = config.MUSIXMATCH_KEY musixmatch = Musixmatch(musixmatch_key) lyrics_list = [] final_verse_list = [] try: artists_json = musixmatch.artist_search(q_artist=artist_name, page_size=1, page=1, f_artist_id="", f_artist_mbid="") artist_id = artists_json['message']['body']['artist_list'][0][ 'artist']['artist_id'] albums_json = musixmatch.artist_albums_get(artist_id=artist_id, page_size=5, page=1, s_release_date='desc', g_album_name="") albums_list = albums_json['message']['body']['album_list'] for album in albums_list: albums_id = album['album']['album_id'] tracks_json = musixmatch.album_tracks_get(album_id=albums_id, f_has_lyrics=True, page_size=20, page=1, album_mbid='') tracks_list = tracks_json['message']['body']['track_list'] for track in tracks_list: tracks_id = track['track']['track_id'] lyrics_json = musixmatch.track_lyrics_get(tracks_id) lyrics = lyrics_json['message']['body']['lyrics'][ 'lyrics_body'] sep = '*******' lyrics = lyrics.split(sep, 1)[0] lyrics = lyrics.replace('\\', ' ') lyrics = lyrics.replace('\"', ' ') lyrics = lyrics.replace('\\n', ',') lyrics = lyrics.replace('\n', ',') #lyrics = lyrics.replace('...', ',') #lyrics = lyrics.replace('?', ' ') #lyrics = lyrics.replace('!', ' ') final_verse_list.append(lyrics) return final_verse_list except: return None
class TestMusixmatch(unittest.TestCase): def setUp(self): self.musixmatch = Musixmatch(os.environ.get('APIKEY')) self.url = 'http://api.musixmatch.com/ws/1.1/' def test_get_url(self): self.assertEqual( self.musixmatch._get_url('chart.artists.get?' 'page=1&page_size=1&country=us' '&format=json'), self.url + 'chart.artists.get?' 'page=1&page_size=1' '&country=us&format=json&apikey={}'.format( os.environ.get('APIKEY'))) def test_apikey(self): self.assertEqual(self.musixmatch._apikey, os.environ.get('APIKEY')) def test_chart_artists(self): self.assertEqual( self.musixmatch.chart_artists(1, 1)['message']['body'] ['artist_list'][0]['artist']['artist_vanity_id'], 'Ed-Sheeran') self.assertEqual( self.musixmatch.chart_artists(1, 1)['message']['body'] ['artist_list'][0]['artist']['artist_mbid'], 'b8a7c51f-362c-4dcb-a259-bc6e0095f0a6') def test_chart_tracks_get(self): self.assertEqual( self.musixmatch.chart_tracks_get( 1, 1, 1)['message']['body']['track_list'][0]['track']['album_name'], '2U (feat. Justin Bieber)') self.assertEqual( self.musixmatch.chart_tracks_get( 1, 1, 1)['message']['body']['track_list'][0]['track']['track_name'], '2U') def test_track_search(self): self.assertEqual( self.musixmatch.track_search( q_track='Let Me Love You', q_artist='justinbieber', page_size=10, page=1, s_track_rating='desc')['message']['body']['track_list'], []) def test_track_get(self): self.assertEqual( self.musixmatch.track_get(15445219)['message']['body']['track'] ['artist_name'], 'Lady Gaga') self.assertEqual( self.musixmatch.track_get(15445219)['message']['body']['track'] ['album_name'], 'The Fame Monster') def test_track_lyrics_get(self): self.assertEqual( self.musixmatch.track_lyrics_get(15953433)['message']['body'] ['lyrics']['lyrics_language'], 'en') self.assertEqual( self.musixmatch.track_lyrics_get(15953433)['message']['body'] ['lyrics']['lyrics_language_description'], 'English') self.assertEqual( self.musixmatch.track_lyrics_get(15953433)['message']['body'] ['lyrics']['lyrics_id'], 15912802) def test_track_snippet_get(self): self.assertEqual( self.musixmatch.track_snippet_get(16860631)['message']['body'] ['snippet']['snippet_id'], 16229519) self.assertEqual( self.musixmatch.track_snippet_get(16860631)['message']['body'] ['snippet']['snippet_body'], "You shoot me down, but I won't fall") def test_track_subtitle_get(self): self.assertEqual( self.musixmatch.track_subtitle_get(14201829)['message']['body'], '') def test_track_richsync_get(self): self.assertEqual( self.musixmatch.track_richsync_get(114837357)['message']['body'] ['richsync']['richsync_id'], 6) self.assertEqual( self.musixmatch.track_richsync_get(114837357)['message']['body'] ['richsync']['richsync_length'], 230) def test_track_lyrics_post(self): self.assertEqual( self.musixmatch.track_lyrics_post( 1471157, 'test')['message']['header']['status_code'], 200) self.assertEqual( self.musixmatch.track_lyrics_post(1471157, 'test')['message']['body'], '') def test_track_lyrics_feedback_post(self): self.assertEqual( self.musixmatch.track_lyrics_post( 1471157, 4193713, 'wrong_verses')['message']['body'], '') def test_matcher_lyrics_get(self): self.assertEqual( self.musixmatch.matcher_lyrics_get('Sexy and I know it', 'LMFAO')['message']['body'] ['lyrics']['lyrics_language_description'], 'English') self.assertEqual( self.musixmatch.matcher_lyrics_get( 'Sexy and I know it', 'LMFAO')['message']['body']['lyrics']['lyrics_language'], 'en') def test_matcher_track_get(self): self.assertEqual( self.musixmatch.matcher_track_get( 'Lose Yourself (soundtrack)', 'Eminem')['message']['body']['track']['track_name'], 'Lose Yourself - ' 'Soundtrack Version' ' (Explicit)') self.assertEqual( self.musixmatch.matcher_track_get( 'Lose Yourself (soundtrack)', 'Eminem')['message']['body']['track']['album_name'], 'Curtain Call') def test_matcher_subtitle_get(self): self.assertEqual( self.musixmatch.matcher_subtitle_get('Sexy and I know it', 'LMFAO', 200, 3)['message']['body'], '') def test_artist_get(self): self.assertEqual( self.musixmatch.artist_get(118)['message']['body']['artist'] ['artist_name'], 'Queen') self.assertEqual( self.musixmatch.artist_get(118)['message']['body']['artist'] ['artist_mbid'], '5eecaf18-02ec-47af-a4f2-7831db373419') def test_artist_search(self): self.assertEqual( self.musixmatch.artist_search( 'prodigy', 1, 1, 16439, '4a4ee089-93b1-4470-af9a-6ff575d32704')['message']['body'] ['artist_list'][0]['artist']['artist_id'], 16439) self.assertEqual( self.musixmatch.artist_search( 'prodigy', 1, 1, 16439, '4a4ee089-93b1-4470-af9a-6ff575d32704')['message']['body'] ['artist_list'][0]['artist']['artist_name'], 'The Prodigy') def test_artist_albums_get(self): self.assertEqual( self.musixmatch.artist_albums_get(1039, 1, 1, 1, 'desc')['message'] ['body']['album_list'][0]['album']['album_id'], 25660826) self.assertEqual( self.musixmatch.artist_albums_get(1039, 1, 1, 1, 'desc')['message'] ['body']['album_list'][0]['album']['album_name'], 'Kaleidoscope') def test_artist_related_get(self): self.assertEqual( self.musixmatch.artist_related_get( 56, 1, 1)['message']['body']['artist_list'][0]['artist']['artist_id'], 298) self.assertEqual( self.musixmatch.artist_related_get(56, 1, 1)['message']['body'] ['artist_list'][0]['artist']['artist_name'], 'Outkast') def test_album_get(self): self.assertEqual( self.musixmatch.album_get(14250417)['message']['body']['album'] ['album_id'], 14250417) self.assertEqual( self.musixmatch.album_get(14250417)['message']['body']['album'] ['album_name'], 'Party Rock') def test_album_tracks_get(self): self.assertEqual( self.musixmatch.album_tracks_get( 13750844, 1, 1, '')['message']['body']['track_list'][0]['track']['track_id'], 30057052) self.assertEqual( self.musixmatch.album_tracks_get( 13750844, 1, 1, '')['message']['body']['track_list'][0]['track']['track_name'], "Don't Panic") def test_tracking_url_get(self): self.assertEqual( self.musixmatch.tracking_url_get('www.mylyricswebsite.com') ['message']['header']['status_code'], 200) def test_catalogue_dump_get(self): self.assertEqual( self.musixmatch.catalogue_dump_get('test')['message']['body'], '')
#values changed for security purposes. #access apps.twitter.com to find the values for your specific project auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_secret) #authorizes the bot and loads in its username api = tweepy.API(auth) user = api.get_user('Phish_Bot') #at the moment the bot also follows follower of my main account, @krav1tz #myFollowers is an array containing each user who follows @krav1tz myFollowers = api.followers_ids('krav1tz') myFollowersLength = len(myFollowers) #artist phish = musixmatch.artist_search('phish', 1, 1, 0, 0) phish_id = phish['message']['body']['artist_list'][0]['artist']['artist_id'] #albums albums = musixmatch.artist_albums_get(phish_id, 0, 1, 100, 0) album_list = albums['message']['body']['album_list'] new_album_list = [] new_album_dic = {} albums = new_album_list # filter live albums for album in album_list: name = album['album']['album_name'] if name[:1].isdigit():
class TestMusixmatch(unittest.TestCase): def setUp(self): self.musixmatch = Musixmatch(os.environ.get("APIKEY")) self.url = "http://api.musixmatch.com/ws/1.1/" def test_get_url(self): self.assertEqual( self.musixmatch._get_url("chart.artists.get?" "page=1&page_size=1&country=us" "&format=json"), self.url + "chart.artists.get?" "page=1&page_size=1" "&country=us&format=json&apikey={}".format( os.environ.get("APIKEY")), ) def test_apikey(self): self.assertEqual(self.musixmatch._apikey, os.environ.get("APIKEY")) def test_chart_artists(self): self.assertEqual( self.musixmatch.chart_artists(1, 1)["message"]["body"] ["artist_list"][0]["artist"]["artist_vanity_id"], "Ed-Sheeran", ) self.assertEqual( self.musixmatch.chart_artists(1, 1)["message"]["body"] ["artist_list"][0]["artist"]["artist_mbid"], "b8a7c51f-362c-4dcb-a259-bc6e0095f0a6", ) def test_chart_tracks_get(self): self.assertEqual( self.musixmatch.chart_tracks_get( 1, 1, 1)["message"]["body"]["track_list"][0]["track"]["album_name"], "2U (feat. Justin Bieber)", ) self.assertEqual( self.musixmatch.chart_tracks_get( 1, 1, 1)["message"]["body"]["track_list"][0]["track"]["track_name"], "2U", ) def test_track_search(self): self.assertEqual( self.musixmatch.track_search( q_track="Let Me Love You", q_artist="justinbieber", page_size=10, page=1, s_track_rating="desc", )["message"]["body"]["track_list"], [], ) def test_track_get(self): self.assertEqual( self.musixmatch.track_get(15445219)["message"]["body"]["track"] ["artist_name"], "Lady Gaga", ) self.assertEqual( self.musixmatch.track_get(15445219)["message"]["body"]["track"] ["album_name"], "The Fame Monster", ) def test_track_lyrics_get(self): self.assertEqual( self.musixmatch.track_lyrics_get(15953433)["message"]["body"] ["lyrics"]["lyrics_language"], "en", ) self.assertEqual( self.musixmatch.track_lyrics_get(15953433)["message"]["body"] ["lyrics"]["lyrics_language_description"], "English", ) self.assertEqual( self.musixmatch.track_lyrics_get(15953433)["message"]["body"] ["lyrics"]["lyrics_id"], 15912802, ) def test_track_snippet_get(self): self.assertEqual( self.musixmatch.track_snippet_get(16860631)["message"]["body"] ["snippet"]["snippet_id"], 16229519, ) self.assertEqual( self.musixmatch.track_snippet_get(16860631)["message"]["body"] ["snippet"]["snippet_body"], "You shoot me down, but I won't fall", ) def test_track_subtitle_get(self): self.assertEqual( self.musixmatch.track_subtitle_get(14201829)["message"]["body"], "") def test_track_richsync_get(self): self.assertEqual( self.musixmatch.track_richsync_get(114837357)["message"]["body"] ["richsync"]["richsync_id"], 6, ) self.assertEqual( self.musixmatch.track_richsync_get(114837357)["message"]["body"] ["richsync"]["richsync_length"], 230, ) def test_track_lyrics_post(self): self.assertEqual( self.musixmatch.track_lyrics_post( 1471157, "test")["message"]["header"]["status_code"], 200, ) self.assertEqual( self.musixmatch.track_lyrics_post(1471157, "test")["message"]["body"], "") def test_track_lyrics_feedback_post(self): self.assertEqual( self.musixmatch.track_lyrics_post( 1471157, 4193713, "wrong_verses")["message"]["body"], "", ) def test_matcher_lyrics_get(self): self.assertEqual( self.musixmatch.matcher_lyrics_get("Sexy and I know it", "LMFAO") ["message"]["body"]["lyrics"]["lyrics_language_description"], "English", ) self.assertEqual( self.musixmatch.matcher_lyrics_get( "Sexy and I know it", "LMFAO")["message"]["body"]["lyrics"]["lyrics_language"], "en", ) def test_matcher_track_get(self): self.assertEqual( self.musixmatch.matcher_track_get( "Lose Yourself (soundtrack)", "Eminem")["message"]["body"]["track"]["track_name"], "Lose Yourself - " "Soundtrack Version" " (Explicit)", ) self.assertEqual( self.musixmatch.matcher_track_get( "Lose Yourself (soundtrack)", "Eminem")["message"]["body"]["track"]["album_name"], "Curtain Call", ) def test_matcher_subtitle_get(self): self.assertEqual( self.musixmatch.matcher_subtitle_get("Sexy and I know it", "LMFAO", 200, 3)["message"]["body"], "", ) def test_artist_get(self): self.assertEqual( self.musixmatch.artist_get(118)["message"]["body"]["artist"] ["artist_name"], "Queen", ) self.assertEqual( self.musixmatch.artist_get(118)["message"]["body"]["artist"] ["artist_mbid"], "5eecaf18-02ec-47af-a4f2-7831db373419", ) def test_artist_search(self): self.assertEqual( self.musixmatch.artist_search( "prodigy", 1, 1, 16439, "4a4ee089-93b1-4470-af9a-6ff575d32704") ["message"]["body"]["artist_list"][0]["artist"]["artist_id"], 16439, ) self.assertEqual( self.musixmatch.artist_search( "prodigy", 1, 1, 16439, "4a4ee089-93b1-4470-af9a-6ff575d32704") ["message"]["body"]["artist_list"][0]["artist"]["artist_name"], "The Prodigy", ) def test_artist_albums_get(self): self.assertEqual( self.musixmatch.artist_albums_get(1039, 1, 1, 1, "desc")["message"] ["body"]["album_list"][0]["album"]["album_id"], 25660826, ) self.assertEqual( self.musixmatch.artist_albums_get(1039, 1, 1, 1, "desc")["message"] ["body"]["album_list"][0]["album"]["album_name"], "Kaleidoscope", ) def test_artist_related_get(self): self.assertEqual( self.musixmatch.artist_related_get( 56, 1, 1)["message"]["body"]["artist_list"][0]["artist"]["artist_id"], 298, ) self.assertEqual( self.musixmatch.artist_related_get(56, 1, 1)["message"]["body"] ["artist_list"][0]["artist"]["artist_name"], "Outkast", ) def test_album_get(self): self.assertEqual( self.musixmatch.album_get(14250417)["message"]["body"]["album"] ["album_id"], 14250417, ) self.assertEqual( self.musixmatch.album_get(14250417)["message"]["body"]["album"] ["album_name"], "Party Rock", ) def test_album_tracks_get(self): self.assertEqual( self.musixmatch.album_tracks_get( 13750844, 1, 1, "")["message"]["body"]["track_list"][0]["track"]["track_id"], 30057052, ) self.assertEqual( self.musixmatch.album_tracks_get( 13750844, 1, 1, "")["message"]["body"]["track_list"][0]["track"]["track_name"], "Don't Panic", ) def test_tracking_url_get(self): self.assertEqual( self.musixmatch.tracking_url_get("www.mylyricswebsite.com") ["message"]["header"]["status_code"], 200, ) def test_catalogue_dump_get(self): self.assertEqual( self.musixmatch.catalogue_dump_get("test")["message"]["body"], "")