Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simongoricar/lastfm-extended-scrobbles
Generate extended stats from your Last.fm scrobbles using your local music library, MusicBrainz and YouTube.
https://github.com/simongoricar/lastfm-extended-scrobbles
analyzer lastfm music-library musicbrainz python scrobbles statistics youtube
Last synced: about 2 months ago
JSON representation
Generate extended stats from your Last.fm scrobbles using your local music library, MusicBrainz and YouTube.
- Host: GitHub
- URL: https://github.com/simongoricar/lastfm-extended-scrobbles
- Owner: simongoricar
- License: mit
- Created: 2020-12-05T13:58:21.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-23T15:27:55.000Z (12 months ago)
- Last Synced: 2024-05-19T00:03:03.233Z (8 months ago)
- Topics: analyzer, lastfm, music-library, musicbrainz, python, scrobbles, statistics, youtube
- Language: Python
- Homepage:
- Size: 252 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# lastfm-extended-scrobbles
[![Uses Last.fm](https://img.shields.io/badge/scrobbles%20from-LastFM-D51007?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjI0IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyNCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjQiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjAtMTItMDVUMTU6MzI6MjMrMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjAtMTItMDVUMTU6MzI6MjMrMDE6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS43LjMiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMDVUMTU6MzI6MjMrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pt2wbkgAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pSlP2AGhoaJKzJogyklgajLKgGNchq0ZdPA3883lMiWoNWoSBq6ddQf0GtQXMQFEUQTQ3NRS0lr/MyUCLP5dzzud97z+Hec8EeSSsZo24AMtm8HgoG3PPRBXf9My6ctOCGmGJoM+GJCDXt4w6bFW/6rFq1z/1rTcsJQwFbg/Cooul54Unh6dW8ZvG2cIeSii0Lnwp7dbmg8K2lx8v8YnGyzF8W65HQGNjbhN3JKo5XsZLSM8LycjyZdEH5vY/1ElciOxeW2C3ehUGIIAHpxRTjjOFnkBGZ/fTho19W1Mgf+MmfJSe5iswaa+iskCRFHq+oBamekKiKnpCRZs3q/9++GuqQr1zdFQDnk2m+9UD9FpSKpvl5aJqlI3A8wkW2kp87gOF30YsVzbMPrRtwdlnR4jtwvgmdD1pMj/1IDnG7qsLrCTRHof0aGhfLPfvd5/geIuvyVVewuwe9cr516RsaamfDOl2SJwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAgpJREFUSInt1DtoVEEUBuBzFY2miKigRkSsBAUtfBWCIDaCtrYiWIhdBEsfrYVYWQmC1mIhNmnSqtiIhWJhITYq8RGT3c3u5uFnMXNxuO6STpv8cOFyzn/mnPnnn4lYxf9GNSiIzRExFhGfq6paWGkRrIuI8YgYiYhPVVV1BpH2YQo/sIA2lvEdt7BtQM3xXLOEDlpYxAdcRFUTL2fCssHoYhYHisVP5ZpfQ2rauBY4jPkisYg59PCziP/Ku9mZG0wXuU4eopsXrtEPvCim6OI1jmAbzuJLke/jLnZlbo332J2/Vzm2VDcop29ja0PnE42pOjnWKmLvsCPzD+IhbuB8YKYgPhrikpfFLtq4lOWq0ZUkfYPbGC+LO5m0iOtDGpyRDrnG8yxVx9/o54b3sD0kS9aJq0MarG9I2ccOyX0zDblKzttoTPZgUIPc5ElDkvs5Pip5/nFuVJ7XXEiWrNHCpsbCo5KuFxqTzuPQAO5TyUHQWxMR3YKzNiKe4aR0S+9ExIeIuBIReyNiuuBuiIgp6cD3S/fjaETsiT9P0ELgXGNbi1m22fxf4xuO+ftgW1mFeeli9kopA5V04oMcUaODzxiRHNVagS8PPVHqd1K6xd08TQ9fMYkJbCy4Y7iJj5JberlpX3LlJE5HDHiupRdwPCKWqqqabuaH8Lfk72tEzFZVZaW6Vfw7/AbjWhIzWfCAJQAAAABJRU5ErkJggg==)](https://www.last.fm/)
[![With data from MusicBrainz](https://img.shields.io/badge/uses-MusicBrainz-BA478F?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjI0IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjQiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyNCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjQiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjAtMTItMDVUMTU6Mzc6MDMrMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjAtMTItMDVUMTU6Mzc6MDMrMDE6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJwcm9kdWNlZCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWZmaW5pdHkgRGVzaWduZXIgMS43LjMiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMDVUMTU6Mzc6MDMrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PtafZuAAAAGCaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP1lSlGVQQ0OD/Zw0zCBqaTD6BdWgBlkt+vwVqD3eU0Jag9agIGrp11B/Qa1BcxAURRBNDc1FLSWv81RQIs/l3PO533vP4d5zwRJIKim9zg2pdEbzTXkdi8ElR/0rNqy00ENXSNHVOf9kgKr29UCNGe9cZq3q5/61pkhUV6CmQXhMUbWM8LTw7HpGNXlXuF1JhCLC58JOTS4ofG/q4SK/mRwv8o/JWsA3DpZWYUe8gsMVrCS0lLC8nN5UMquU7mO+xBZNL/gldot3ouNjCi8OZphgnGEGGZV5GBceBmRFlXx3IX+eNclVZFbJobFKnAQZnKJmpXpUYkz0qIwkObP/f/uqx4Y8xeo2L1hfDOOjD+p3IL9tGN/HhpE/gdpnuEqX89eOYORT9O2y1nsI9k24uC5r4T243IKOJzWkhQpSrbglFoP3M2gOQtstNC4Xe1ba5/QRAhvyVTewfwD9ct6+8gtpVGfnYrdsTgAAAAlwSFlzAAALEwAACxMBAJqcGAAABAVJREFUSImdll9MU3cUx78F2vtAIKEBHoqvJCSw4ENdQCOLzEWMghILwhDYBFHCiwIbiKwspmsWYtEERaqhdTFAARNXrCQtyL9hdPCAbWlaJDaraaxpZUraWoRLzh42OtpS6PZN7sO9v3O+n9zf+d1zLgcRqKa6mpuVlSW32+1FACAQCIa0Ot25oQcPNiLJ31EdMlmdyWDwEsvSrc5OutXZScSytKDXeztksrr/bfyTRHJgfGzsNbEsbV5bAZvXk9HR11KJJDti4zaxOHloYOA3n8cTYKTq6yOBQBACIJalj243DapU021icXJY4yKRKPquXC5/Y7ezW5Nfms301eHDBIAABABsVit9U1lJNquViGXpjd3O3pXLbxeJRNEB5tfa28v08/PurcY+j4d+aG0lhmH85sEAZU8PfZmbS5KrVwPeSD8/777W3l7mB2jUauPWgFWvl1JTUwOMARCPx6O9mZlUe+ECVZSX09G8PJqamCD20ycilqWpiQn6/dkzIpYljVptBICY7bbL5/NhaWnJfx8bG4vWlhYwDAOGYXCioAC1dXUoPHkSOQcPAgCICN83NYHH42F6ctKfG7Vb0UtOn4bFZEJzU5P/WUpKCtQPH6JfpUJxSQkAgMPhICkpCd81Ngbk7wh4/OgR+nt7kZCQgMtXrqC5pcW/xuFw8EVODrhcLtbX1wEAiYmJyD9+PHLAPqEQA4ODSEtPh81mQ0N9Pbxer3+9TSxG7/374HK5AACn0wmtThdqFFzk9+/eEQDaJxTSZxkZNDk+7v/Q9mZmUkF+Pv3pchGxLK35fDQ+Nkbna2ooIz2dDuzfv3uRNyU6dQoN9fWIjv73WJ+rrkbuoUO41NCAlZUVvFxaAjcmBprhYegNBsTHxwd47AgoP3MmwHxTaWlpuKdQAAA2NjbwbVUVtDodqs6eDYnd9RSFk9lsxtFjx6AeHsY9hQKzc3NQKJX+gocF/KpWQ1RcvCvg/YcPcDgccDqdiIqKQndXF67fuIEThYUBcQFb5HA4UFpWhtXVVXC5XDAMExZgMplw6eJFVFZUAPj72AqFQvD5/PAAhmEQFxcHhmHQdfNmSPCmLBYLZp4+xS9KJR6PjGB2bg4/isVQ9vSExEYBgGVxUWowGj18Ph9/vHoF19u3+Lq0dFvzvv5+fJ6djeXlZfQoFKhvbMTMzAxcLpc/xmA0eiyLi9KAxH/a9e3gdh08cH6WSmljbY1sViuNaDRkXlig2efP/e36Tnd3V0i73qo2sTh5UKWa/uh2bwvYYeBMXW5uTgprHCypRJL9ZHQ0kpFp+08jM1gdMlndgl4fMvSNL154r8tktbvlcyKBFIlE0XlHjtyx2+3FAJCyZ8+AVqs9H8lvy18N0ePSgaAMDgAAAABJRU5ErkJggg==)](https://www.last.fm/)[![Python 3.8+](https://img.shields.io/badge/python-3.8%2B-7986cb?style=flat-square&logo=python&logoColor=white)](https://www.python.org)
[![Poetry](https://img.shields.io/badge/dependency%20manager-poetry-689f38?style=flat-square&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAcCAYAAABlL09dAAAEsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjIyIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjgiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIyMiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMjgiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjcyLjAiCiAgIHRpZmY6WVJlc29sdXRpb249IjcyLjAiCiAgIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiCiAgIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjAtMTAt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)](https://python-poetry.org)Generate extended stats from your Last.fm scrobbles using your local music library, MusicBrainz and YouTube.
## 1. Installation
To run *lastfm-extended-scrobbles*, download the latest release or clone/download this repository to some directory.Then, if you have [Poetry](https://python-poetry.org/) installed, simply run `poetry install`.
Otherwise, install the dependencies from the generated `requirements.txt` file with `pip install -r requirements.txt`## 2. Usage
### 2.1. Setup
Take an example configuration file at `data/config.EXAMPLE.toml`, copy it to `data/config.toml` and fill out the [Last.fm API key/secret](https://www.last.fm/api/account/create) as well as the scrobbles JSON file (see below) and local music library path. Other settings can be left alone.Before running the script, you need to have a JSON file with your [Last.fm](https://www.last.fm/) scrobbles.
This script can process a list of pages returned by the Last.fm API.The recommended way to save your scrobbles into a correct JSON format is using the provided script in `data/download-scrobbles.py`.
Run it with `python download-scrobbles.py --username myusername` to download your scrobbles into a JSON file in the `data` directory
(you'll need to have the configuration file already filled out and the dependencies installed for the script to work).
An alternative is the JSON output of a site like [ghan.nl/scrobbles](https://mainstream.ghan.nl/scrobbles.html),
but the loved tracks column will be always 0 this way.*lastfm-extended-scrobbles* has multiple modes of search:
- Local music library lookup via track MBID (extremely fast once indexed)
- Local music library lookup via track metadata (both exact and fuzzy matching, still very fast)
- MusicBrainz track MBID lookup (not too bad)
- YouTube search (slowest, but also only if previous methods fail)
- If everything above fails, an entry with just the scrobble data is created (but some columns will be empty)If first one fails to find a match, the second method is attempted, and so on.
*It is therefore highly recommended that you link your local music library (which should be properly tagged) with this script if you have one.*Genres are looked up via Last.fm tags and filtered by the huge list of genres provided by [Beets' LastGenre plugin](https://github.com/beetbox/beets).
Amount of genres to output is configurable via `max_genre_count` in the configuration file, but defaults to 4. Track genre has the highest priority, then album genre, then finally artist genres.*Important tldr:* Before running, the Last.fm API key/secret, music library location and the scrobbles file path must be filled out and saved into the configuration file at `data/config.toml`
(use the `data/config.EXAMPLE.toml` file as a template).### 2.2. Run the script
If you used Poetry for the install, run the script with `poetry run python analyse.py`. If not, use `python analyse.py`.The script will first index your music library and then proceed to generate a spreadsheet (xlsx extension) with the extended scrobble information.
The resulting spreadsheet will be (by default) saved to `data/output-timestamp.xlsx`.### 2.3. Maintenance and troubleshooting
If the content of your music library changes (or its path does), you must delete the music library cache at `data/cache/library_cache.json`, otherwise the script will not work properly.If unexpected errors pop up during the analysis and they aren't caused by something like a configuration issue, please do fill out a GitHub Issue with details of your problems.
## 3. Extended Data
This tool outputs the original data from the scrobble, attempts to improve columns like artist names and track titles. It extends the data with the track length and genre as well via Last.fm tags.**All columns:**
- Track source `local music library / MusicBrainz / YouTube`
- Scrobble time `unix epoch`
- Artist name and MusicBrainz ID `uses scrobbled info unless there's a local library match`
- Album title and MusicBrainz ID `^`
- Track title and MusicBrainz ID `^`
- Track length `in seconds, with one decimal place for local library files`
- Track love `based on loved tracks from Last.fm`
- Genre `merged track/album/artist genres, sorted by weight`---
##### A note on expected speed
Speed of this script varies quite a bit. If most of your scrobbles are present in your local music library (for example around 90%),
the speed of a fresh run without any cache should be around 2 minutes per 1000 scrobbles. If you are processing scrobbles over a longer
period of time and you listened to the same track multiple times, expect this to be shorter as the cache will be hit much more often.
The slowest operations are when the script has to reach out to MusicBrainz, YouTube and/or Last.fm as we are limited by their rate limits.