{"id":16557133,"url":"https://github.com/prem-ium/spotify-wrapped-365","last_synced_at":"2025-10-28T20:31:06.812Z","repository":{"id":40594632,"uuid":"503821133","full_name":"Prem-ium/Spotify-Wrapped-365","owner":"Prem-ium","description":"Your Top Spotify Listening Habits, Favorite Artists, and Song Recommendations in a Playlist🎧🎶 ","archived":false,"fork":false,"pushed_at":"2025-01-16T22:48:44.000Z","size":22310,"stargazers_count":10,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-06T10:47:27.734Z","etag":null,"topics":["docker","favorite-songs","personalization","python","spotify","spotify-api","spotify-library","spotify-playlist-generator","spotify-top50","spotify-wrapped","spotifywrapped","spotipy","spotipy-api","spotipy-library","top-tracks","wrapped"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Prem-ium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.MD","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":["Prem-ium"],"custom":"https://www.buymeacoffee.com/prem.ium"}},"created_at":"2022-06-15T15:23:47.000Z","updated_at":"2025-01-24T20:19:38.000Z","dependencies_parsed_at":"2024-01-17T16:10:08.008Z","dependency_job_id":"d6ab4b59-0db3-41ca-ba1f-d83099cc3af4","html_url":"https://github.com/Prem-ium/Spotify-Wrapped-365","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prem-ium%2FSpotify-Wrapped-365","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prem-ium%2FSpotify-Wrapped-365/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prem-ium%2FSpotify-Wrapped-365/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prem-ium%2FSpotify-Wrapped-365/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Prem-ium","download_url":"https://codeload.github.com/Prem-ium/Spotify-Wrapped-365/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238710702,"owners_count":19517754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","favorite-songs","personalization","python","spotify","spotify-api","spotify-library","spotify-playlist-generator","spotify-top50","spotify-wrapped","spotifywrapped","spotipy","spotipy-api","spotipy-library","top-tracks","wrapped"],"created_at":"2024-10-11T20:06:36.897Z","updated_at":"2025-10-28T20:31:06.807Z","avatar_url":"https://github.com/Prem-ium.png","language":"Python","funding_links":["https://github.com/sponsors/Prem-ium","https://www.buymeacoffee.com/prem.ium"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  🎧 Spotify Wrapped 365 🎶\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  View your Spotify \u003ci\u003eTop Tracks\u003c/i\u003e in a Playlist, \u003ci\u003eTop Played Artists, \u0026 More\u003c/i\u003e!\n\u003c/p\u003e\n\n\u003cp align=\"right\"\u003e\n        \u003ca href=\"https://developer.spotify.com/dashboard\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Spotify-1ED760?style=for-the-badge\u0026logo=spotify\u0026logoColor=white\"/\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54\"/\u003e\n  \u003ca href=\"https://github.com/sponsors/Prem-ium\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/sponsor-30363D?style=for-the-badge\u0026logo=GitHub-Sponsors\u0026logoColor=#EA4AA\" alt=\"Github Sponsor\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/695ee24e-eb95-493c-8e2e-920aef65eec5?raw=true\" alt=\"Spotify Wrapped 365 Banner\"/\u003e\n\u003c/p\u003e\n\n---\n## Features\n- Generate Top Tracks Playlist that auto-updates!\n- Generate List of Top Played Artists\n- ~~Generate Reccomended Tracks Playlists~~ (API Endpoint Depreciated)\n- Optional Apprise Alerts/Notifications\n- Docker Support\n- Google Sheets Compatiable. \n- Keep_Alive Flask Server\n\n---\n## Environment Variables\nTo run this project, you will need to add the following environment variables to your .env file (see .env.example for a reference):\n### Required .env\n\n| Environment Variable   | Description                                                                                                            |\n|------------------------|------------------------------------------------------------------------------------------------------------------------|\n| `CLIENT_ID`            | Found on [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/).                                      |\n| `SECRET_CLIENT_ID`     | Found on [Spotify Developer Dashboard](https://developer.spotify.com/dashboard/).                                      |\n| `REDIRECT_URL`         | The Redirect URL you added when creating the App on Spotify's Developer Dashboard. Check `.env.example` for reference. |\n| `USERNAME`             | Your Spotify account username (can be found in Spotify account settings).                                             |\n\n### Optional Environment Variables:\n| Environment Variable   | Description                                                                                                            | Default Value                        |\n|------------------------|------------------------------------------------------------------------------------------------------------------------|--------------------------------------|\n| `MINUTES`              | The number of minutes to wait before updating the Top Tracks playlist.                                                   | `360` (or 6 hours)                  |\n| `PUBLIC_PLAYLIST`      | Determines whether to create a public playlist. Accepts boolean values (`True`/`False`).                                 | `True`                               |\n| `KEEP_ALIVE`           | Whether to keep the Flask server running to prevent the program from sleeping on Replit. Accepts boolean values (`True`/`False`). | `False`                              |\n| `APPRISE_ALERTS`       | List of services and URLs for notifications. For more information, visit the [Apprise Wiki](https://github.com/caronc/apprise/wiki). | Not set                              |\n| `TZ`                   | The desired time zone, formatted according to the IANA Time Zone Database.                                              | `America/New_York`                   |\n| `AUTH_CACHE`           | A cached JSON string retrieved during initial setup, useful for hosting 24/7 on platforms like Render or other free hosting providers. | Not set                              |\n| `GSPREAD_KEYS`         | Google Service Account JSON obtained via OAuth 2.0 Client ID from the Google Cloud API Credentials.                    | Not set                              |\n\n\n---\n## Setup\n\n### Spotify Developer Credentials (Required)\n1. Visit the [Spotify Developer Dashboard](https://developer.spotify.com/dashboard) and log in with your Spotify credentials.\n2. Create a new application. Choose a name, provide a description (optional), and accept the Terms of Service.\n3. In the 'Edit Settings' section, add the redirect URL from your `.env` file, then save. Example:\n   \n   ![Redirect URL Example](https://user-images.githubusercontent.com/80719066/202246758-b0472b8c-b03f-44fc-8e1a-c161c7746a93.png)\n\n4. Click 'Show Client Secret'.\n5. Copy the Client ID and paste it into the `CLIENT_ID` field in your `.env` file. Similarly, copy the Client Secret and paste it into the `SECRET_CLIENT_ID` field.\n\n   ![Client ID Example](https://user-images.githubusercontent.com/80719066/202246004-f7307806-69ec-4489-975b-beb71e6637b3.png)\n\n\n### Google Sheets/GSpread (Optional)\n1. Log in to the [Google Cloud Console](https://console.cloud.google.com), create a new project, and enable the Google Sheets and Google Drive APIs.\n2. Navigate to **API \u0026 Services \u003e Credentials**, then click **Create Credentials \u003e Service Account**. Follow the prompts and download the resulting JSON file.\n3. In Google Sheets, create a new file named 'Wrapped365'. Add the following tabs: `short_term`, `medium_term`, `long_term`, `short_term Artists`, `medium_term Artists`, `long_term Artists`.\n4. Share the Google Sheet with the service account’s email (found in the downloaded JSON file or under the Google Cloud Console **Credentials** section). Grant it **Editor** permissions. The email will look like: `wrapped-test@wrapped-test943892.iam.gserviceaccount.com`.\n\n---\n## Installation\nThis script can be used locally or using Docker.\n### Python\nClone the repository \u0026 Install dependencies\n```bash\n  git clone https://github.com/Prem-ium/Spotify-Wrapped-365.git\n  cd Spotify-Wrapped-365\n  pip install -r requirements.txt\n```\nFinally, you're ready to run the script!\n```bash\n  python main.py\n```\n### Docker\n1. Run script locally with Python \u0026 generate cache file.\n2. Download and install Docker on your system\n3. Configure your `.env` file (See below and example for options)\n4. \n   To build the image, cd into the repository and run:\n   ```sh\n   docker build -t spotify-wrapped .\n   ```\n   Then start the bot with:\n   ```sh\n   docker run -it --env-file ./.env --restart unless-stopped --name spotify-wrapped spotify-wrapped\n   ```\n\n\n5. Let the bot log in and begin working. DO NOT PRESS `CTRL-c`. This will kill the container and the bot. To exit the logs view, press `CTRL-p` then `CTRL-q`. This will exit the logs view but let the bot keep running.\n\n---\n## Donations\nI've been working on this project for a few months now, and I'm really happy with how it's turned out. It's also been a helpful tool for users to view their music data.\nIf you appreciate my work and would like to show your support, there are two convenient ways to make a donation:\n\n1. **GitHub Sponsors**\n   - [Donate via GitHub Sponsors](https://github.com/sponsors/Prem-ium)\n   - This is the preferred donation method as it incurs no transaction fees \u0026 different tiers offer perks.\n   [![GitHub Sponsor](https://img.shields.io/badge/sponsor-30363D?style=for-the-badge\u0026logo=GitHub-Sponsors\u0026logoColor=#EA4AAA)](https://github.com/sponsors/Prem-ium)\n\n2. **Buy Me A Coffee**\n   - [Donate via Buy Me A Coffee](https://www.buymeacoffee.com/prem.ium)\n   - [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/prem.ium)\n\n3. **Referral Links**  \n   - Can’t donate directly? You can still support the project by using my curated [Referral Links](https://github.com/Prem-ium/Referral-Link-Me/blob/main/README.md) to earn bonuses and rewards while helping me out.\n   - [Explore Referral Links](https://github.com/Prem-ium/Referral-Link-Me/blob/main/README.md)  \n\nYour generous donations will go a long way in helping me cover the expenses associated with developing new features and promoting the project to a wider audience. I extend my heartfelt gratitude to all those who have already contributed. Thank you for your support!\n\n---\n## License\nThis repository is using the [MIT](https://choosealicense.com/licenses/mit/) license.\n\n---\n## Experiencing Issues? 🛠️\nI'm not available to respond to issues in this repository. For direct support, please consider sponsoring me below under the `Silver` or `Gold` tier. Keep in mind that the public version is mostly \"as built\" and is rarely updated, while the private Gold Sponsor version receives regular updates and support.\n[![Sponsor](https://img.shields.io/badge/sponsor-30363D?style=for-the-badge\u0026logo=GitHub-Sponsors\u0026logoColor=#white)](https://github.com/sponsors/Prem-ium)\n\n\n\u003c!--\n## 🎧 What I've been listening to\n\n[\u003cimg src=\"covers/short_term.jpg\" style=\"width:30%;height:30%;\"\u003e](https://open.spotify.com/playlist/5RN8v4pe3Ngfym6bK0FkJs?si=0404c9e27b42497c)   [\u003cimg src=\"covers/medium_term.jpg\" style=\"width:30%;height:30%;\"\u003e](https://open.spotify.com/playlist/2K42pHt3WF1gPDmdWUQOSu?si=2a1d8fc85cda4eff)  [\u003cimg src=\"covers/long_term.jpg\" style=\"width:30%;height:30%;\"\u003e](https://open.spotify.com/playlist/17IPVl8ynJLm3wTMEuBr8b?si=7bb9c270eec94938)\n--\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprem-ium%2Fspotify-wrapped-365","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprem-ium%2Fspotify-wrapped-365","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprem-ium%2Fspotify-wrapped-365/lists"}