mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 07:49:23 +02:00
[plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided
This commit is contained in:
parent
00b6fb512f
commit
cce158b60b
9 changed files with 160 additions and 34 deletions
|
@ -6,6 +6,7 @@ from . import scrobbler
|
|||
|
||||
# https://listenbrainz.org/lastfm-proxy
|
||||
DEFAULT_SCROBBLER_URL = "http://post.audioscrobbler.com"
|
||||
LASTFM_SCROBBLER_URL = "https://ws.audioscrobbler.com/2.0/"
|
||||
|
||||
|
||||
@plugins.register_hook(plugins.LISTENING_CREATED, PLUGIN)
|
||||
|
@ -17,23 +18,51 @@ def forward_to_scrobblers(listening, conf, **kwargs):
|
|||
password = conf.get("password")
|
||||
url = conf.get("url", DEFAULT_SCROBBLER_URL) or DEFAULT_SCROBBLER_URL
|
||||
if username and password:
|
||||
PLUGIN["logger"].info("Forwarding scrobbler to %s", url)
|
||||
session = plugins.get_session()
|
||||
session_key, now_playing_url, scrobble_url = scrobbler.handshake_v1(
|
||||
session=session, url=url, username=username, password=password
|
||||
)
|
||||
scrobbler.submit_now_playing_v1(
|
||||
session=session,
|
||||
track=listening.track,
|
||||
session_key=session_key,
|
||||
now_playing_url=now_playing_url,
|
||||
)
|
||||
scrobbler.submit_scrobble_v1(
|
||||
session=session,
|
||||
track=listening.track,
|
||||
scrobble_time=listening.creation_date,
|
||||
session_key=session_key,
|
||||
scrobble_url=scrobble_url,
|
||||
)
|
||||
if (
|
||||
PLUGIN["settings"]["lastfm_api_key"]
|
||||
and PLUGIN["settings"]["lastfm_api_secret"]
|
||||
and url == DEFAULT_SCROBBLER_URL
|
||||
):
|
||||
PLUGIN["logger"].info("Forwarding scrobble to %s", LASTFM_SCROBBLER_URL)
|
||||
session_key = PLUGIN["cache"].get(
|
||||
"lastfm:sessionkey:{}".format(listening.user.pk)
|
||||
)
|
||||
if not session_key:
|
||||
PLUGIN["logger"].debug("Authenticating…")
|
||||
session_key = scrobbler.handshake_v2(
|
||||
username=username,
|
||||
password=password,
|
||||
scrobble_url=LASTFM_SCROBBLER_URL,
|
||||
session=session,
|
||||
api_key=PLUGIN["settings"]["lastfm_api_key"],
|
||||
api_secret=PLUGIN["settings"]["lastfm_api_secret"],
|
||||
)
|
||||
PLUGIN["cache"].set(
|
||||
"lastfm:sessionkey:{}".format(listening.user.pk), session_key
|
||||
)
|
||||
scrobbler.submit_scrobble_v2(
|
||||
session=session,
|
||||
track=listening.track,
|
||||
scrobble_time=listening.creation_date,
|
||||
session_key=session_key,
|
||||
scrobble_url=LASTFM_SCROBBLER_URL,
|
||||
api_key=PLUGIN["settings"]["lastfm_api_key"],
|
||||
api_secret=PLUGIN["settings"]["lastfm_api_secret"],
|
||||
)
|
||||
|
||||
else:
|
||||
PLUGIN["logger"].info("Forwarding scrobble to %s", url)
|
||||
session_key, now_playing_url, scrobble_url = scrobbler.handshake_v1(
|
||||
session=session, url=url, username=username, password=password
|
||||
)
|
||||
scrobbler.submit_scrobble_v1(
|
||||
session=session,
|
||||
track=listening.track,
|
||||
scrobble_time=listening.creation_date,
|
||||
session_key=session_key,
|
||||
scrobble_url=scrobble_url,
|
||||
)
|
||||
PLUGIN["logger"].info("Scrobble sent!")
|
||||
else:
|
||||
PLUGIN["logger"].debug("No scrobbler configuration for user, skipping")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue