{"id":20790410,"url":"https://github.com/pavelkomarov/exportify","last_synced_at":"2025-04-12T15:37:25.285Z","repository":{"id":39584022,"uuid":"193107159","full_name":"pavelkomarov/exportify","owner":"pavelkomarov","description":"Export Spotify playlists using the Web API. Analyze them in the Jupyter notebook.","archived":false,"fork":false,"pushed_at":"2025-04-08T21:34:02.000Z","size":8849,"stargazers_count":278,"open_issues_count":1,"forks_count":29,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-12T11:12:33.480Z","etag":null,"topics":["data-analysis","github-pages-website","javascript","javascript-promise","jupyter-notebook","spotify","spotify-api","spotify-web-api"],"latest_commit_sha":null,"homepage":"https://exportify.net","language":"Jupyter Notebook","has_issues":true,"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/pavelkomarov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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,"publiccode":null,"codemeta":null},"funding":{"github":["pavelkomarov"],"custom":["venmo.com/Pavel-Komarov"]}},"created_at":"2019-06-21T13:58:48.000Z","updated_at":"2025-04-08T21:34:06.000Z","dependencies_parsed_at":"2024-11-17T15:38:47.949Z","dependency_job_id":"5b7bae7c-159a-4262-b16e-5afcebba813a","html_url":"https://github.com/pavelkomarov/exportify","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/pavelkomarov%2Fexportify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelkomarov%2Fexportify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelkomarov%2Fexportify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pavelkomarov%2Fexportify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pavelkomarov","download_url":"https://codeload.github.com/pavelkomarov/exportify/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248590523,"owners_count":21129839,"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":["data-analysis","github-pages-website","javascript","javascript-promise","jupyter-notebook","spotify","spotify-api","spotify-web-api"],"created_at":"2024-11-17T15:34:59.184Z","updated_at":"2025-04-12T15:37:25.276Z","avatar_url":"https://github.com/pavelkomarov.png","language":"Jupyter Notebook","readme":"\n[![Build Status](https://github.com/pavelkomarov/exportify/actions/workflows/deploy.yml/badge.svg)](https://github.com/pavelkomarov/exportify/actions)\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pavelkomarov/exportify/master)\n\nExport your Spotify playlist metadata for analysis or just safekeeping: [exportify.net](https://exportify.net)\n\n\u003ca href=\"https://pavelkomarov.com/exportify\"\u003e\u003cimg src=\"screenshot.png\"/\u003e\u003c/a\u003e\n\n### Export Format\n\nPlaylist data is exported in [CSV](http://en.wikipedia.org/wiki/Comma-separated_values) format with the following fields:\n\n- [Track URI](https://developer.spotify.com/documentation/web-api/concepts/spotify-uris-ids)\n- Track Name\n- Album Name\n- Artist Name(s)\n- Release Date\n- Duration (ms)\n- Popularity\n- Added By\n- Added At\n- Genres\n- Record Label\n- Danceability\n- Energy\n- Key\n- Loudness\n- Mode (Major or Minor)\n- Speechiness\n- Acousticness\n- Instrumentalness\n- Liveness\n- Valence\n- Tempo\n- Time Signature\n\n### Analysis\n\nRun the [Jupyter Notebook](https://github.com/pavelkomarov/exportify/blob/master/taste_analysis.ipynb) or [launch it in Binder](https://mybinder.org/v2/gh/pavelkomarov/exportify/master) to get a variety of plots about the music in a playlist including:\n\n- Most common artists\n- Most common genres\n- Release date distribution\n- Popularity distribution\n- Your songs' distributions of Acousticness, Valence, etc.\n- Time signatures and keys\n- All songs plotted in 2D to indicate relative similarities\n\n\n### Development\n\nMost of the interesting logic that communicates with the Spotify Web API happens in Javascript in `exportify.js`. I've left many detailed code comments and tried to structure it as rationally as I can, so take a look. The webpage skin and a few action bindings are defined in `index.html`.\n\nTo experiment with changes, run a local web server. For example, using Python (in the Exportify repo dir):\n\n```bash\npython3 -m http.server\n```\n\nThen open [http://localhost:8000](http://localhost:8000). The Javascript can be invoked by interacting with this locally-served webpage.\n\nData science stuff is written with Python in `taste_analysis.ipynb`, which you can run with `python3 -m notebook`, then navigating to [http://localhost:8888](http://localhost:8888).\n\n### Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -m \"message\"`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n","funding_links":["https://github.com/sponsors/pavelkomarov","venmo.com/Pavel-Komarov"],"categories":["Jupyter Notebook"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelkomarov%2Fexportify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpavelkomarov%2Fexportify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpavelkomarov%2Fexportify/lists"}