From 7385f1c7aa969044f351c48a3d7500f154cb921d Mon Sep 17 00:00:00 2001 From: donmerendolo Date: Tue, 5 Nov 2024 19:02:36 +0100 Subject: [PATCH] better filenames, less installation steps and binary --- .gitignore | 3 +++ README.md | 22 +++++++++++----------- config.cfg.RENAME | 4 ---- exportify.py => exportify-cli.py | 30 ++++++++++++++++++++++++++++-- exportify.png | Bin 18986 -> 0 bytes image.png | Bin 0 -> 20345 bytes 6 files changed, 42 insertions(+), 17 deletions(-) delete mode 100644 config.cfg.RENAME rename exportify.py => exportify-cli.py (89%) delete mode 100644 exportify.png create mode 100644 image.png diff --git a/.gitignore b/.gitignore index 21d9c42..71207b0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ config.cfg playlists/ Pipfile Pipfile.lock +dist/ +build/ +*.spec \ No newline at end of file diff --git a/README.md b/README.md index c2e871b..a29b7f8 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # exportify-cli -![](exportify.png?raw=true "exportify-cli") \ +![](image.png?raw=true "exportify-cli") \ Export Spotify playlists to CSV directly from the terminal, inspired by [pavelkomarov/exportify](https://github.com/pavelkomarov/exportify). This tool can export all saved playlists, including liked songs. ## Installation: +**If you use Windows, you can use the binary in [releases](https://github.com/donmerendolo/exportify-cli/releases/latest) and skip steps 1 and 2.** 1. **Clone this repository:** ```bash $ git clone https://github.com/donmerendolo/exportify-cli.git @@ -17,18 +18,17 @@ $ pip install -r requirements.txt ``` (recommended to use a virtual environment) -3. **Create an app on Spotify Developer Dashboard:** - - Go to [Spotify Developer Dashboard](https://developer.spotify.com/dashboard). - - Set a name and description for your app. - - In the "Redirect URIs" field, use: `http://localhost:3000/callback` (for example). +3. **Set up Client ID, Client Secret and Redirect URI:** -4. **Configure your credentials:** - - Replace `CLIENT_ID`, `CLIENT_SECRET`, and `REDIRECT_URI` in the `config.cfg.RENAME` file. - - These values can be found in the "Settings" section of your app on the Spotify Developer Dashboard. - -6. **Rename `config.cfg.RENAME` to `config.cfg`** +The first time you run exportify-cli, it will guide you through the setup: +``` +1. Go to Spotify Developer Dashboard (https://developer.spotify.com/dashboard). +2. Create a new app. +3. Set a name and description for your app. +4. Add a redirect URI (e.g. http://localhost:8080). +``` -After running `python exportify.py` the first time, it should keep you authenticated so you don't have to log in each time. If you wish to log out, simply remove the `.cache` file. +After running `python exportify-cli.py` or `exportify-cli.exe` the first time, it should keep you authenticated so you don't have to log in each time. If you wish to log out, simply remove the `.cache` file. --- diff --git a/config.cfg.RENAME b/config.cfg.RENAME deleted file mode 100644 index 1385148..0000000 --- a/config.cfg.RENAME +++ /dev/null @@ -1,4 +0,0 @@ -[spotify] -client_id = CLIENT_ID -client_secret = CLIENT_SECRET -redirect_uri = REDIRECT_URI # (http://localhost:3000/callback works for me) diff --git a/exportify.py b/exportify-cli.py similarity index 89% rename from exportify.py rename to exportify-cli.py index 313be90..c70f737 100644 --- a/exportify.py +++ b/exportify-cli.py @@ -12,6 +12,29 @@ # Load configuration from config.cfg config = configparser.ConfigParser() config.read('config.cfg') +if not os.path.exists('config.cfg'): + print("""config.cfg not found. Let's create it. + +1. Go to Spotify Developer Dashboard (https://developer.spotify.com/dashboard). +2. Create a new app. +3. Set a name and description for your app. +4. Add a redirect URI (e.g. http://localhost:8080). + +Now after creating the app, press the Settings button on the upper right corner. +Copy the Client ID, Client Secret and Redirect URI and paste them below. +""") + client_id = input("Client ID: ") + client_secret = input("Client Secret: ") + redirect_uri = input("Redirect URI: ") + + config['spotify'] = { + 'client_id': client_id, + 'client_secret': client_secret, + 'redirect_uri': redirect_uri + } + + with open('config.cfg', 'w') as configfile: + config.write(configfile) client_id = config.get('spotify', 'client_id') client_secret = config.get('spotify', 'client_secret') @@ -160,9 +183,12 @@ def main(): parser.add_argument('-l', '--list', action='store_true', help="List all playlists") args = parser.parse_args() - + output_dir = args.output - + + # This line opens the Spotify authorization page in the browser + sp.current_user() + if args.list: list_playlists() elif args.all: diff --git a/exportify.png b/exportify.png deleted file mode 100644 index 639798658e62e44a25805b46a03a2a84aa0d15f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18986 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 t%w4Agz_kxuBHAT9LXL3-%D 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 literal 0 HcmV?d00001