Exemplo n.º 1
0
        def ultimatum(infos, datas, name, quality):
            extension = ".mp3"
            ids = infos['SNG_ID']
            key = "FILESIZE_" + quality

            if int(infos[key]) > 0 and quality == "FLAC":
                quality = "9"
                extension = ".flac"
                qualit = "FLAC"

            elif int(infos[key]) > 0 and quality == "MP3_320":
                quality = "3"
                qualit = "320"

            elif int(infos[key]) > 0 and quality == "MP3_256":
                quality = "5"
                qualit = "256"

            elif int(infos[key]) > 0 and quality == "MP3_128":
                quality = "1"
                qualit = "128"

            else:
                if not recursive_quality:
                    raise exceptions.QualityNotFound(
                        "The quality chosen can't be downloaded")

                for a in qualities:
                    if int(infos['FILESIZE_' + a]) > 0:
                        quality = qualities[a]['quality']
                        extension = qualities[a]['extension']
                        qualit = qualities[a]['qualit']
                        break
                    else:
                        if a == "MP3_128":
                            raise exceptions.TrackNotFound(
                                "There isn't any quality avalaible for download this song: %s"
                                % name)

            name += " ({}){}".format(qualit, extension)

            if os.path.isfile(name):
                if recursive_download:
                    return name

                ans = input(
                    "Track %s already exists, do you want to redownload it?(y or n):"
                    % name)

                if not ans in answers:
                    return name

            try:
                md5 = infos['FALLBACK']['MD5_ORIGIN']
            except KeyError:
                md5 = infos['MD5_ORIGIN']

            hashs = genurl(md5, quality, ids, infos['MEDIA_VERSION'])

            try:
                crypt = request(
                    "https://e-cdns-proxy-{}.dzcdn.net/mobile/1/{}".format(
                        md5[0], hashs))
            except IndexError:
                raise exceptions.TrackNotFound("Track: %s not found:(" % name)

            if len(crypt.content) == 0:
                raise exceptions.TrackNotFound(
                    "Something is wrong with %s :(" % name)

            encry = open(name, "wb")
            encry.write(crypt.content)
            encry.close()
            decry = open(name, "wb")

            decryptfile(crypt.iter_content(2048), calcbfkey(ids), decry)

            write_tags(name, add_more_tags(datas, infos, ids))

            return name
Exemplo n.º 2
0
        def check_quality_song(infos, datas):
            ids = infos["SNG_ID"]
            num_quality = self.qualities[quality]["n_quality"]
            file_format = self.qualities[quality]["f_format"]
            song_quality = self.qualities[quality]["s_quality"]
            song_md5, version = utils.check_md5_song(infos)
            song_hash = download_utils.genurl(song_md5, num_quality, ids,
                                              version)

            try:
                crypted_audio = utils.song_exist(song_md5[0], song_hash)
            except (IndexError, exceptions.TrackNotFound):
                if not recursive_quality:
                    raise exceptions.QualityNotFound(
                        "The quality chosen can't be downloaded")

                for a in self.qualities:
                    if details["quality"] == a:
                        continue

                    num_quality = self.qualities[a]["n_quality"]
                    file_format = self.qualities[a]["f_format"]
                    song_quality = self.qualities[a]["s_quality"]
                    song_hash = download_utils.genurl(song_md5, num_quality,
                                                      ids,
                                                      infos["MEDIA_VERSION"])

                    try:
                        crypted_audio = utils.song_exist(
                            song_md5[0], song_hash)
                    except exceptions.TrackNotFound:
                        raise exceptions.TrackNotFound(
                            "Error with this song %s" % link)

            album = utils.var_excape(datas["album"])

            directory = "%s%s %s/" % ("%s/" % output, album, datas["upc"])

            name = "%s%s CD %s TRACK %s" % (
                directory,
                album,
                datas["discnum"],
                datas["tracknum"],
            )

            utils.check_dir(directory)
            name += " ({}){}".format(song_quality, file_format)

            if isfile(name):
                if recursive_download:
                    return name

                ans = input(
                    "Track %s already exists, do you want to redownload it?(y or n):"
                    % name)

                if not ans in answers:
                    return name

            decrypted_audio = open(name, "wb")

            download_utils.decryptfile(
                crypted_audio.iter_content(2048),
                download_utils.calcbfkey(ids),
                decrypted_audio,
            )

            utils.write_tags(name, add_more_tags(datas, infos, ids))

            return name
Exemplo n.º 3
0
 def download_albumdee(self, URL, output=localdir + "/Songs/", quality="MP3_320", recursive=True):
     datas = {}
     array = []
     music = []
     artist = []
     tracknum = []
     discnum = []
     bpm = []
     gain = []
     duration = []
     isrc = []
     urls = []
     names = []
     if "?utm" in URL:
      URL, a = URL.split("?utm")
     URL1 = "https://www.deezer.com/album/" + URL.split("/")[-1]
     URL2 = "https://api.deezer.com/album/" + URL.split("/")[-1]
     url = request(URL2, True).json()
     for a in url['tracks']['data']:
         del array[:]
         music.append(a['title'])
         urls.append(a['link'])
         ur = request("https://api.deezer.com/track/" + str(a['id']), True).json()
         tracknum.append(str(ur['track_position']))
         discnum.append(str(ur['disk_number']))
         bpm.append(str(ur['bpm']))
         gain.append(str(ur['gain']))
         duration.append(str(ur['duration']))
         isrc.append(ur['isrc'])
         for a in ur['contributors']:
             array.append(a['name'])
         if len(array) > 1:
          for a in array:
              for b in array:
                  if a in b and a != b:
                   array.remove(b)
         artist.append(", ".join(OrderedDict.fromkeys(array)))
     datas['label'] = url['label']
     datas['album'] = url['title']
     datas['year'] = url['release_date']
     datas['genre'] = []
     try:
        for a in url['genres']['data']:
            datas['genre'].append(a['name'])
     except KeyError:
        pass
     datas['genre'] = " & ".join(datas['genre'])
     datas['ar_album'] = []
     for a in url['contributors']:
         if a['role'] == "Main":
          datas['ar_album'].append(a['name'])
     datas['ar_album'] = " & ".join(datas['ar_album'])
     dir = str(output) + "/" + datas['album'].replace("/", "").replace("$", "S") + "/"
     try:
        os.makedirs(dir)
     except FileExistsError:
        pass
     for a in tqdm(range(len(urls))):
         name = datas['album'].replace("/", "").replace("$", "S") + " " + discnum[a] + " " + tracknum[a]
         datas['artist'] = artist[a]
         datas['music'] = music[a]
         datas['tracknum'] = tracknum[a]
         datas['discnum'] = discnum[a]
         datas['bpm'] = bpm[a]
         datas['gain'] = gain[a]
         datas['duration'] = duration[a]
         datas['isrc'] = isrc[a]
         try:
            extension, qualit, datas = self.download(urls[a], dir, quality, recursive, datas)
         except TrackNotFound:
            url = request("https://api.deezer.com/search/track/?q=" + music[a].replace("#", "") + " + " + artist[a].replace("#", ""), True).json()
            try:
               for b in range(url['total'] + 1):
                   if url['data'][b]['title'] == music[a] or url['data'][b]['title_short'] in music[a]:
                    URL = url['data'][b]['link']
                    break
            except IndexError:
               names.append(dir + name)
               print("\nTrack not found: " + music[a] + " - " + artist[a])
               continue
            try:
               extension, qualit, datas = self.download(URL, dir, quality, recursive, datas)
            except TrackNotFound:
               names.append(dir + name)
               print("\nTrack not found: " + music[a] + " - " + artist[a])
               continue
            urls[a] = URL
         name += " (" + qualit + ")" + extension
         names.append(dir + name)
         os.rename(dir + urls[a].split("/")[-1], dir + name)
         write_tags(names[a], datas)
     return names
Exemplo n.º 4
0
 def download_trackdee(self, URL, output=localdir + "/Songs/", quality="MP3_320", recursive=True):
     datas = {}
     if "?utm" in URL:
      URL, a = URL.split("?utm")
     URL1 = "https://www.deezer.com/track/" + URL.split("/")[-1]
     URL2 = "https://api.deezer.com/track/" + URL.split("/")[-1]
     url = request(URL2, True).json()
     url1 = request("http://api.deezer.com/album/" + str(url['album']['id']), True).json()
     datas['music'] = url['title']
     array = []
     for a in url['contributors']:
         array.append(a['name'])
     if len(array) > 1:
      for a in array:
          for b in array:
              if a in b and a != b:
               array.remove(b)
     datas['artist'] = ", ".join(OrderedDict.fromkeys(array))
     datas['album'] = url1['title']
     datas['tracknum'] = str(url['track_position'])
     datas['discnum'] = str(url['disk_number'])
     datas['year'] = url['release_date']
     song = datas['music'] + " - " + datas['artist']
     datas['genre'] = []
     try:
        for a in url1['genres']['data']:
            datas['genre'].append(a['name'])
     except KeyError:
        pass
     datas['genre'] = " & ".join(datas['genre'])
     datas['ar_album'] = []
     for a in url1['contributors']:
         if a['role'] == "Main":
          datas['ar_album'].append(a['name'])
     datas['ar_album'] = " & ".join(datas['ar_album'])
     datas['label'] = url1['label']
     datas['bpm'] = str(url['bpm'])
     datas['gain'] = str(url['gain'])
     datas['duration'] = str(url['duration'])
     datas['isrc'] = url['isrc']
     dir = str(output) + "/" + datas['album'].replace("/", "").replace("$", "S") + "/"
     try:
        os.makedirs(dir)
     except FileExistsError:
        pass
     name = datas['album'].replace("/", "").replace("$", "S") + " " + datas['discnum'] + " " + datas['tracknum']
     print("\nDownloading:" + song)
     try:
        extension, qualit, datas = self.download(URL, dir, quality, recursive, datas)
     except TrackNotFound:
        url = request("https://api.deezer.com/search/track/?q=" + datas['music'].replace("#", "") + " + " + datas['artist'].replace("#", ""), True).json()
        try:
           for a in range(url['total'] + 1):
               if url['data'][a]['title'] == datas['music'] or url['data'][a]['title_short'] in datas['music']:
                URL = url['data'][a]['link']
                break
        except IndexError:
           raise TrackNotFound("Track not found: " + song)
        extension, qualit, datas = self.download(URL, dir, quality, recursive, datas)
     name += " (" + qualit + ")" + extension
     os.rename(dir + URL.split("/")[-1], dir + name)
     write_tags(dir + name, datas)
     return dir + name
Exemplo n.º 5
0
 def ultimatum(infos, name, datas, quality, recursive_download,
               recursive_quality):
     extension = ".mp3"
     ids = infos['SNG_ID']
     if int(infos['FILESIZE_' + quality]) > 0 and quality == "FLAC":
         quality = "9"
         extension = ".flac"
         qualit = "FLAC"
     elif int(
             infos['FILESIZE_' + quality]) > 0 and quality == "MP3_320":
         quality = "3"
         qualit = "320"
     elif int(
             infos['FILESIZE_' + quality]) > 0 and quality == "MP3_256":
         quality = "5"
         qualit = "256"
     elif int(
             infos['FILESIZE_' + quality]) > 0 and quality == "MP3_128":
         quality = "1"
         qualit = "128"
     else:
         if recursive_quality:
             raise QualityNotFound(
                 "The quality chosen can't be downloaded")
         for a in qualities:
             if int(infos['FILESIZE_' + a]) > 0:
                 quality = qualities[a]['quality']
                 extension = qualities[a]['extension']
                 qualit = qualities[a]['qualit']
                 break
             else:
                 if a == "MP3_128":
                     raise TrackNotFound(
                         "There isn't any quality avalaible for download this song"
                     )
     name += " (" + qualit + ")" + extension
     if os.path.isfile(name):
         if not recursive_download:
             return name
         ans = input(
             "Track " + name +
             " already exists, do you want to redownload it?(y or n):")
         if ans != "y":
             return name
     try:
         md5 = infos['FALLBACK']['MD5_ORIGIN']
     except KeyError:
         md5 = infos['MD5_ORIGIN']
     hashs = genurl(md5, quality, ids, infos['MEDIA_VERSION'])
     try:
         crypt = request(
             "https://e-cdns-proxy-%s.dzcdn.net/mobile/1/%s" %
             (md5[0], hashs))
     except IndexError:
         raise TrackNotFound("Track not found :(")
     if len(crypt.content) == 0:
         raise TrackNotFound("Error with this track :(")
     open(name, "wb").write(crypt.content)
     decry = open(name, "wb")
     decryptfile(crypt.iter_content(2048), calcbfkey(ids), decry)
     datas = add_more_tags(datas, infos, ids)
     write_tags(name, datas)
     return name
        def check_quality_song(infos, datas):
            ids = infos['SNG_ID']
            num_quality = self.qualities[quality]['n_quality']
            file_format = self.qualities[quality]['f_format']
            song_quality = self.qualities[quality]['s_quality']
            song_md5, version = utils.check_md5_song(infos)
            song_hash = download_utils.genurl(song_md5, num_quality, ids,
                                              version)

            try:
                crypted_audio = utils.song_exist(song_md5[0], song_hash)
            except (IndexError, exceptions.TrackNotFound):
                if not recursive_quality:
                    raise exceptions.QualityNotFound(
                        "The quality chosen can't be downloaded")

                for a in self.qualities:
                    if details['quality'] == a:
                        continue

                    num_quality = self.qualities[a]['n_quality']
                    file_format = self.qualities[a]['f_format']
                    song_quality = self.qualities[a]['s_quality']
                    song_hash = download_utils.genurl(song_md5, num_quality,
                                                      ids,
                                                      infos['MEDIA_VERSION'])

                    try:
                        crypted_audio = utils.song_exist(
                            song_md5[0], song_hash)
                    except exceptions.TrackNotFound:
                        raise exceptions.TrackNotFound(
                            "Error with this song %s" % link)

            music = utils.var_excape(datas['music'])
            artist = utils.var_excape(infos['ART_NAME'])

            directory = ("%s" % ("%s/" % output))

            name = ("%s%s %s" % (directory, music, artist))

            utils.check_dir(directory)
            name += " ({}){}".format(song_quality, file_format)

            if isfile(name):
                if recursive_download:
                    return name

                ans = input(
                    "Track %s already exists, do you want to redownload it?(y or n):"
                    % name)

                if not ans in answers:
                    return name

            decrypted_audio = open(name, "wb")

            download_utils.decryptfile(crypted_audio.iter_content(2048),
                                       download_utils.calcbfkey(ids),
                                       decrypted_audio)

            utils.write_tags(name, add_more_tags(datas, infos, ids))

            return name