mirror of
https://github.com/G2-Games/website.git
synced 2025-04-19 09:52:53 -05:00
100 lines
4 KiB
JavaScript
100 lines
4 KiB
JavaScript
async function getData(url) {
|
|
try {
|
|
const response = await fetch(url);
|
|
if (!response.ok) {
|
|
throw new Error(`Response status: ${response.status}`);
|
|
}
|
|
|
|
const json = await response.json();
|
|
return json
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
}
|
|
}
|
|
|
|
const USERNAME = "G2";
|
|
const LUCENE_ESCAPE = /([\!\*\+\-\=\<\>\&\|\(\)\[\]\{\}\^\~\?\:\\/"])/g;
|
|
|
|
let artworkTile = document.getElementById("mainArtwork");
|
|
let albumTitle = document.getElementById("albumTitle");
|
|
let albumArtist = document.getElementById("albumArtist");
|
|
let track = document.getElementById("track");
|
|
let status = document.getElementById("musicStatus");
|
|
let prev_mbid = null;
|
|
|
|
async function main() {
|
|
// Get my currently playing song!
|
|
let statusTmp = "Currently playing:";
|
|
let songInfo = await getData("https://api.listenbrainz.org/1/user/" + USERNAME + "/playing-now")
|
|
if (songInfo["payload"]["count"] == 0) {
|
|
// If no current song, get last played
|
|
songInfo = await getData("https://api.listenbrainz.org/1/user/" + USERNAME + "/listens?count=1")
|
|
statusTmp = "Last played song:";
|
|
}
|
|
|
|
if (prev_mbid != null && prev_mbid == JSON.stringify(songInfo)) {
|
|
return;
|
|
}
|
|
prev_mbid = JSON.stringify(songInfo);
|
|
|
|
let artistName = songInfo["payload"]["listens"][0]["track_metadata"]["artist_name"];
|
|
let trackName = songInfo["payload"]["listens"][0]["track_metadata"]["track_name"];
|
|
let releaseMBID = songInfo["payload"]["listens"][0]["track_metadata"]["additional_info"]["release_mbid"];
|
|
if (releaseMBID == null && songInfo["payload"]["listens"][0]["track_metadata"]["mbid_mapping"] != null) {
|
|
releaseMBID = songInfo["payload"]["listens"][0]["track_metadata"]["mbid_mapping"]["release_mbid"];
|
|
}
|
|
|
|
// Search for the MBID if it's not included in the data
|
|
if (releaseMBID == null) {
|
|
let artistSearchName = encodeURIComponent(artistName.replace(LUCENE_ESCAPE, "\\$1"));
|
|
let trackSearchName = encodeURIComponent(trackName.replace(LUCENE_ESCAPE, "\\$1"));
|
|
|
|
console.log("https://musicbrainz.org/ws/2/recording/?query=" + trackSearchName + " AND artist:%22" + artistSearchName + "%22&fmt=json");
|
|
let searchedReleases = await getData(
|
|
"https://musicbrainz.org/ws/2/recording/?query=" + trackSearchName + " AND artist:%22" + artistSearchName + "%22&fmt=json"
|
|
);
|
|
|
|
console.log(searchedReleases);
|
|
|
|
if (searchedReleases["count"] >= 1) {
|
|
if (searchedReleases["recordings"][0]["releases"][0]) {
|
|
|
|
}
|
|
releaseMBID = searchedReleases["recordings"][0]["releases"][0]["id"];
|
|
console.log("Found MBID by search " + releaseMBID);
|
|
}
|
|
}
|
|
|
|
let albumName = "Unknown Album";
|
|
let artworkSrc = "https://placehold.co/260/2220/FFFDE6?text=?&font=roboto";
|
|
if (releaseMBID != null) {
|
|
// Get release information (like album title)
|
|
let releaseInfo = await getData("https://musicbrainz.org/ws/2/release/" + releaseMBID + "?fmt=json&inc=release-groups");
|
|
albumName = releaseInfo["title"];
|
|
|
|
let releaseGroupMBID = releaseInfo["release-group"]["id"];
|
|
|
|
// Grab the image from the release ID
|
|
let coverArtGroup = await fetch("https://coverartarchive.org/release-group/" + releaseGroupMBID + "/front-500");
|
|
if (coverArtGroup.status == 200) {
|
|
artworkSrc = coverArtGroup.url
|
|
} else {
|
|
let coverArtTrack = await fetch("https://coverartarchive.org/release/" + releaseMBID + "/front-500");
|
|
if (coverArtTrack.status == 200) {
|
|
artworkSrc = coverArtTrack.url;
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log("%s %s by %s (%s)", statusTmp, trackName, artistName, albumName);
|
|
|
|
// Fill in the data
|
|
status.textContent = statusTmp;
|
|
albumArtist.textContent = artistName;
|
|
track.textContent = trackName;
|
|
albumTitle.textContent = albumName;
|
|
artworkTile.src = artworkSrc;
|
|
}
|
|
|
|
main().catch(console.log);
|
|
setInterval(main, 10000);
|