From 068051cbda75f2933dea07bfb7fa08ad2d315e3c Mon Sep 17 00:00:00 2001 From: aka paul <50n50@noreply.localhost> Date: Sun, 2 Nov 2025 17:38:40 +0000 Subject: [PATCH] Update soundcloud/soundcloud.js --- soundcloud/soundcloud.js | 143 +++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 73 deletions(-) diff --git a/soundcloud/soundcloud.js b/soundcloud/soundcloud.js index 48fdb46..7d3abfd 100644 --- a/soundcloud/soundcloud.js +++ b/soundcloud/soundcloud.js @@ -1,92 +1,89 @@ -const PLACEHOLDER_IMAGE = "https://media.istockphoto.com/id/1147544807/vector/thumbnail-image-vector-graphic.jpg?s=612x612&w=0&k=20&c=rnCKVbdxqkjlcs3xH87-9gocETqpspHFXu5dIGB4wuM="; - async function searchResults(keyword) { - const searchUrl = `https://api-v2.soundcloud.com/search?q=${encodeURIComponent(keyword)}&facet=model&user_id=200971-112325-516393-99787&client_id=UjhhbCuNo1OQfTwkzajxQNLlJcSlUlVz&limit=30`; try { - const response = await fetch(searchUrl); - const json = await JSON.parse(response); + const response = await fetchv2(`https://api-v2.soundcloud.com/search/tracks?q=${encodeURIComponent(keyword)}&facet=genre&user_id=618848-625616-52355-612546&client_id=xwYTVSni6n4FghaI0c4uJ8T9c4pyJ3rh&limit=20&offset=0&linked_partitioning=1&app_version=1761897122&app_locale=en`); + const data = await response.json(); + + const results = data.collection + .map(track => { + const hlsLink = track.media.transcodings.find(t => t.format.protocol === "hls" && t.format.mime_type.includes("mp4"))?.url || ""; + const imageUrl = track.artwork_url ? track.artwork_url.replace(/-large\.jpg$/, '-t500x500.jpg') : ""; + return { + title: track.title, + image: imageUrl, + href: `${hlsLink}?title=${encodeURIComponent(track.title)}&artist=${encodeURIComponent(track.user.username)}`, + hasHls: hlsLink !== "" + }; + }) + .filter(track => track.hasHls) + .map(track => ({ + title: track.title, + image: track.image, + href: track.href + })); - const results = json.collection.map(item => ({ - title: item.title, - image: item.artwork_url || PLACEHOLDER_IMAGE, - href: item.permalink_url - })); - //console.log(results); - console.log(JSON.stringify(results)); return JSON.stringify(results); - } catch (error) { - console.error("Error fetching search results:", error); - return JSON.stringify([]); + } catch (err) { + return JSON.stringify([{ + title: "Error", + image: "Error", + href: "Error" + }]); } } async function extractDetails(url) { - const details = []; - details.push({ - description: 'N/A', - alias: 'N/A', - airdate: 'N/A' - }); - - //#IAMLAZY - - console.log(JSON.stringify(details)); - return JSON.stringify(details); + console.log(url); + try { + const params = url.split('?')[1] || ''; + const pairs = params.split('&'); + let title = ''; + let artist = ''; + + for (const pair of pairs) { + const [key, value] = pair.split('='); + if (key === 'title') title = decodeURIComponent(value); + if (key === 'artist') artist = decodeURIComponent(value); + } + + const description = `${title} by ${artist}`; + return JSON.stringify([{ + description: description, + aliases: "", + airdate: "" + }]); + } catch (err) { + return JSON.stringify([{ + description: "Error", + aliases: "Error", + airdate: "Error" + }]); + } } async function extractEpisodes(url) { - const response = await fetch(url); - const html = await response; - const tracks = []; - - const trackRegex = /
]*>[\s\S]*?