itunesfm
Version:
Sync last.fm play counts with your iTunes library.
66 lines (41 loc) • 2.09 kB
Markdown
# 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
```