def get_lyrics(track): """Get the lyrics for a track using the AzLyrics API. If no lyrics are available, return an empty string.""" credit = track['recording']['artist-credit'][0] artist = credit['artist']['name'] song = track['recording']['title'] az = Azlyrics(artist, song) cache_key = '_'.join(az.normalize_artist_music()) lyrics = cache.get(cache_key) if lyrics is None: try: lyrics = to_ascii(az.format_lyrics(az.get_lyrics())) except Exception: lyrics = "" # lyrics not available cache.add(cache_key, lyrics) return lyrics
def get_songs_lyrics(self, artist, songs): lyrics = [] prev = time.time() for i, song in enumerate(songs): print('**** {}. SONG: {} ****'.format(i, song)) try: lyric = Azlyrics(artist, song).get_lyrics()[0][2:] except Exception as e: lyric = "" lyrics.append(lyric) t = random.randint(5, 15) time.sleep(t) print("{} took {:.2f} minutes to crawl.".format( artist, (time.time() - prev) / 60)) return lyrics
def test_title_capitalized(self): expected = "Sun by Two Door Cinema Club" az = Azlyrics("Two door cinema club", "sun") self.assertEqual(expected, az.format_title())
def test_format_lyric(self): expected = "blablabla\n2bla2bla2bla" az = Azlyrics("", "") self.assertEqual(expected, az.format_lyrics(["blablabla", "2bla2bla2bla"]))
def test_normalize_artist_music(self): az = Azlyrics("Artista", "MUsica") artist, music = az.normalize_artist_music() self.assertEqual("artista", artist) self.assertEqual("musica", music)
def test_lyric_in_two_divs_not_alone(self): expected = ["Run, Run", "Far Away"] mock_page = "<div>Run, Run</div><p>OKOKOK</p><div>Far Away</div>" az = Azlyrics("", "") self.assertEqual(expected, az.extract_lyrics(mock_page))
def test_lyric_in_one_div(self): expected = ["Run, Run"] mock_page = "<div>Run, Run</div>" az = Azlyrics("", "") self.assertEqual(expected, az.extract_lyrics(mock_page))
def test_url_with_special_chars(self): expected = "http://azlyrics.com/lyrics/legiaourbana/tempoperdido.html" az = Azlyrics("Legião Urbana", "Tempo Perdido") self.assertEqual(expected, az.url())
def test_url_spaces(self): expected = "http://azlyrics.com/lyrics/brunoetrio/garimpo.html" az = Azlyrics("Bruno e Trio", "Garimpo") self.assertEqual(expected, az.url())
def test_url_uppercase(self): expected = "http://azlyrics.com/lyrics/molejo/cilada.html" az = Azlyrics("MOLEJO", "CILADA") self.assertEqual(expected, az.url())
def test_url_default_generate_rick_roll(self): expected = "http://azlyrics.com/lyrics/rickastley/nevergonnagiveyouup.html" az = Azlyrics("", "") self.assertEqual(expected, az.url())
for synced_line in str(synced_lyrics).splitlines(): time.sleep(float(synced_line.split('\t', 1)[0])) print(synced_line.split('\t', 1)[1]) if __name__ == '__main__': args = parse_args() metadata = retrieve_spotify_metadata() artist = metadata['xesam:artist'][0] title = metadata['xesam:title'].split(" (feat.", 1)[0] title = title.split(' (with', 1)[0] print('{0} - {1}'.format(artist, title)) az = Azlyrics(artist, title) lyrics = az.get_lyrics() formatted_lyrics = az.format_lyrics(lyrics) sync = sync.Sync(artist, title) if args.sync: synced_lyrics = '' restart_song() for phrase in formatted_lyrics.splitlines(): start_time = time.time() input() print(phrase) synced_lyrics += '{}\t{}\n'.format(str(time.time() - start_time), phrase) sync.save_synced_lyrics(synced_lyrics)