add lastfm widget

This commit is contained in:
yuki 2025-10-11 09:04:20 -03:00
parent 9ec5b585bb
commit b2f0ef8a6a
Signed by: yuki
GPG key ID: 0C98E6FF04EC3915
6 changed files with 72 additions and 4 deletions

View file

@ -24,5 +24,8 @@
{% include "footer.njk" %}
</footer>
</div>
{% if lastfm %}
<script src="/js/lastfm.js"></script>
{% endif %}
</body>
</html>

View file

@ -1,8 +1,18 @@
---
layout: base
title: home
lastfm: true
---
<div class="welcome-aside-left">
<div class="now-playing-wrapper box">
<h2>last played</h2>
<div id="listening"></div>
<div class="noscript">
<noscript>
<h3 style="padding: 0px 0px 4px 0px;">javascript is disabled...</h2>
</noscript>
</div>
</div>
<div class="buttons-wrapper box">
<h2>please visit...</h3>
<div class="buttons">
@ -17,10 +27,6 @@ title: home
{% endfor %}
</div>
</div>
<div class="now-playing-wrapper box">
<h2>last played</h2>
<div class="now-playing"><p>test</p></div>
</div>
</div>
<div class="welcome-content">

View file

@ -96,6 +96,29 @@ body {
.welcome-aside-left {
width: max-content;
.now-playing-wrapper {
width: 190px;
#listening {
display: flex;
align-items: flex-start;
justify-content: space-evenly;
img {
order: 1;
max-width: 36px;
padding: 4px;
}
h3 {
font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
font-size: 0.8em;
padding: 0px 0px 0px 4px;
}
p {
font-size: 0.7em;
padding: 0px 0px 2px 4px;
}
}
}
.buttons-wrapper {
width: 190px;

View file

@ -5,6 +5,7 @@ module.exports = function(eleventyConfig) {
eleventyConfig.setLayoutsDirectory("_layouts");
eleventyConfig.addPassthroughCopy("img");
eleventyConfig.addPassthroughCopy("css/fonts");
eleventyConfig.addPassthroughCopy("js");
eleventyConfig.addPassthroughCopy("LICENSE.txt");
eleventyConfig.addPlugin(eleventySass);

BIN
img/icons/lastfm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

35
js/lastfm.js Normal file
View file

@ -0,0 +1,35 @@
// this script is under the MIT license (https://max.nekoweb.org/resources/license.txt)
const USERNAME = "kaaisudev"; // Put your LastFM username here
const BASE_URL = `https://lastfm-last-played.biancarosa.com.br/${USERNAME}/latest-song`;
const getTrack = async () => {
const request = await fetch(BASE_URL);
const json = await request.json();
let status
let isPlaying = json.track['@attr']?.nowplaying || false;
if(!isPlaying) {
// Trigger if a song isn't playing
return;
} else {
// Trigger if a song is playing
}
// Values:
// COVER IMAGE: json.track.image[1]['#text']
// TITLE: json.track.name
// ARTIST: json.track.artist['#text']
document.getElementById("listening").innerHTML = `
<img src="${json.track.image[1]['#text']}">
<div id="trackInfo">
<h3 id="trackName">${json.track.name}</h3>
<p id="artistName">${json.track.artist['#text']}</p>
</div>
`
};
getTrack();
setInterval(() => { getTrack(); }, 10000);