From 94b689cb1daa5834cf739037bf0b079ebd1ec597 Mon Sep 17 00:00:00 2001 From: Jeet Shah Date: Sat, 4 May 2024 17:03:10 +0530 Subject: [PATCH 1/2] added wikify for tracks Added functionality to call for wikipedia page of the song, if unavailable, fallback to artist name. --- wikify/wikify.js | 92 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/wikify/wikify.js b/wikify/wikify.js index bc91839..4daac8f 100644 --- a/wikify/wikify.js +++ b/wikify/wikify.js @@ -37,40 +37,84 @@ }); } + function extractPageText(wikiInfo) { + const wikiInfoArr = wikiInfo.query.pages + const page = Object.values(wikiInfoArr)[0]; + if (page != null || page != undefined) { + return page.extract.replace(//g, ''); + } + } + async function getWikiText(uris) { const rawUri = uris[0]; - const uri = rawUri.split(":")[2] - const artistName = await CosmosAsync.get(`https://api.spotify.com/v1/artists/${uri}`) - const artistNameTrimmed = (artistName.name).replace(/\s/g, "%20"); + const uriSplit = rawUri.split(":"); + const uriType = uriSplit[1]; + const uri = uriSplit[2]; + let artistName = undefined; + let trackName = undefined; - if (artistName != null) { - try { - const wikiInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${artistNameTrimmed}`) + try { + //This assumes that the `View Wiki` option is only available for artists and tracks + if (uriType === "artist") { + const artistObject = await CosmosAsync.get(`https://api.spotify.com/v1/artists/${uri}`); + artistName = artistObject.name; + } else if (uriType === "track") { + const trackObject = await CosmosAsync.get(`https://api.spotify.com/v1/tracks/${uri}`); + artistName = trackObject.artists[0].name; + trackName = trackObject.name; + } + + if (trackName != null) { + const trackNameTrimmed = (trackName).replace(/\s/g, "%20"); + + const wikiTrackInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${trackNameTrimmed}`); + const wikiTrackSongInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${trackNameTrimmed}%20(song)`); + //TODO: option to choose local language or english / english fallback? / subcontextmenu to choose? + //https://en.wikipedia.org/w/api.php?action=query&format=json&uselang=en&list=search&srsearch=${trackNameTrimmed} + + const trackSongPageText = extractPageText(wikiTrackSongInfo); + const trackPageText = extractPageText(wikiTrackInfo); + + if (trackSongPageText != "\n") { + Spicetify.PopupModal.display({ + title: "WikiFy for Track", + content: trackSongPageText + }); + return; + } else if (trackPageText != "\n") { + Spicetify.PopupModal.display({ + title: "WikiFy for Track", + content: trackPageText + }); + return; + } + } + + if (artistName != null) { + const artistNameTrimmed = (artistName).replace(/\s/g, "%20"); + + const wikiArtistInfo = await CosmosAsync.get(`https://${lang}.wikipedia.org/w/api.php?action=query&format=json&prop=extracts%7Cdescription&titles=${artistNameTrimmed}`); //TODO: option to choose local language or english / english fallback? / subcontextmenu to choose? //https://en.wikipedia.org/w/api.php?action=query&format=json&uselang=en&list=search&srsearch=${artistNameTrimmed} - - const wikiInfoArr = wikiInfo.query.pages - const page = Object.values(wikiInfoArr)[0]; - if (page != null || page != undefined) { - const pageText = page.extract.replace(//g, ''); - if (pageText != "\n") { - Spicetify.PopupModal.display({ - title: "WikiFy", - content: page.extract - }); - } else { - error(); - } + + const artistPageText = extractPageText(wikiArtistInfo); + + if (artistPageText != "/n") { + Spicetify.PopupModal.display({ + title: "WikiFy for Artist", + content: artistPageText + }); + return; } else { error(); } - } catch { - Spicetify.PopupModal.display({ - title: "Error", - content: "Request failed", - }) } + } catch { + Spicetify.PopupModal.display({ + title: "Requests Failed", + content: "Error while fetching infromation from Wikipedia and Spotify" + }); } } From 2910af8d3a689afab6595ba7c1bd5b7586413093 Mon Sep 17 00:00:00 2001 From: Jeet Shah Date: Tue, 6 Aug 2024 16:59:22 +0530 Subject: [PATCH 2/2] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 83633c7..cc55f1e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +Maintaining my own version, due to the author archiving the project. +Will update as the extensions I am using break. + # spicetify-extensions ## [Song-Stats:](./songstats/README.md)