UNPKG

itunesfm

Version:

Sync last.fm play counts with your iTunes library.

66 lines (41 loc) 2.09 kB
# itunesfm A small script to sync your play counts from [last.fm](http://last.fm) back to iTunes. Supports both Windows and Mac OS X without any native dependencies. (Requires Music.app on OS X.) Useful if you scrobble to last.fm from iTunes on multiple computers / devices and want to keep your local play counts consistent. ## Changelog ### v1.3.0 - Added retries and fixed handling for large amounts of tracks. ## Usage ``` npx itunesfm itunesfm <last.fm username> ``` Potential changes will be displayed in the console, and you will be prompted before anything is actually saved. Play counts will only be updated if the last.fm play count is **higher** than your local play count. ## Notes Songs are matched using a fairly naive method: - First, we look for exact name + artist matches. - If none exist, we consider exact name matches only. - If still none exist, consider names with >= 80% similarity (via Levenshtein distance) It should be pretty easy to improve :) In the case of ambiguities, you will be prompted for verification: this is then recorded in a `matching.json` file (in `/usr/local/lib/node_modules/itunesfm`, or `%APPDATA%\npm\node_modules\itunesfm` on Windows) for future script runs. In the case where songs cannot be matched, you can try modifying `matching.json` manually. You'll notice that the script prints the following: ``` warning: could not match (..song..) (id = <identifier string>) ``` `matching.json` maps the `id` strings to `last.fm` track URLs. Example of a valid mapping (id format varies by platform): ``` { "211801203:-536327029":["http://www.last.fm/music/Aimer/_/Last+Stardust"], "-1005162388:-866900706":["http://www.last.fm/music/%E3%82%84%E3%81%AA%E3%81%8E%E3%81%AA%E3%81%8E/_/%E6%98%A5%E6%93%AC%E3%81%8D"], } ``` You can find the URL for a song on last.fm by checking your scrobble history and going to the track page. The format should match the example exactly (`http://www.last.fm/music/<ARTIST>/_/<SONG_NAME>`). ## Making changes To compile: ``` pnpm install && pnpm run build ``` Run: ``` pnpm start ```