Skip to main content

Downloads songs, albums or playlists from deezer and spotify (clone from deezloader)

Project description

DeezSpot 🎵

A powerful Python and Lightweight library for downloading music from Deezer and Spotify. Clone of the original deezloader with additional features and improvements.

⚠️ IMPORTANT NOTES !!!!! ⚠️

USE AS YOUR OWN RISK I'M NOT RESPONSIBLE TO ANY YOUR PROBLEM AT SPOTIFY OR DEEZER ACCOUNT !

✨ Features

  • Download songs, albums, playlists from Deezer
  • Download songs, albums, playlists, episode from Spotify
  • Support for multiple audio qualities (MP3, FLAC) and OGG for spotify
  • Download podcast episodes
  • Batch downloading
  • Progress bar support
  • ID3 tags and artwork

🚀 Installation

pip install deezspot

Or

pip install git+https://github.com/jakiepari/deezspot

🔑 Authentication Setup

Deezer Authentication

  1. Get your Deezer ARL token from browser cookies after logging in to Deezer
  2. Use the token in your code:
from deezspot.deezloader import DeeLogin

dl = DeeLogin(arl='your_arl_token', email='your_Deezer_email', password='your_Deezer_password')

Spotify Authentication

  1. Clone the librespot-auth repository:
git clone https://github.com/dspearson/librespot-auth
cd librespot-auth
cargo build --release
  1. Generate credentials:
./target/release/librespot-auth
  1. Adjust your credentials.json with the format:
{
    "username": "your_spotify_username",
    "credentials": "your_credentials_string",
    "type": "AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS"
}

Or also you can use this code

from librespot.zeroconf import ZeroconfServer
import time
import logging
import pathlib

zs = ZeroconfServer.Builder().create()
logging.warning("Transfer playback from desktop client to librespot-python via Spotify Connect in order to store session")

while True:
    time.sleep(1)
    if zs._ZeroconfServer__session:
        logging.warning(f"Grabbed {zs._ZeroconfServer__session} for {zs._ZeroconfServer__session.username()}")
        
        if pathlib.Path("credentials.json").exists():
            logging.warning("Session stored in credentials.json. Now you can Ctrl+C")
            break

Steps: Its same like using the code from librespot-auth. but you need a premium plan to use this code! Just play 1 song and then click connect to a device and select librespot-python then your credentials.json will be appear

📚 Usage Examples

Downloading with Deezer

from deezspot.deezloader import DeeLogin

dl = DeeLogin(arl='your_arl_token', email='', password='')

# Download single track
dl.download_trackdee(
    link_track='https://www.deezer.com/track/123456789',
    output_dir='./downloads',
    quality_download='MP3_320',
    recursive_quality=False,
    recursive_download=False
)

# Download album
dl.download_albumdee(
    link_album='https://www.deezer.com/album/123456789',
    output_dir='./downloads/albums',
    quality_download='FLAC',
    recursive_quality=True,
    recursive_download=False
)

# Download playlist
dl.download_playlistdee(
    link_playlist='https://www.deezer.com/playlist/123456789',
    output_dir='./downloads/playlists',
    quality_download='MP3_320',
    recursive_quality=True,
    recursive_download=False
)

# Download artist
dl.download_artistdee(
    link_artist='https://www.deezer.com/artist/123456789',
    output_dir='./downloads/artists',
    quality_download='MP3_320',
    recursive_quality=True,
    recursive_download=False
)

# Download episode
dl.download_episode(
    link_episode='https://www.deezer.com/episode/123456789',
    output_dir='./downloads/episode',
    quality_download='MP3_320',
    recursive_quality=True,
    recursive_download=False
)

Downloading with Spotify

import sys
import os
import traceback

# Add the local deezloader directory to the sys.path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
from deezspot.spotloader import SpoLogin

try:
    # Initialize Spotify client
    # Make sure to generate credentials.json using librespot-auth first
    credentials_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'credentials.json'))
    spo = SpoLogin(credentials_path=credentials_path)

    # Download single track
    track = spo.download_track(
        link_track="https://open.spotify.com/track/4tCtwWceOPWzenK2HAIJSb",
        output_dir="./downloads/tracks",
        quality_download="NORMAL",
        recursive_quality=False,
        recursive_download=False,
        not_interface=False,
        method_save=1
    )

    # Download album
    album = spo.download_album(
        link_album="https://open.spotify.com/album/6n4YU8iRm07O7lR1zQZypN",
        output_dir="./downloads/albums",
        quality_download="NORMAL",
        recursive_quality=True,
        recursive_download=False,
        not_interface=False,
        method_save=1,
        make_zip=True
    )

    # Download playlist
    playlist = spo.download_playlist(
        link_playlist="https://open.spotify.com/playlist/1ZyEi4bBTYGTIlY23U1kwG",
        output_dir="./downloads/playlists",
        quality_download="NORMAL",
        recursive_quality=True,
        recursive_download=False,
        not_interface=False,
        method_save=1,
        make_zip=True
    )

    # Download episode
    episode = spo.download_episode(
        link_episode="https://open.spotify.com/episode/1hgO8Y3CCymyxn934lNtDq",
        output_dir="./downloads/episodes",
        quality_download="NORMAL",
        recursive_quality=False,
        recursive_download=False,
        not_interface=False,
        method_save=1
    )

except Exception as e:
    traceback.print_exc()

📋 Supported Formats

Deezer

  • MP3_128
  • MP3_320 (SOMETIMES NEED PAID DEEZER)
  • FLAC (PAID DEEZER ONLY)

Spotify

  • NORMAL
  • HIGH
  • VERY_HIGH

NOTE !

Sometimes when you using spotloader after downloading 20+ tracks, Will be giving an error about audio key. its because you're using free spotify!

🤝 Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

⚖️ License

This project is licensed under the GNU Affero General Public License v3 - see the

LICENSE

file for details.

🙏 Acknowledgments

  • Original deezloader project
  • Deezer API
  • Spotify API
  • Spotify Anon
  • librespot-python
  • librespot-auth

⭐️ Star History

Star History Chart

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deezspot-1.3.tar.gz (40.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

deezspot-1.3.0-py3-none-any.whl (44.8 kB view details)

Uploaded Python 3

deezspot-1.3-py3-none-any.whl (44.8 kB view details)

Uploaded Python 3

File details

Details for the file deezspot-1.3.tar.gz.

File metadata

  • Download URL: deezspot-1.3.tar.gz
  • Upload date:
  • Size: 40.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.1

File hashes

Hashes for deezspot-1.3.tar.gz
Algorithm Hash digest
SHA256 3c01952fbf55894cfb56723e20767036e35e108e06062202df22fa29c19c2c8d
MD5 5b61a15c11128fa1afb475070fcf964a
BLAKE2b-256 e69eec633556ad7408c7baa6d33c1093f170ddf51a0b61dac1f14e3c050f4ea2

See more details on using hashes here.

File details

Details for the file deezspot-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: deezspot-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 44.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.1

File hashes

Hashes for deezspot-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cd58d8447f4a03408452d310918716384947fbb5296f777283a92e2279ff6fbf
MD5 817b99c33bc2244bb8e6343a0c4b6c9d
BLAKE2b-256 123ce759052069e11449ad68e6e86e5fb1da82e2a321a4aa3c2e001ee5e86479

See more details on using hashes here.

File details

Details for the file deezspot-1.3-py3-none-any.whl.

File metadata

  • Download URL: deezspot-1.3-py3-none-any.whl
  • Upload date:
  • Size: 44.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.1

File hashes

Hashes for deezspot-1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 607618832deeb012b7492af158c9fc6fb71f7d4a50a9bf0e3c4dfa65b745e2d5
MD5 6369ed2313a7f7e5f0df57a263bea660
BLAKE2b-256 a6f5167ce587e6d6b5289b8d4961b217652d916ee508c261aefb9336b5d40c72

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page