Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gioxx/spotify-save-new-music-friday

Save Spotify's "New Music Friday" playlist automatically - Powered by Github Actions, based on the original script by @RegsonDR.
https://github.com/gioxx/spotify-save-new-music-friday

discover-weekly github-actions music new-music-friday python scheduled-tasks songs spotify-api

Last synced: about 1 month ago
JSON representation

Save Spotify's "New Music Friday" playlist automatically - Powered by Github Actions, based on the original script by @RegsonDR.

Awesome Lists containing this project

README

        

# Spotify Save New Music Friday
Based on the original (**[spotify-save-discover-weekly](https://github.com/RegsonDR/spotify-save-discover-weekly])**) by ([@RegsonDR](https://github.com/RegsonDR))

[![Append songs](https://github.com/gioxx/spotify-save-new-music-friday/actions/workflows/append.yaml/badge.svg)](https://github.com/gioxx/spotify-save-new-music-friday/actions/workflows/append.yaml) [![Backup New Music Friday](https://github.com/gioxx/spotify-save-new-music-friday/actions/workflows/backup_nmf.yml/badge.svg)](https://github.com/gioxx/spotify-save-new-music-friday/actions/workflows/backup_nmf.yml)

This script automatically saves your "New Music Friday" playlist which is generated by Spotify and refreshed every Friday. The songs from the temporary playlist are saved into a permanent playlist (a cumulative one or brand new playlist every Friday), using the Spotify API ([Authorization Code Flow](https://developer.spotify.com/documentation/general/guides/authorization-guide/#authorization-code-flow)). The automation is powered by [GitHub Actions](https://docs.github.com/en/actions) and executes automatically on Fridays as defined in the [append.yaml](/.github/workflows/append.yaml) (cumulative playlist, append songs every Friday) and/or [nmf.yaml](/.github/workflows/nmf.yaml) (brand new playlist every Friday).

## Initial Set Up (approx: 10 minutes)
You should not need to make any commits back to the repo. The files in [/setup](/setup) will help obtain the authorization information for setting up the environment variables in GitHub secrets in order to allow `main.py` and/or `nmf.py` to execute properly. You need to fork this repo in order to have your own instance of GitHub Actions.

### (1) Create a Fork
Start off with simple fork by clicking on the "Fork" button. Once you've done that, you can use your favorite git client to clone your repo or use the command line:
```bash
# Clone your fork to your local machine
$ git clone https://github.com//spotify-save-new-music-friday.git
```

### (2) Libraries
Use the package manager [pip](https://pip.pypa.io/en/stable/) to install all of the required libraries. You could use this with a [virtual environment](https://docs.python.org/3/library/venv.html) if required.
```bash
$ pip install -r requirements.txt
```

### (3) Spotify API Credentials
1. Open the `.sample.env` file from the [/setup](/setup) folder on your local machine.
2. Sign into your [Spotify API Dashboard](https://developer.spotify.com/dashboard/applications) and create a new application. You can use any uri for the redirect uri, this is the base uri you will be redirected to after authorizing the app to access your account. If you see a "INVALID_CLIENT: Invalid redirect URI", then edit settings of your app from the Spotify dashboard and add your uri as a redirect uri.
3. Fill out the env file with the same Client ID, Secret and Redirect URI details used in step 2 and save this file as `.env`. **Do not post these details anywhere publically.**

Example:
```
CLIENT_ID=thisisanid
CLIENT_SECRET=thisisasecret
REDIRECT_URI=https://your.url/here
```
5. Execute [authorization.py](/setup/authorization.py) and open the URL generated.
6. Authorize your app to access your Spotify account, this will then redirect you to your Redirect URI with a `?code=` parameter in the url.
7. Copy the whole url you were redirected to into the console and hit enter, this will then give you your refresh token. **Do not post this refresh token anywhere publically.**

Example:
```
$python authorization.py
Open this link in your browser: https://accounts.spotify.com/authorize?client_id=thisisanid&response_type=code&redirect_uri=https%3A%2F%2Fgithub.com%2FRegsonDR&scope=user-library-read+playlist-modify-public+playlist-modify-private+playlist-read-private+playlist-read-collaborative

Enter URL you was redirected to (after accepting authorization):
> https://your.url/here?code=somecodehere

Your refresh token is: somerefreshtokenhere
```

### (4) GitHub Actions
1. Go to the settings of your forked repo and click on Secrets.
2. You will need to create the following secrets:
* **CLIENT_ID** - Use the same Client ID from your `.env`.
* **CLIENT_SECRET** - Use the same Client Secret from your `.env`
* **REFRESH_TOKEN** - Use the refresh token generated in the [(3) Spotify API Credentials](#3-spotify-api-credentials) instructions above.
* **NEW_MUSIC_FRIDAY_ID** - This is the ID of your New Music Friday playlist, which can obtained using the [method](#obtaining-spotify-playlist-ids) described below.
* **SAVE_TO_ID** - This is the ID of your permanent playlist, which can be obtained using the [method](#obtaining-spotify-playlist-ids) described below. You will need to create a new playlist or use an existing playlist if there is somewhere you would like to already save the songs into.
* **USER_ID** - This is the ID of your user (is the username you have choosen and used to register on Spotify).

![image](https://user-images.githubusercontent.com/32569720/113211160-0a7d3380-926d-11eb-97bc-0e17ef911336.png)

---

#### Obtaining Spotify Playlist IDs
1. Right click on a playlist > "Share" > Copy the Spotify URI (`spotify:playlist:c11M5VLWLMh66yW4gsl51S`).
2. The ID is of this playlist is `c11M5VLWLMh66yW4gsl51S`, use this for the environment variable.

If the URL is different, for example https://open.spotify.com/playlist/37i9dQZF1DWVKDF4ycOESi?si=7f0b77dde6fc4382, the ID is the first part before the `?si=`, then `37i9dQZF1DWVKDF4ycOESi` (in the case of the example).

---

## Manual Execution via GitHub Actions
1. Go to Actions in your forked repo.
2. Click on "Append songs"
3. Click on "Run workflow" which will bring up a drop down menu.
4. Click on "Run Workflow" again, this will initiate the script. Within the next few minutes, the script should execute and your songs should be in your new playlist in Spotify.

Any execution errors can be found from within the actions tab of your forked repo.

![image](https://user-images.githubusercontent.com/32569720/113211386-4fa16580-926d-11eb-94c9-ddb513a122a7.png)

If you want to create a brand new playlist, backup of actual New Music Friday, you have to choose "**Backup New Music Friday**" instead "**Append songs**".

## Local Execution
Alternatively, you can store the **REFRESH_TOKEN**, **NEW_MUSIC_FRIDAY_ID** & **SAVE_TO_ID** back into your `.env` file and execute `main.py` or `nmf.py` on your machine when required, maybe manually or using a task scheduler. Make sure to have the `.env` and `main.py` (or `nmf.py`) files in the same directory for this.

```
$python main.py
```
---

## Next Steps:
- ~~RSS feed (contains weekly playlist backups)~~ [JSON now available](https://github.com/gioxx/spotify-save-new-music-friday/commit/438e160c38c0175a3795ec9f9b4d0f06b2e7d56c)!
- Summary webpage (with all weekly "New Music Friday" direct links)

## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

## License
[MIT](https://choosealicense.com/licenses/mit/)

## Credits
https://github.com/spotify/web-api/issues/519#issuecomment-618114678
https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/
https://towardsdatascience.com/how-to-download-an-image-using-python-38a75cfa21c
https://stackoverflow.com/a/16129667
https://stackoverflow.com/a/179608
https://stackoverflow.com/a/34843232