feat: support Last.fm scrobble

This commit is contained in:
qier222 2021-03-23 23:43:29 +08:00
parent cc50faeb09
commit 55585a921f
No known key found for this signature in database
GPG key ID: 9C85007ED905F14D
12 changed files with 300 additions and 25 deletions

79
src/api/lastfm.js Normal file
View file

@ -0,0 +1,79 @@
// Last.fm API documents 👉 https://www.last.fm/api
import axios from "axios";
import md5 from "crypto-js/md5";
const apiKey = process.env.VUE_APP_LASTFM_API_KEY;
const apiSharedSecret = process.env.VUE_APP_LASTFM_API_SHARED_SECRET;
const baseUrl = window.location.origin;
const url = "https://ws.audioscrobbler.com/2.0/";
const sign = (params) => {
const sortParamsKeys = Object.keys(params).sort();
const sortedParams = sortParamsKeys.reduce((acc, key) => {
acc[key] = params[key];
return acc;
}, {});
let signature = "";
for (const [key, value] of Object.entries(sortedParams)) {
signature += `${key}${value}`;
}
return md5(signature + apiSharedSecret).toString();
};
export function auth() {
window.open(
`https://www.last.fm/api/auth/?api_key=${apiKey}&cb=${baseUrl}/#/lastfm/callback`
);
}
export function authGetSession(token) {
const signature = md5(
`api_key${apiKey}methodauth.getSessiontoken${token}${apiSharedSecret}`
).toString();
return axios({
url,
method: "GET",
params: {
method: "auth.getSession",
format: "json",
api_key: apiKey,
api_sig: signature,
token,
},
});
}
export function trackUpdateNowPlaying(params) {
params.api_key = apiKey;
params.method = "track.updateNowPlaying";
params.sk = JSON.parse(localStorage.getItem("lastfm"))["key"];
const signature = sign(params);
return axios({
url,
method: "POST",
params: {
...params,
api_sig: signature,
format: "json",
},
});
}
export function trackScrobble(params) {
params.api_key = apiKey;
params.method = "track.scrobble";
params.sk = JSON.parse(localStorage.getItem("lastfm"))["key"];
const signature = sign(params);
return axios({
url,
method: "POST",
params: {
...params,
api_sig: signature,
format: "json",
},
});
}