Exemple #1
0
def download_spotify_playlist_and_queue_and_zip(playlist_name, playlist_id,
                                                add_to_playlist, create_zip):
    songs = get_songs_from_spotify_website(playlist_id)
    songs_absolute_location = []
    print(f"We got {len(songs)} songs from the Spotify playlist")
    for i, song_of_playlist in enumerate(songs):
        report_progress(i, len(songs))
        # song_of_playlist: string (artist - song)
        try:
            track_id = deezer_search(
                song_of_playlist,
                TYPE_TRACK)[0]['id']  #[0] can throw IndexError
            song = get_song_infos_from_deezer_website(TYPE_TRACK, track_id)
            absolute_filename = download_song_and_get_absolute_filename(
                TYPE_PLAYLIST, song, playlist_name)
            songs_absolute_location.append(absolute_filename)
        except (IndexError, Deezer403Exception, Deezer404Exception) as msg:
            print(msg)
            print(
                f"Could not find Spotify song ({song_of_playlist}) on Deezer?")
            # return
    update_mpd_db(songs_absolute_location, add_to_playlist)
    songs_with_m3u8_file = create_m3u8_file(songs_absolute_location)
    if create_zip:
        return [create_zip_file(songs_with_m3u8_file)]
    return make_song_paths_relative_to_mpd_root(songs_absolute_location)
Exemple #2
0
 def test_get_track_infos_from_website(self):
     song = get_song_infos_from_deezer_website(TYPE_TRACK, "69962764")
     self.assertIsInstance(song, dict)
     song_keys = list(song.keys())
     for key in known_song_keys:
         self.assertIn(key, song_keys)
     self.assertEqual(song["SNG_ID"], "69962764")
     self.assertEqual(song["ART_NAME"], "The Clash")
     self.assertEqual(song["SNG_TITLE"], "Should I Stay or Should I Go")
     self.assertEqual(song["MD5_ORIGIN"], "df51967a8b9b88d079fb0d9f4a0c1c38")
Exemple #3
0
 def test_get_album_infos_from_website(self):
     songs = get_song_infos_from_deezer_website(TYPE_ALBUM, "1434890")
     self.assertIsInstance(songs, list)
     self.assertEqual(len(songs), 15)
     for song in songs:
         song_keys = list(song.keys())
         for key in known_song_keys:
             self.assertIn(key, song_keys)
     self.assertEqual(songs[0]["SNG_ID"], "15523769")
     self.assertEqual(songs[0]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[0]["SNG_TITLE"], "Prison Song")
     self.assertEqual(len(songs[14]["MD5_ORIGIN"]), 32)
     self.assertEqual(songs[1]["SNG_ID"], "15523770")
     self.assertEqual(songs[1]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[1]["SNG_TITLE"], "Needles")
     self.assertEqual(songs[2]["SNG_ID"], "15523772")
     self.assertEqual(songs[2]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[2]["SNG_TITLE"], "Deer Dance")
     self.assertEqual(songs[3]["SNG_ID"], "15523775")
     self.assertEqual(songs[3]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[3]["SNG_TITLE"], "Jet Pilot")
     self.assertEqual(songs[4]["SNG_ID"], "15523778")
     self.assertEqual(songs[4]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[4]["SNG_TITLE"], "X")
     self.assertEqual(songs[5]["SNG_ID"], "15523781")
     self.assertEqual(songs[5]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[5]["SNG_TITLE"], "Chop Suey!")
     self.assertEqual(songs[6]["SNG_ID"], "15523784")
     self.assertEqual(songs[6]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[6]["SNG_TITLE"], "Bounce")
     self.assertEqual(songs[7]["SNG_ID"], "15523788")
     self.assertEqual(songs[7]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[7]["SNG_TITLE"], "Forest")
     self.assertEqual(songs[8]["SNG_ID"], "15523790")
     self.assertEqual(songs[8]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[8]["SNG_TITLE"], "ATWA")
     self.assertEqual(songs[9]["SNG_ID"], "15523791")
     self.assertEqual(songs[9]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[9]["SNG_TITLE"], "Science")
     self.assertEqual(songs[10]["SNG_ID"], "15523792")
     self.assertEqual(songs[10]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[10]["SNG_TITLE"], "Shimmy")
     self.assertEqual(songs[11]["SNG_ID"], "15523793")
     self.assertEqual(songs[11]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[11]["SNG_TITLE"], "Toxicity")
     self.assertEqual(songs[12]["SNG_ID"], "15523796")
     self.assertEqual(songs[12]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[12]["SNG_TITLE"], "Psycho")
     self.assertEqual(songs[13]["SNG_ID"], "15523799")
     self.assertEqual(songs[13]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[13]["SNG_TITLE"], "Aerials")
     self.assertEqual(songs[14]["SNG_ID"], "15523803")
     self.assertEqual(songs[14]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[14]["SNG_TITLE"], "Arto")
def download_deezer_album_and_queue_and_zip(album_id, add_to_playlist,
                                            create_zip):
    songs = get_song_infos_from_deezer_website(TYPE_ALBUM, album_id)
    songs_absolute_location = []
    for i, song in enumerate(songs):
        report_progress(i, len(songs))
        assert type(song) == dict
        absolute_filename = get_absolute_filename(TYPE_ALBUM, song)
        songs_absolute_location.append(absolute_filename)
    update_mpd_db(songs_absolute_location, add_to_playlist)
    if create_zip:
        return [create_zip_file(songs_absolute_location)]
    return make_song_paths_relative_to_mpd_root(songs_absolute_location)
Exemple #5
0
 def test_download_song_valid(self):
     song_infos = deezer_search("faber tausendfrankenlang", TYPE_TRACK)[0]
     song = get_song_infos_from_deezer_website(TYPE_TRACK, song_infos['id'])
     try:
         os.remove(test_song)
     except FileNotFoundError:
         # if we remove a file that does not exist
         pass
     download_song(song, test_song)
     file_exists = os.path.exists(test_song)
     self.assertEqual(file_exists, True)
     file_type = magic.from_file(test_song)
     self.assertEqual(file_type, "Audio file with ID3 version 2.3.0, contains:MPEG ADTS, layer III, v1, 320 kbps, 44.1 kHz, Stereo")
     os.remove(test_song)
Exemple #6
0
 def test_download_song_valid_flac(self):
     config['deezer']['flac_quality'] = "True"
     song_infos = deezer_search("faber tausendfrankenlang", TYPE_TRACK)[0]
     song = get_song_infos_from_deezer_website(TYPE_TRACK, song_infos['id'])
     try:
         os.remove(test_song)
     except FileNotFoundError:
         # if we remove a file that does not exist
         pass
     download_song(song, test_song)
     file_exists = os.path.exists(test_song)
     self.assertEqual(file_exists, True)
     file_type = magic.from_file(test_song)
     self.assertEqual(file_type, 'Audio file with ID3 version 2.3.0, contains:FLAC audio bitstream data, 16 bit, stereo, 44.1 kHz, 10062444 samples')
     os.remove(test_song)
Exemple #7
0
def download_deezer_favorites(user_id: str, add_to_playlist: bool,
                              create_zip: bool):
    songs_absolute_location = []
    output_directory = f"favorites_{user_id}"
    favorite_songs = get_deezer_favorites(user_id)
    for i, fav_song in enumerate(favorite_songs):
        report_progress(i, len(favorite_songs))
        try:
            song = get_song_infos_from_deezer_website(TYPE_TRACK, fav_song)
            absolute_filename = download_song_and_get_absolute_filename(
                TYPE_PLAYLIST, song, output_directory)
            songs_absolute_location.append(absolute_filename)
        except (IndexError, Deezer403Exception, Deezer404Exception) as msg:
            print(msg)
            print(f"Could not find song ({fav_song}) on Deezer?")
    update_mpd_db(songs_absolute_location, add_to_playlist)
    songs_with_m3u8_file = create_m3u8_file(songs_absolute_location)
    if create_zip:
        return [create_zip_file(songs_with_m3u8_file)]
    return make_song_paths_relative_to_mpd_root(songs_absolute_location)
Exemple #8
0
 def test_get_invalid_album_infos_from_website(self):
     with self.assertRaises(Deezer404Exception):
         get_song_infos_from_deezer_website(TYPE_ALBUM, "thisdoesnotexist")
 def test_get_album_infos_from_website(self):
     songs = get_song_infos_from_deezer_website(TYPE_ALBUM, "1434890")
     self.assertIsInstance(songs, list)
     self.assertEqual(len(songs), 15)
     for song in songs:
         song_keys = list(song.keys())
         for key in known_song_keys:
             self.assertIn(key, song_keys)
     self.assertEqual(songs[0]["SNG_ID"], "15523769")
     self.assertEqual(songs[0]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[0]["SNG_TITLE"], "Prison Song")
     self.assertEqual(songs[0]["MD5_ORIGIN"],
                      "420dcfb48009fcbc806ba03397c1f651")
     self.assertEqual(songs[1]["SNG_ID"], "15523770")
     self.assertEqual(songs[1]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[1]["SNG_TITLE"], "Needles")
     self.assertEqual(songs[1]["MD5_ORIGIN"],
                      "19c32852ccef718fc5c6282f1d132e02")
     self.assertEqual(songs[2]["SNG_ID"], "15523772")
     self.assertEqual(songs[2]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[2]["SNG_TITLE"], "Deer Dance")
     self.assertEqual(songs[2]["MD5_ORIGIN"],
                      "ac8b7cb27c49613789ac006cbcdd154c")
     self.assertEqual(songs[3]["SNG_ID"], "15523775")
     self.assertEqual(songs[3]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[3]["SNG_TITLE"], "Jet Pilot")
     self.assertEqual(songs[3]["MD5_ORIGIN"],
                      "daff36398802a0d8a0b19b414e0e161f")
     self.assertEqual(songs[4]["SNG_ID"], "15523778")
     self.assertEqual(songs[4]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[4]["SNG_TITLE"], "X")
     self.assertEqual(songs[4]["MD5_ORIGIN"],
                      "f63415cdf261e4cf1af4373f1e06142c")
     self.assertEqual(songs[5]["SNG_ID"], "15523781")
     self.assertEqual(songs[5]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[5]["SNG_TITLE"], "Chop Suey!")
     self.assertEqual(songs[5]["MD5_ORIGIN"],
                      "2ea5a63b02e940e24fc8b0e66f5bee4a")
     self.assertEqual(songs[6]["SNG_ID"], "15523784")
     self.assertEqual(songs[6]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[6]["SNG_TITLE"], "Bounce")
     self.assertEqual(songs[6]["MD5_ORIGIN"],
                      "53bc9a023d71548cbdbdb70ec9836a29")
     self.assertEqual(songs[7]["SNG_ID"], "15523788")
     self.assertEqual(songs[7]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[7]["SNG_TITLE"], "Forest")
     self.assertEqual(songs[7]["MD5_ORIGIN"],
                      "5eeb6b94ad83f82291d5d28a1f7f6a1d")
     self.assertEqual(songs[8]["SNG_ID"], "15523790")
     self.assertEqual(songs[8]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[8]["SNG_TITLE"], "ATWA")
     self.assertEqual(songs[8]["MD5_ORIGIN"],
                      "9260b62ed22b9f8c4087a6086e2e2257")
     self.assertEqual(songs[9]["SNG_ID"], "15523791")
     self.assertEqual(songs[9]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[9]["SNG_TITLE"], "Science")
     self.assertEqual(songs[9]["MD5_ORIGIN"],
                      "3b24c6f38ceda1b1d0411685f44e35dd")
     self.assertEqual(songs[10]["SNG_ID"], "15523792")
     self.assertEqual(songs[10]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[10]["SNG_TITLE"], "Shimmy")
     self.assertEqual(songs[10]["MD5_ORIGIN"],
                      "cfb0b6287d8e289cabcf8230c7872ec0")
     self.assertEqual(songs[11]["SNG_ID"], "15523793")
     self.assertEqual(songs[11]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[11]["SNG_TITLE"], "Toxicity")
     self.assertEqual(songs[11]["MD5_ORIGIN"],
                      "2ff5bf53a6369e0b3baf069828251a10")
     self.assertEqual(songs[12]["SNG_ID"], "15523796")
     self.assertEqual(songs[12]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[12]["SNG_TITLE"], "Psycho")
     self.assertEqual(songs[12]["MD5_ORIGIN"],
                      "ece5a3e11493edc8534fbd8a38040cdf")
     self.assertEqual(songs[13]["SNG_ID"], "15523799")
     self.assertEqual(songs[13]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[13]["SNG_TITLE"], "Aerials")
     self.assertEqual(songs[13]["MD5_ORIGIN"],
                      "ded406e94f8fe78513e1e4e6e00a7151")
     self.assertEqual(songs[14]["SNG_ID"], "15523803")
     self.assertEqual(songs[14]["ART_NAME"], "System of a Down")
     self.assertEqual(songs[14]["SNG_TITLE"], "Arto")
     self.assertEqual(songs[14]["MD5_ORIGIN"],
                      "8e43717a1585e8e080a987584d6051c9")
Exemple #10
0
def download_deezer_song_and_queue(track_id, add_to_playlist):
    song = get_song_infos_from_deezer_website(TYPE_TRACK, track_id)
    absolute_filename = download_song_and_get_absolute_filename(
        TYPE_TRACK, song)
    update_mpd_db(absolute_filename, add_to_playlist)
    return make_song_paths_relative_to_mpd_root([absolute_filename])