Code Monkey home page Code Monkey logo

pydeezer's Introduction

PyDeezer

A package to search and download musics on Deezer.

Installation

Install from release

pip install py-deezer

Install from repository

git clone https://github.com/Chr1st-oo/pydeezer.git
cd pydeezer
pip install .

Usage as a CLI

Usage: pydeezer [OPTIONS] COMMAND [ARGS]...

  PyDeezer CLI

Options:
  --help  Show this message and exit.

Commands:
  download  Download tracks

Commands

Usage: pydeezer download [OPTIONS]

  Download tracks

Options:
  -a, --arl TEXT                  Used to be able to login to Deezer. Check
                                  the docs on how to get one.

  --media-type [Track|Album|Playlist|Artist]
                                  Sets the media type and how it searches the
                                  api.

  -d, --download-dir DIRECTORY    Sets the directory on where the tracks are
                                  to be saved.

  -q, --quality [MP3_128|MP3_256|MP3_320|FLAC]
                                  Sets the quality of the tracks. if the
                                  provided quality is not supported, the
                                  default quality of the track will be used.

  --help                          Show this message and exit.

Usage as a package

Logging In

from pydeezer import Deezer

arl = "edit_this"
deezer = Deezer(arl=arl)
user_info = deezer.user
# or
# deezer = Deezer()
# user_info = deezer.login_via_arl(arl)

You can get the your arl by manually logging into Deezer using your browser and check the cookies and look for the value of arl.

Searching

# Some login code here

# Search tracks
track_search_results = deezer.search_tracks("IM DOPE")
# Search albums
album_search_results = deezer.search_albums("DAMN", limit=10)
# Search artists
artist_search_results = deezer.search_artists("J. Cole", limit=5)
# Search playlists
playlist_search_results = deezer.search_playlists("top", index=2)

Getting Information and Downloading

# Some login code here

# Some download stuffs

from pydeezer import Downloader
from pydeezer.constants import track_formats

download_dir = "C:\\Users\\User\\Music"

track_id = "547653622"
track = deezer.get_track(track_id)
# track is now a dict with a key of info, download, tags, and get_tag
# info and tags are dict
track_info = track["info"]
tags_separated_by_comma = track["tags"]
# download and get_tag are partial functions
track["download"](download_dir, quality=track_formats.MP3_320) # this will download the file, default file name is Filename.[mp3 or flac]
tags_separated_by_semicolon = track["get_tag"](separator="; ") # this will return a dictionary similar to track["tags"] but this will override the default separator

artist_id = "53859305"
artist = deezer.get_artist(artist_id)

album_id = "39949511"
album = deezer.get_album(album_id) # returns a dict containing data about the album

playlist_id = "1370794195"
playlist = deezer.get_playlist(playlist_id) # returns a dict containing data about the playlist

# Multithreaded Downloader

list_of_id = ["572537082",
              "921278352",
              "927432162",
              "547653622"]

downloader = Downloader(deezer, list_of_ids, download_dir,
                        quality=track_formats.MP3_320, concurrent_downloads=2)
downloader.start()

Custom ProgressHandler

This example uses the amazing tqdm package.

Code

from pydeezer import Deezer
from pydeezer.ProgressHandler import BaseProgressHandler
from tqdm import tqdm

# Extend BaseProgressHandler and override its initialize, update and close methods accordingly

class MyProgressHandler(BaseProgressHandler):
    def __init__(self):
        pass

    def initialize(self, *args):
        super().initialize(*args)

        self.pbar = tqdm(self.iterable, total=self.total_size,
                         unit="B", unit_scale=True, unit_divisor=1024, 
                         leave=False, desc=self.track_title)

    def update(self):
        self.pbar.update(self.current_chunk_size)

    def close(self):
        self.pbar.close()


# When starting a download, pass your ProgressHandler instance in progress_handler keyword argument.

print("DefaultProgressHandler")
track["download"](download_dir, quality=track_formats.FLAC)

print()

my_progress_handler = MyProgressHandler()

print("CustomProgressHandler")
track["download"](download_dir, quality=track_formats.FLAC,
                  progress_handler=my_progress_handler)

Output

progresshandlergif

TODO

  • More CLI features, save used Arls for convenience.
  • Multithreaded downloader (1 song / 1 thread)
  • Binary file
  • GUI

Disclaimer

I will and should not be held responsible for the usage of this package.

Don't use this package illegaly and against Deezer's Terms Of Use.

This is licensed under GNU GPL v3.

pydeezer's People

Contributors

0x4d4e avatar acgonzales avatar dependabot[bot] avatar lybchikfreed avatar notmarrco avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.