{"id":18509146,"url":"https://github.com/dietrichm/admirer","last_synced_at":"2025-04-09T03:32:24.237Z","repository":{"id":37696451,"uuid":"325795279","full_name":"dietrichm/admirer","owner":"dietrichm","description":"🔄 🎶 Sync loved tracks between music services.","archived":true,"fork":false,"pushed_at":"2024-08-13T20:04:58.000Z","size":799,"stargazers_count":3,"open_issues_count":11,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T21:44:48.795Z","etag":null,"topics":["cli","go","golang","lastfm","spotify","sync","synchronization"],"latest_commit_sha":null,"homepage":"https://dietrichm.github.io/admirer/","language":"Go","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/dietrichm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2020-12-31T12:24:58.000Z","updated_at":"2025-03-05T18:42:54.000Z","dependencies_parsed_at":"2024-01-08T21:42:14.120Z","dependency_job_id":"763adeea-e5b0-4396-a93a-784893145219","html_url":"https://github.com/dietrichm/admirer","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/dietrichm%2Fadmirer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dietrichm%2Fadmirer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dietrichm%2Fadmirer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dietrichm%2Fadmirer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dietrichm","download_url":"https://codeload.github.com/dietrichm/admirer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247973947,"owners_count":21026738,"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":["cli","go","golang","lastfm","spotify","sync","synchronization"],"created_at":"2024-11-06T15:16:36.707Z","updated_at":"2025-04-09T03:32:23.936Z","avatar_url":"https://github.com/dietrichm.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Admirer\n\n[![Go version](https://img.shields.io/github/go-mod/go-version/dietrichm/admirer)](go.mod)\n[![Go CI](https://github.com/dietrichm/admirer/actions/workflows/go.yml/badge.svg)](https://github.com/dietrichm/admirer/actions/workflows/go.yml)\n[![License](https://img.shields.io/github/license/dietrichm/admirer)](LICENSE)\n[![Go Reference](https://pkg.go.dev/badge/github.com/dietrichm/admirer.svg)](https://pkg.go.dev/github.com/dietrichm/admirer)\n\nA command line utility to sync loved tracks between music services.\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Installation](#installation)\n  - [Building from source](#building-from-source)\n- [Usage](#usage)\n  - [Supported services](#supported-services)\n  - [Authentication](#authentication)\n- [Use cases](#use-cases)\n  - [Listing recently loved or added tracks](#listing-recently-loved-or-added-tracks)\n  - [Syncing recently loved tracks between services](#syncing-recently-loved-tracks-between-services)\n- [License](#license)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Installation\n\nCompiled binaries will be provided for version 1.0.0.\n\n**Note**: Admirer is currently only tested on Linux.\n\n### Building from source\n\nPlease [install Go 1.20 first](https://golang.org/doc/install), set the `GOPATH` environment variable and ensure `$GOPATH/bin` is present in `$PATH`.\n\n```sh\ngo install github.com/dietrichm/admirer@latest\n```\n\n## Usage\n\n```\nUsage:\n  admirer [command]\n\nAvailable Commands:\n  completion  Generate the autocompletion script for the specified shell\n  help        Help about any command\n  list        List loved tracks on specified service\n  login       Log in on external service\n  status      Retrieve status for services\n  sync        Sync recently loved tracks from one service to another\n\nFlags:\n  -h, --help   help for admirer\n\nUse \"admirer [command] --help\" for more information about a command.\n```\n\n### Supported services\n\nLast.fm and Spotify have an initial implementation.\n\nIn the future, I would like to add support for [ListenBrainz](https://listenbrainz.org/) and CSV/JSON files as well ([#27](https://github.com/dietrichm/admirer/issues/27)).\n\n### Authentication\n\nBefore using any of the provided services, you need to create **your own API application** on said service and export your new API client ID and secret as environment variables:\n\n| Service | Creating your app | Environment variables |\n| ------- | ----------------- | --------------------- |\n| Last.fm | [Create an account here](https://www.last.fm/api/account/create) | `LASTFM_CLIENT_ID` and `LASTFM_CLIENT_SECRET` |\n| Spotify | [Manage and create an app here](https://developer.spotify.com/dashboard/applications) | `SPOTIFY_CLIENT_ID` and `SPOTIFY_CLIENT_SECRET` |\n\nWhen this is done, continue with the following steps.\n\n1. Run `admirer login \u003cservice\u003e` to retrieve an authentication URL.\n1. By visiting this URL, the service will ask confirmation and redirect back to a non existing URL `https://admirer.test/...`.\n1. Copy and paste the desired query parameter from the URL into the CLI input and press \u003ckbd\u003eEnter\u003c/kbd\u003e.\n1. If all goes well, you will retrieve confirmation that you have been logged in.\n\n**Note 1**: after [#23](https://github.com/dietrichm/admirer/issues/23), API client IDs and secrets will be queried during login and stored along with other authentication secrets.\n\n**Note 2**: [#25](https://github.com/dietrichm/admirer/issues/25) will add an internal HTTP server to retrieve the authentication callback automatically.\n\n## Use cases\n\n### Listing recently loved or added tracks\n\nUsing the `list` command, you can retrieve a list of your most recently loved or added tracks on said service.\n\n### Syncing recently loved tracks between services\n\nUsing the `sync` command, you can synchronise recently loved tracks from one service to another.\nFor example to mark as loved on Last.fm the same tracks that were added to your library on Spotify, or vice versa.\n\n## License\n\nCopyright 2020, Dietrich Moerman.\n\nReleased under the terms of the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdietrichm%2Fadmirer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdietrichm%2Fadmirer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdietrichm%2Fadmirer/lists"}