Merge pull request 'Various fixes from github issues and PRs' (#8) from octoshrimpy/zotify:main into main

Reviewed-on: https://zotify.xyz/zotify/zotify/pulls/8
This commit is contained in:
Zotify 2023-09-12 23:06:42 +02:00
commit 0db75acc7e
4 changed files with 54 additions and 10 deletions

32
INSTALLATION.md Normal file
View File

@ -0,0 +1,32 @@
### Installing Zotify
> **Windows**
This guide uses *Scoop* (https://scoop.sh) to simplify installing prerequisites and *pipx* to manage Zotify itself.
There are other ways to install and run Zotify on Windows but this is the official recommendation, other methods of installation will not receive support.
- Open PowerShell (cmd will not work)
- Install Scoop by running:
- `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser`
- `irm get.scoop.sh | iex`
- After installing scoop run: `scoop install python ffmpeg-shared git`
- Install pipx:
- `python3 -m pip install --user pipx`
- `python3 -m pipx ensurepath`
Now close PowerShell and reopen it to ensure the pipx command is available.
- Install Zotify with: `pipx install https://get.zotify.xyz`
- Done! Use `zotify --help` for a basic list of commands or check the *README.md* file in Zotify's code repository for full documentation.
> **macOS**
- Open the Terminal app
- Install *Homebrew* (https://brew.sh) by running: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
- After installing Homebrew run: `brew install python@3.11 pipx ffmpeg git`
- Setup pipx: `pipx ensurepath`
- Install Zotify: `pipx install https://get.zotify.xyz`
- Done! Use `zotify --help` for a basic list of commands or check the README.md file in Zotify's code repository for full documentation.
> **Linux (Most Popular Distributions)**
- Install `python3`, `pip` (if a separate package), `ffmpeg`, and `git` from your distribution's package manager or software center.
- Then install pipx, either from your package manager or through pip with: `python3 -m pip install --user pipx`
- Install Zotify `pipx install https://get.zotify.xyz`
- Done! Use `zotify --help` for a basic list of commands or check the README.md file in Zotify's code repository for full documentation.

View File

@ -3,10 +3,10 @@
### A highly customizable music and podcast downloader. ### A highly customizable music and podcast downloader.
<p align="center"> <p align="center">
<img src="https://i.imgur.com/hGXQWSl.png" width="50%"> <img src="https://i.imgur.com/hGXQWSl.png" width="50%" alt="Zotify logo">
</p> </p>
### Featues ### Features
- Downloads at up to 320kbps* - Downloads at up to 320kbps*
- Downloads directly from the source** - Downloads directly from the source**
- Downloads podcasts, playlists, liked songs, albums, artists, singles. - Downloads podcasts, playlists, liked songs, albums, artists, singles.
@ -40,12 +40,13 @@ Basic command line usage:
zotify <track/album/playlist/episode/artist url> Downloads the track, album, playlist or podcast episode specified as a command line argument. If an artist url is given, all albums by specified artist will be downloaded. Can take multiple urls. zotify <track/album/playlist/episode/artist url> Downloads the track, album, playlist or podcast episode specified as a command line argument. If an artist url is given, all albums by specified artist will be downloaded. Can take multiple urls.
Basic options: Basic options:
(nothing) Download the tracks/alumbs/playlists URLs from the parameter (nothing) Download the tracks/albums/playlists URLs from the parameter
-d, --download Download all tracks/alumbs/playlists URLs from the specified file -d, --download Download all tracks/albums/playlists URLs from the specified file
-p, --playlist Downloads a saved playlist from your account -p, --playlist Downloads a saved playlist from your account
-l, --liked Downloads all the liked songs from your account -l, --liked Downloads all the liked songs from your account
-f, --followed Downloads all songs by all artists you follow -f, --followed Downloads all songs by all artists you follow
-s, --search Searches for specified track, album, artist or playlist, loads search prompt if none are given. -s, --search Searches for specified track, album, artist or playlist, loads search prompt if none are given.
-h, --help See this message.
``` ```
### Options ### Options
@ -67,7 +68,7 @@ Be aware you have to set boolean values in the commandline like this: `--downloa
| DOWNLOAD_FORMAT | --download-format | The download audio format (aac, fdk_aac, m4a, mp3, ogg, opus, vorbis) | DOWNLOAD_FORMAT | --download-format | The download audio format (aac, fdk_aac, m4a, mp3, ogg, opus, vorbis)
| DOWNLOAD_QUALITY | --download-quality | Audio quality of downloaded songs (normal, high, very_high*) | DOWNLOAD_QUALITY | --download-quality | Audio quality of downloaded songs (normal, high, very_high*)
| TRANSCODE_BITRATE | --transcode-bitrate | Overwrite the bitrate for ffmpeg encoding | TRANSCODE_BITRATE | --transcode-bitrate | Overwrite the bitrate for ffmpeg encoding
| SKIP_EXISTING_FILES | --skip-existing-files | Skip songs with the same name | SKIP_EXISTING_FILES | --skip-existing | Skip songs with the same name
| SKIP_PREVIOUSLY_DOWNLOADED | --skip-previously-downloaded | Use a song_archive file to skip previously downloaded songs | SKIP_PREVIOUSLY_DOWNLOADED | --skip-previously-downloaded | Use a song_archive file to skip previously downloaded songs
| RETRY_ATTEMPTS | --retry-attempts | Number of times Zotify will retry a failed request | RETRY_ATTEMPTS | --retry-attempts | Number of times Zotify will retry a failed request
| BULK_WAIT_TIME | --bulk-wait-time | The wait time between bulk downloads | BULK_WAIT_TIME | --bulk-wait-time | The wait time between bulk downloads
@ -82,7 +83,18 @@ Be aware you have to set boolean values in the commandline like this: `--downloa
| PRINT_DOWNLOADS | --print-downloads | Print messages when a song is finished downloading | PRINT_DOWNLOADS | --print-downloads | Print messages when a song is finished downloading
| TEMP_DOWNLOAD_DIR | --temp-download-dir | Download tracks to a temporary directory first | TEMP_DOWNLOAD_DIR | --temp-download-dir | Download tracks to a temporary directory first
*very-high is limited to premium only *very-high is limited to premium only
### Configuration
You can find the configuration file in following locations:
| OS | Location
|-----------------|---------------------------------------------------------|
| Windows | `C:\Users\<USERNAME>\AppData\Roaming\Zotify\config.json`|
| MacOS | `/Users/<USERNAME>/.config/zotify/config.json` |
| Linux | `/home/<USERNAME>/.config/zotify/config.json` |
To log out, just remove the configuration file. Uninstalling Zotify does not remove the config file.
### Output format ### Output format
@ -133,7 +145,7 @@ If you see this, don't worry! Just try logging back in. If you see the incorrect
Currently no user has reported their account getting banned after using Zotify. Currently no user has reported their account getting banned after using Zotify.
It is recommended you use Zotify with a burner account. It is recommended you use Zotify with a burner account.
Alternatively, there is a configuration option labled ```DOWNLOAD_REAL_TIME```, this limits the download speed to the duration of the song being downloaded thus appearing less suspicious. Alternatively, there is a configuration option labeled ```DOWNLOAD_REAL_TIME```, this limits the download speed to the duration of the song being downloaded thus appearing less suspicious.
This option is much slower and is only recommended for premium users who wish to download songs in 320kbps without buying premium on a burner account. This option is much slower and is only recommended for premium users who wish to download songs in 320kbps without buying premium on a burner account.
### Disclaimer ### Disclaimer

View File

@ -152,7 +152,7 @@ def search(search_term):
try: try:
int(splits[index+1]) int(splits[index+1])
except ValueError: except ValueError:
raise ValueError('Paramater passed after {} option must be an integer.\n'. raise ValueError('Parameter passed after {} option must be an integer.\n'.
format(split)) format(split))
if int(splits[index+1]) > 50: if int(splits[index+1]) > 50:
raise ValueError('Invalid limit passed. Max is 50.\n') raise ValueError('Invalid limit passed. Max is 50.\n')

View File

@ -54,7 +54,7 @@ CONFIG_VALUES = {
TRANSCODE_BITRATE: { 'default': 'auto', 'type': str, 'arg': '--transcode-bitrate' }, TRANSCODE_BITRATE: { 'default': 'auto', 'type': str, 'arg': '--transcode-bitrate' },
SKIP_EXISTING: { 'default': 'True', 'type': bool, 'arg': '--skip-existing' }, SKIP_EXISTING: { 'default': 'True', 'type': bool, 'arg': '--skip-existing' },
SKIP_PREVIOUSLY_DOWNLOADED: { 'default': 'False', 'type': bool, 'arg': '--skip-previously-downloaded' }, SKIP_PREVIOUSLY_DOWNLOADED: { 'default': 'False', 'type': bool, 'arg': '--skip-previously-downloaded' },
RETRY_ATTEMPTS: { 'default': '1', 'type': int, 'arg': '--retry-attemps' }, RETRY_ATTEMPTS: { 'default': '1', 'type': int, 'arg': '--retry-attempts' },
BULK_WAIT_TIME: { 'default': '1', 'type': int, 'arg': '--bulk-wait-time' }, BULK_WAIT_TIME: { 'default': '1', 'type': int, 'arg': '--bulk-wait-time' },
OVERRIDE_AUTO_WAIT: { 'default': 'False', 'type': bool, 'arg': '--override-auto-wait' }, OVERRIDE_AUTO_WAIT: { 'default': 'False', 'type': bool, 'arg': '--override-auto-wait' },
CHUNK_SIZE: { 'default': '20000', 'type': int, 'arg': '--chunk-size' }, CHUNK_SIZE: { 'default': '20000', 'type': int, 'arg': '--chunk-size' },