From 1ae246c7e41e13b014fdcde1d5f5d444267a3221 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 10 Jan 2026 14:52:59 +0100 Subject: [PATCH] Initial commit - Virome API --- .gitignore | 3 + README.md | 152 +++++++ assets/Logo.png | Bin 0 -> 191883 bytes deno.json | 14 + deno.lock | 7 + lib.ts | 1097 +++++++++++++++++++++++++++++++++++++++++++++++ mod.ts | 641 +++++++++++++++++++++++++++ ui.ts | 266 ++++++++++++ 8 files changed, 2180 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 assets/Logo.png create mode 100644 deno.json create mode 100644 deno.lock create mode 100644 lib.ts create mode 100644 mod.ts create mode 100644 ui.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..14bbb0c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +*.log +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..e52b2d7 --- /dev/null +++ b/README.md @@ -0,0 +1,152 @@ +

+ Virome API +

+ +

Virome API

+ +

+ A music API built with Deno for searching, streaming, and exploring music data from YouTube Music, YouTube, and Last.fm. +

+ +--- + +## Overview + +Virome API provides a unified interface to access music data from multiple sources. It includes a built-in web UI for testing endpoints and playing music directly in the browser. + +## Features + +- Search songs, albums, artists, and playlists +- Get song lyrics with synced timestamps +- Stream audio from YouTube via Piped/Invidious proxies +- Generate radio mixes based on a song +- Get trending music and top artists by country +- Artist and track information from Last.fm +- Built-in music player with YouTube IFrame API + +## Installation + +### Requirements + +- Deno 1.40 or higher + +### Run Locally + +```bash +cd deno-music-api +deno run --allow-net --allow-env --allow-read mod.ts +``` + +The server starts at `http://localhost:8000` + +### Deploy to Deno Deploy + +1. Push the code to a GitHub repository +2. Go to https://dash.deno.com +3. Create a new project and link your repository +4. Set the entry point to `mod.ts` + +## API Endpoints + +### Search + +| Endpoint | Description | Parameters | +|----------|-------------|------------| +| GET /api/search | Search YouTube Music | q, filter (songs/albums/artists) | +| GET /api/yt_search | Search YouTube | q, filter (videos/channels/playlists) | +| GET /api/search/suggestions | Get search suggestions | q | + +### Content + +| Endpoint | Description | Parameters | +|----------|-------------|------------| +| GET /api/songs/:videoId | Get song details | videoId | +| GET /api/albums/:browseId | Get album tracks | browseId | +| GET /api/artists/:browseId | Get artist info | browseId | +| GET /api/playlists/:playlistId | Get playlist tracks | playlistId | + +### Discovery + +| Endpoint | Description | Parameters | +|----------|-------------|------------| +| GET /api/related/:videoId | Get related songs | videoId | +| GET /api/similar | Find similar tracks | title, artist | +| GET /api/trending | Trending music by country | country | +| GET /api/radio | Generate radio mix | videoId | +| GET /api/top/artists | Top artists by country | country, limit | +| GET /api/top/tracks | Top tracks by country | country, limit | + +### Info + +| Endpoint | Description | Parameters | +|----------|-------------|------------| +| GET /api/lyrics | Get song lyrics | title, artist | +| GET /api/artist/info | Artist bio and stats | artist | +| GET /api/track/info | Track details | title, artist | + +### Streaming + +| Endpoint | Description | Parameters | +|----------|-------------|------------| +| GET /api/stream | Get stream URLs | id | +| GET /api/watch_playlist | Get watch playlist | videoId or playlistId | +| GET /health | Health check | - | + +## Usage Examples + +### Search for songs + +``` +GET /api/search?q=Blinding%20Lights&filter=songs +``` + +### Get lyrics + +``` +GET /api/lyrics?title=Blinding%20Lights&artist=The%20Weeknd +``` + +### Get stream URLs + +``` +GET /api/stream?id=4NRXx6U8ABQ +``` + +### Get top artists from a country + +``` +GET /api/top/artists?country=Tunisia&limit=20 +``` + +### Generate radio from a song + +``` +GET /api/radio?videoId=4NRXx6U8ABQ +``` + +## Project Structure + +``` +deno-music-api/ + mod.ts - Main server and route handlers + lib.ts - API clients (YouTube Music, YouTube, Last.fm) + ui.ts - Web UI HTML template + deno.json - Deno configuration + assets/ + Logo.png - Project logo +``` + +## Data Sources + +- YouTube Music API (unofficial) +- YouTube Data (via Invidious/Piped) +- Last.fm API (artist info, similar tracks) +- LRCLib (lyrics) + +## License + +MIT + +## Disclaimer + +This is an unofficial API for educational purposes. It is not affiliated with YouTube, Google, or Last.fm. diff --git a/assets/Logo.png b/assets/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..96c015f116f951e5794c9c204dc0e52e4615d1aa GIT binary patch literal 191883 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 PR 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'v8$}()f0*dx$=I^mnxy%F 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 literal 0 HcmV?d00001 diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..9b4aea2 --- /dev/null +++ b/deno.json @@ -0,0 +1,14 @@ +{ + "name": "music-api", + "version": "1.0.0", + "tasks": { + "start": "deno run --allow-net --allow-env mod.ts", + "dev": "deno run --watch --allow-net --allow-env mod.ts" + }, + "imports": { + "std/": "https://deno.land/std@0.208.0/" + }, + "compilerOptions": { + "strict": true + } +} diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..74bf7bb --- /dev/null +++ b/deno.lock @@ -0,0 +1,7 @@ +{ + "version": "5", + "remote": { + "https://deno.land/std@0.208.0/async/delay.ts": "a6142eb44cdd856b645086af2b811b1fcce08ec06bb7d50969e6a872ee9b8659", + "https://deno.land/std@0.208.0/http/server.ts": "f3cde6672e631d3e00785743cfa96bfed275618c0352c5ae84abbe5a2e0e4afc" + } +} diff --git a/lib.ts b/lib.ts new file mode 100644 index 0000000..72eb38d --- /dev/null +++ b/lib.ts @@ -0,0 +1,1097 @@ +/** + * Music API Library for Deno + * Contains all the core functionality for YouTube Music, YouTube Search, JioSaavn, and Last.fm + */ + +// ============ YOUTUBE MUSIC API ============ + +export class YTMusic { + private baseURL: string; + private apiKey = "AIzaSyC9XL3ZjWjXClIX1FmUxJq--EohcD4_oSs"; + private context: any; + + constructor() { + this.baseURL = "https://music.youtube.com/youtubei/v1"; + this.context = { + client: { + hl: "en", + gl: "US", + clientName: "WEB_REMIX", + clientVersion: "1.20251015.03.00", + platform: "DESKTOP", + }, + }; + } + + async search(query: string, filter?: string, continuationToken?: string, ignoreSpelling = false) { + const params: any = continuationToken + ? { continuation: continuationToken } + : { query, params: this.getFilterParams(filter) }; + + const data = await this.makeRequest("search", params); + return this.parseSearchResults(data); + } + + async getSearchSuggestions(query: string): Promise { + const data = await this.makeRequest("music/get_search_suggestions", { input: query }); + return this.parseSuggestions(data); + } + + async getSong(videoId: string) { + const data = await this.makeRequest("player", { videoId }); + const details = data?.videoDetails || {}; + return { + videoId: details.videoId, + title: details.title, + author: details.author, + lengthSeconds: details.lengthSeconds, + thumbnail: details.thumbnail?.thumbnails?.[0]?.url, + }; + } + + async getAlbum(browseId: string) { + const data = await this.makeRequest("browse", { browseId }); + const header = data?.header?.musicDetailHeaderRenderer || data?.header?.musicImmersiveHeaderRenderer || {}; + const contents = data?.contents?.singleColumnBrowseResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + + return { + title: header.title?.runs?.[0]?.text, + artist: header.subtitle?.runs?.[0]?.text, + thumbnail: header.thumbnail?.musicThumbnailRenderer?.thumbnail?.thumbnails?.[0]?.url, + tracks: this.parseTracksFromContents(contents), + }; + } + + async getArtist(browseId: string) { + const data = await this.makeRequest("browse", { browseId }); + const header = data?.header?.musicImmersiveHeaderRenderer || data?.header?.musicVisualHeaderRenderer || {}; + + return { + name: header.title?.runs?.[0]?.text, + description: header.description?.runs?.[0]?.text, + thumbnail: header.thumbnail?.musicThumbnailRenderer?.thumbnail?.thumbnails?.[0]?.url, + }; + } + + async getArtistSummary(artistId: string, country = "US") { + const url = "https://music.youtube.com/youtubei/v1/browse?prettyPrint=false"; + const body = { + browseId: artistId, + context: { client: { ...this.context.client, gl: country } }, + }; + + const response = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + const data = await response.json(); + + const header = data?.header?.musicImmersiveHeaderRenderer || data?.header?.musicVisualHeaderRenderer; + const contents = data?.contents?.singleColumnBrowseResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + + // Find top songs playlist ID + let playlistId = null; + for (const item of contents) { + if (item.musicShelfRenderer?.title?.runs?.[0]?.text === "Top songs") { + playlistId = item.musicShelfRenderer.contents?.[0]?.musicResponsiveListItemRenderer?.flexColumns?.[0] + ?.musicResponsiveListItemFlexColumnRenderer?.text?.runs?.[0]?.navigationEndpoint?.watchEndpoint?.playlistId; + break; + } + } + + // Find recommended artists + let recommendedArtists = null; + for (const item of contents) { + const headerTitle = item.musicCarouselShelfRenderer?.header?.musicCarouselShelfBasicHeaderRenderer?.title?.runs?.[0]?.text; + if (headerTitle === "Fans might also like") { + recommendedArtists = (item.musicCarouselShelfRenderer.contents || []).map((it: any) => ({ + name: it.musicTwoRowItemRenderer?.title?.runs?.[0]?.text, + browseId: it.musicTwoRowItemRenderer?.navigationEndpoint?.browseEndpoint?.browseId, + thumbnail: it.musicTwoRowItemRenderer?.thumbnailRenderer?.musicThumbnailRenderer?.thumbnail?.thumbnails?.[0]?.url, + })); + break; + } + } + + return { + artistName: header?.title?.runs?.[0]?.text, + artistAvatar: header?.thumbnail?.musicThumbnailRenderer?.thumbnail?.thumbnails?.[0]?.url, + playlistId, + recommendedArtists, + }; + } + + async getPlaylist(playlistId: string) { + const data = await this.makeRequest("browse", { browseId: `VL${playlistId.replace(/^VL/, "")}` }); + const header = data?.header?.musicDetailHeaderRenderer || {}; + const contents = data?.contents?.singleColumnBrowseResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + + return { + title: header.title?.runs?.[0]?.text, + author: header.subtitle?.runs?.[0]?.text, + thumbnail: header.thumbnail?.musicThumbnailRenderer?.thumbnail?.thumbnails?.[0]?.url, + tracks: this.parseTracksFromContents(contents), + }; + } + + async getCharts(country?: string) { + const data = await this.makeRequest("browse", { + browseId: "FEmusic_charts", + formData: { selectedValues: [country || "US"] }, + }); + return this.parseChartsData(data); + } + + async getMoodCategories() { + const data = await this.makeRequest("browse", { browseId: "FEmusic_moods_and_genres" }); + return this.parseMoodsData(data); + } + + async getMoodPlaylists(categoryId: string) { + const data = await this.makeRequest("browse", { browseId: categoryId }); + const contents = data?.contents?.singleColumnBrowseResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + + const playlists: any[] = []; + for (const section of contents) { + const items = section.musicShelfRenderer?.contents || []; + for (const item of items) { + const parsed = this.parseMusicItem(item.musicResponsiveListItemRenderer); + if (parsed) playlists.push(parsed); + } + } + return playlists; + } + + async getWatchPlaylist(videoId?: string, playlistId?: string, radio = false, shuffle = false, limit = 25) { + const data = await this.makeRequest("next", { videoId, playlistId, radio, shuffle }); + const contents = data?.contents?.singleColumnMusicWatchNextResultsRenderer?.tabbedRenderer?.watchNextTabbedResultsRenderer + ?.tabs?.[0]?.tabRenderer?.content?.musicQueueRenderer?.content?.playlistPanelRenderer?.contents || []; + + const tracks = contents.map((item: any) => { + const video = item.playlistPanelVideoRenderer; + if (!video) return null; + return { + videoId: video.videoId, + title: video.title?.runs?.[0]?.text, + author: video.shortBylineText?.runs?.[0]?.text, + thumbnail: video.thumbnail?.thumbnails?.[0]?.url, + }; + }).filter(Boolean); + + return { tracks: tracks.slice(0, limit) }; + } + + async getRelated(videoId: string) { + // Use YouTube's next endpoint for related videos + const url = `https://www.youtube.com/youtubei/v1/next?key=${this.apiKey}`; + const body = { + videoId, + context: { client: { clientName: "WEB", clientVersion: "2.20251013.01.00" } }, + }; + + const response = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + const data = await response.json(); + + const secondaryResults = data?.contents?.twoColumnWatchNextResults?.secondaryResults?.secondaryResults?.results || []; + + return secondaryResults + .filter((item: any) => item.compactVideoRenderer) + .map((item: any) => { + const video = item.compactVideoRenderer; + const durationText = video.lengthText?.simpleText || ""; + let durationSeconds = 0; + if (durationText) { + const parts = durationText.split(":").map((p: string) => parseInt(p) || 0); + if (parts.length === 2) durationSeconds = parts[0] * 60 + parts[1]; + else if (parts.length === 3) durationSeconds = parts[0] * 3600 + parts[1] * 60 + parts[2]; + } + + return { + videoId: video.videoId, + title: video.title?.simpleText || video.title?.runs?.[0]?.text, + artist: video.shortBylineText?.runs?.[0]?.text, + thumbnail: video.thumbnail?.thumbnails?.[0]?.url, + duration: durationText, + duration_seconds: durationSeconds, + isShort: durationSeconds > 0 && durationSeconds <= 60, + }; + }) + .filter((v: any) => v.videoId && !v.isShort) + .slice(0, 20); + } + + private async makeRequest(endpoint: string, params: any) { + const url = `${this.baseURL}/${endpoint}?key=${this.apiKey}`; + const body = { context: this.context, ...params }; + + const response = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + }); + return response.json(); + } + + private getFilterParams(filter?: string): string { + const filterMap: Record = { + songs: "Eg-KAQwIARAAGAAgACgAMABqChAEEAUQAxAKEAk%3D", + videos: "Eg-KAQwIABABGAAgACgAMABqChAEEAUQAxAKEAk%3D", + albums: "Eg-KAQwIABAAGAEgACgAMABqChAEEAUQAxAKEAk%3D", + artists: "EgWKAQIgAWoKEAMQBBAJEAoQBQ%3D%3D", + playlists: "Eg-KAQwIABAAGAAgACgBMABqChAEEAUQAxAKEAk%3D", + }; + return filterMap[filter || ""] || filterMap.songs; + } + + private parseSearchResults(data: any) { + const results: any[] = []; + let continuationToken: string | null = null; + + // Handle continuation + const actions = data?.onResponseReceivedCommands || []; + for (const action of actions) { + const items = action?.appendContinuationItemsAction?.continuationItems || []; + for (const entry of items) { + if (entry.musicShelfRenderer || entry.musicShelfContinuation) { + const shelf = entry.musicShelfRenderer || entry.musicShelfContinuation; + for (const item of shelf.contents || []) { + const parsed = this.parseMusicItem(item.musicResponsiveListItemRenderer); + if (parsed) results.push(parsed); + } + continuationToken = shelf.continuations?.[0]?.nextContinuationData?.continuation || continuationToken; + } + if (entry.continuationItemRenderer) { + continuationToken = entry.continuationItemRenderer?.continuationEndpoint?.continuationCommand?.token || continuationToken; + } + } + } + + // Handle initial results + if (results.length === 0) { + const sections = data?.contents?.tabbedSearchResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + for (const section of sections) { + if (section.musicShelfRenderer) { + for (const item of section.musicShelfRenderer.contents || []) { + const parsed = this.parseMusicItem(item.musicResponsiveListItemRenderer); + if (parsed) results.push(parsed); + } + continuationToken = section.musicShelfRenderer.continuations?.[0]?.nextContinuationData?.continuation || continuationToken; + } + } + } + + return { results, continuationToken }; + } + + private parseSuggestions(data: any): string[] { + const suggestions: string[] = []; + const contents = data?.contents?.[0]?.searchSuggestionsSectionRenderer?.contents || data?.contents || []; + + for (const content of contents) { + const runs = content?.searchSuggestionRenderer?.suggestion?.runs || []; + const text = runs.map((r: any) => r.text).join(""); + if (text) suggestions.push(text); + } + return suggestions; + } + + private parseMusicItem(item: any) { + if (!item) return null; + + const title = item.flexColumns?.[0]?.musicResponsiveListItemFlexColumnRenderer?.text?.runs?.[0]?.text; + const thumbnail = item.thumbnail?.musicThumbnailRenderer?.thumbnail?.thumbnails?.[0]?.url; + const videoId = item.overlay?.musicItemThumbnailOverlayRenderer?.content?.musicPlayButtonRenderer + ?.playNavigationEndpoint?.watchEndpoint?.videoId; + const browseId = item.navigationEndpoint?.browseEndpoint?.browseId; + + const subtitle = item.flexColumns?.[1]?.musicResponsiveListItemFlexColumnRenderer?.text?.runs || []; + const artists = subtitle + .filter((r: any) => r.navigationEndpoint?.browseEndpoint?.browseEndpointContextSupportedConfigs + ?.browseEndpointContextMusicConfig?.pageType === "MUSIC_PAGE_TYPE_ARTIST") + .map((r: any) => ({ name: r.text, id: r.navigationEndpoint?.browseEndpoint?.browseId })); + + const duration = item.fixedColumns?.[0]?.musicResponsiveListItemFixedColumnRenderer?.text?.runs?.[0]?.text; + + return { + title, + thumbnails: [{ url: thumbnail }], + videoId, + browseId, + artists, + duration, + resultType: videoId ? "song" : browseId?.startsWith("UC") ? "artist" : "album", + }; + } + + private parseTracksFromContents(contents: any[]): any[] { + const tracks: any[] = []; + for (const section of contents) { + const items = section.musicShelfRenderer?.contents || []; + for (const item of items) { + const parsed = this.parseMusicItem(item.musicResponsiveListItemRenderer); + if (parsed) tracks.push(parsed); + } + } + return tracks; + } + + private parseChartsData(data: any) { + const results: any[] = []; + + // Try different response structures + const contents = data?.contents?.singleColumnBrowseResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + + for (const section of contents) { + // Handle musicCarouselShelfRenderer (common for charts) + if (section.musicCarouselShelfRenderer) { + const title = section.musicCarouselShelfRenderer?.header?.musicCarouselShelfBasicHeaderRenderer?.title?.runs?.[0]?.text; + const items = (section.musicCarouselShelfRenderer?.contents || []).map((item: any) => { + const renderer = item.musicTwoRowItemRenderer || item.musicResponsiveListItemRenderer; + return this.parseTwoRowItem(renderer); + }).filter(Boolean); + if (title && items.length) results.push({ title, items }); + } + // Handle musicShelfRenderer + if (section.musicShelfRenderer) { + const title = section.musicShelfRenderer?.title?.runs?.[0]?.text; + const items = (section.musicShelfRenderer?.contents || []).map((item: any) => + this.parseMusicItem(item.musicResponsiveListItemRenderer) + ).filter(Boolean); + if (title && items.length) results.push({ title, items }); + } + } + + return results; + } + + private parseMoodsData(data: any) { + const results: any[] = []; + const contents = data?.contents?.singleColumnBrowseResultsRenderer?.tabs?.[0]?.tabRenderer?.content?.sectionListRenderer?.contents || []; + + for (const section of contents) { + if (section.gridRenderer) { + const items = (section.gridRenderer?.items || []).map((item: any) => { + const nav = item.musicNavigationButtonRenderer; + if (!nav) return null; + return { + title: nav.buttonText?.runs?.[0]?.text, + browseId: nav.clickCommand?.browseEndpoint?.browseId, + color: nav.solid?.leftStripeColor, + }; + }).filter(Boolean); + if (items.length) results.push({ title: "Moods & Genres", items }); + } + if (section.musicCarouselShelfRenderer) { + const title = section.musicCarouselShelfRenderer?.header?.musicCarouselShelfBasicHeaderRenderer?.title?.runs?.[0]?.text; + const items = (section.musicCarouselShelfRenderer?.contents || []).map((item: any) => { + const nav = item.musicNavigationButtonRenderer; + if (!nav) return null; + return { + title: nav.buttonText?.runs?.[0]?.text, + browseId: nav.clickCommand?.browseEndpoint?.browseId, + color: nav.solid?.leftStripeColor, + }; + }).filter(Boolean); + if (title && items.length) results.push({ title, items }); + } + } + + return results; + } + + private parseTwoRowItem(item: any) { + if (!item) return null; + return { + title: item.title?.runs?.[0]?.text, + subtitle: item.subtitle?.runs?.map((r: any) => r.text).join(""), + thumbnails: item.thumbnailRenderer?.musicThumbnailRenderer?.thumbnail?.thumbnails, + videoId: item.navigationEndpoint?.watchEndpoint?.videoId, + browseId: item.navigationEndpoint?.browseEndpoint?.browseId, + playlistId: item.navigationEndpoint?.watchEndpoint?.playlistId, + }; + } +} + + +// ============ YOUTUBE SEARCH ============ + +export class YouTubeSearch { + private searchURL = "https://www.youtube.com/results"; + private continuationURL = "https://www.youtube.com/youtubei/v1/search"; + private suggestionsURL = "https://suggestqueries-clients6.youtube.com/complete/search"; + private apiKey: string | null = null; + private clientVersion: string | null = null; + + async searchVideos(query: string | null, continuationToken?: string) { + if (continuationToken) { + return this.fetchContinuation(continuationToken, "video"); + } + if (!query) throw new Error("Query is required for initial search"); + + const response = await fetch(`${this.searchURL}?search_query=${encodeURIComponent(query)}&sp=EgIQAQ%253D%253D`); + const html = await response.text(); + this.extractAPIConfig(html); + return this.parseVideoResults(html); + } + + async searchChannels(query: string | null, continuationToken?: string) { + if (continuationToken) { + return this.fetchContinuation(continuationToken, "channel"); + } + if (!query) throw new Error("Query is required for initial search"); + + const response = await fetch(`${this.searchURL}?search_query=${encodeURIComponent(query)}&sp=EgIQAg%253D%253D`); + const html = await response.text(); + this.extractAPIConfig(html); + return this.parseChannelResults(html); + } + + async searchPlaylists(query: string | null, continuationToken?: string) { + if (continuationToken) { + return this.fetchContinuation(continuationToken, "playlist"); + } + if (!query) throw new Error("Query is required for initial search"); + + const response = await fetch(`${this.searchURL}?search_query=${encodeURIComponent(query)}&sp=EgIQAw%253D%253D`); + const html = await response.text(); + this.extractAPIConfig(html); + return this.parsePlaylistResults(html); + } + + async getSuggestions(query: string): Promise { + try { + const url = `${this.suggestionsURL}?ds=yt&client=youtube&q=${encodeURIComponent(query)}`; + const response = await fetch(url); + const text = await response.text(); + + // Parse JSONP response + const start = text.indexOf("("); + const end = text.lastIndexOf(")"); + if (start === -1 || end === -1) return this.getStaticSuggestions(query); + + const json = JSON.parse(text.slice(start + 1, end)); + return (json[1] || []).map((item: any) => Array.isArray(item) ? item[0] : item).slice(0, 10); + } catch { + return this.getStaticSuggestions(query); + } + } + + private extractAPIConfig(html: string) { + const apiKeyMatch = html.match(/"INNERTUBE_API_KEY":"([^"]+)"/); + const clientVersionMatch = html.match(/"clientVersion":"([^"]+)"/); + if (apiKeyMatch) this.apiKey = apiKeyMatch[1]; + if (clientVersionMatch) this.clientVersion = clientVersionMatch[1]; + } + + private async fetchContinuation(token: string, type: string) { + if (!this.apiKey) throw new Error("API key not initialized"); + + const response = await fetch(`${this.continuationURL}?key=${this.apiKey}`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + continuation: token, + context: { client: { clientName: "WEB", clientVersion: this.clientVersion || "2.20231219.01.00" } }, + }), + }); + const data = await response.json(); + return this.parseContinuationResults(data, type); + } + + private parseVideoResults(html: string) { + const results: any[] = []; + let continuationToken: string | null = null; + + const jsonMatch = html.match(/var ytInitialData = ({.+?});/); + if (!jsonMatch) return { results, continuationToken }; + + const data = JSON.parse(jsonMatch[1]); + const sections = data?.contents?.twoColumnSearchResultsRenderer?.primaryContents?.sectionListRenderer?.contents || []; + const items = sections[0]?.itemSectionRenderer?.contents || []; + + for (const item of items) { + if (item.videoRenderer) { + results.push(this.parseVideoRenderer(item.videoRenderer)); + } + } + + continuationToken = this.extractContinuationToken(data); + return { results, continuationToken }; + } + + private parseChannelResults(html: string) { + const results: any[] = []; + let continuationToken: string | null = null; + + const jsonMatch = html.match(/var ytInitialData = ({.+?});/); + if (!jsonMatch) return { results, continuationToken }; + + const data = JSON.parse(jsonMatch[1]); + const sections = data?.contents?.twoColumnSearchResultsRenderer?.primaryContents?.sectionListRenderer?.contents || []; + + for (const section of sections) { + for (const item of section?.itemSectionRenderer?.contents || []) { + if (item.channelRenderer) { + results.push(this.parseChannelRenderer(item.channelRenderer)); + } + } + } + + continuationToken = this.extractContinuationToken(data); + return { results, continuationToken }; + } + + private parsePlaylistResults(html: string) { + const results: any[] = []; + let continuationToken: string | null = null; + + const jsonMatch = html.match(/var ytInitialData = ({.+?});/); + if (!jsonMatch) return { results, continuationToken }; + + const data = JSON.parse(jsonMatch[1]); + const sections = data?.contents?.twoColumnSearchResultsRenderer?.primaryContents?.sectionListRenderer?.contents || []; + + for (const section of sections) { + for (const item of section?.itemSectionRenderer?.contents || []) { + if (item.playlistRenderer) { + results.push(this.parsePlaylistRenderer(item.playlistRenderer)); + } + } + } + + continuationToken = this.extractContinuationToken(data); + return { results, continuationToken }; + } + + private parseContinuationResults(data: any, type: string) { + const results: any[] = []; + let continuationToken: string | null = null; + + const actions = data?.onResponseReceivedCommands || []; + for (const action of actions) { + const items = action?.appendContinuationItemsAction?.continuationItems || []; + for (const item of items) { + if (item.continuationItemRenderer) { + continuationToken = item.continuationItemRenderer?.continuationEndpoint?.continuationCommand?.token; + continue; + } + if (type === "video" && item.videoRenderer) { + results.push(this.parseVideoRenderer(item.videoRenderer)); + } else if (type === "channel" && item.channelRenderer) { + results.push(this.parseChannelRenderer(item.channelRenderer)); + } else if (type === "playlist" && item.playlistRenderer) { + results.push(this.parsePlaylistRenderer(item.playlistRenderer)); + } + if (item.itemSectionRenderer?.contents) { + for (const inner of item.itemSectionRenderer.contents) { + if (type === "video" && inner.videoRenderer) results.push(this.parseVideoRenderer(inner.videoRenderer)); + else if (type === "channel" && inner.channelRenderer) results.push(this.parseChannelRenderer(inner.channelRenderer)); + else if (type === "playlist" && inner.playlistRenderer) results.push(this.parsePlaylistRenderer(inner.playlistRenderer)); + } + } + } + } + + return { results, continuationToken }; + } + + private extractContinuationToken(data: any): string | null { + const sections = data?.contents?.twoColumnSearchResultsRenderer?.primaryContents?.sectionListRenderer?.contents || []; + for (const section of sections) { + if (section.continuationItemRenderer) { + return section.continuationItemRenderer?.continuationEndpoint?.continuationCommand?.token || null; + } + } + return null; + } + + private parseVideoRenderer(v: any) { + return { + type: "video", + id: v.videoId, + title: v.title?.runs?.[0]?.text, + duration: v.lengthText?.simpleText, + channel: { + id: v.ownerText?.runs?.[0]?.navigationEndpoint?.browseEndpoint?.browseId, + name: v.ownerText?.runs?.[0]?.text, + }, + thumbnails: v.thumbnail?.thumbnails, + publishedTime: v.publishedTimeText?.simpleText, + viewCount: { text: v.viewCountText?.simpleText }, + link: `https://www.youtube.com/watch?v=${v.videoId}`, + }; + } + + private parseChannelRenderer(c: any) { + return { + type: "channel", + channelId: c.channelId, + title: c.title?.simpleText, + thumbnail: c.thumbnail?.thumbnails?.[0]?.url, + subscriberCount: c.subscriberCountText?.simpleText, + videoCount: c.videoCountText?.simpleText, + url: `https://www.youtube.com/channel/${c.channelId}`, + }; + } + + private parsePlaylistRenderer(p: any) { + return { + type: "playlist", + playlistId: p.playlistId, + title: p.title?.simpleText, + thumbnail: p.thumbnails?.[0]?.thumbnails?.[0]?.url, + videoCount: p.videoCount, + author: p.shortBylineText?.runs?.[0]?.text, + url: `https://www.youtube.com/playlist?list=${p.playlistId}`, + }; + } + + private getStaticSuggestions(query: string): string[] { + return [query, `${query} video`, `${query} 2024`, `${query} tutorial`, `${query} song`]; + } +} + + +// ============ LAST.FM ============ + +export const LastFM = { + API_KEY: "0867bcb6f36c879398969db682a7b69b", + + async getSimilarTracks(title: string, artist: string, limit = "5") { + const url = `https://ws.audioscrobbler.com/2.0/?method=track.getsimilar&artist=${encodeURIComponent(artist)}&track=${encodeURIComponent(title)}&api_key=${this.API_KEY}&limit=${limit}&format=json`; + + try { + const response = await fetch(url); + const data = await response.json(); + + if (data?.error) return { error: data.message || "Last.fm error" }; + + return (data?.similartracks?.track || []) + .map((t: any) => ({ title: t.name, artist: t?.artist?.name })) + .filter((t: any) => t.title && t.artist); + } catch { + return { error: "Failed to fetch similar tracks" }; + } + }, +}; + +// ============ STREAMING SOURCES ============ + +let instancesCache: any = null; +let instancesCacheTime = 0; +const CACHE_DURATION = 5 * 60 * 1000; + +export async function getDynamicInstances() { + const now = Date.now(); + if (instancesCache && (now - instancesCacheTime) < CACHE_DURATION) { + return instancesCache; + } + + try { + const response = await fetch("https://raw.githubusercontent.com/n-ce/Uma/main/dynamic_instances.json"); + instancesCache = await response.json(); + instancesCacheTime = now; + return instancesCache; + } catch { + return { + piped: ["https://api.piped.private.coffee"], + invidious: ["https://invidious.nikkosphere.com", "https://yt.omada.cafe"], + }; + } +} + +export async function fetchFromPiped(videoId: string) { + const instances = await getDynamicInstances(); + const pipedInstances = instances.piped || []; + + for (const instance of pipedInstances) { + try { + const response = await fetch(`${instance}/streams/${videoId}`); + const data = await response.json(); + + if (data?.audioStreams?.length) { + return { + success: true, + instance, + streamingUrls: data.audioStreams.map((s: any) => ({ + url: s.url, + quality: s.quality, + mimeType: s.mimeType, + bitrate: s.bitrate, + })), + metadata: { + id: videoId, + title: data.title, + uploader: data.uploader, + thumbnail: data.thumbnailUrl, + duration: data.duration, + views: data.views, + }, + }; + } + } catch { + continue; + } + } + + return { success: false, error: "No working Piped instances found" }; +} + +export async function fetchFromInvidious(videoId: string) { + const instances = await getDynamicInstances(); + const invidiousInstances = instances.invidious || []; + + for (const instance of invidiousInstances) { + try { + const response = await fetch(`${instance}/api/v1/videos/${videoId}`); + const data = await response.json(); + + if (data) { + const audioFormats = (data.adaptiveFormats || []).filter((f: any) => + f.type?.includes("audio") || f.mimeType?.includes("audio") + ); + + return { + success: true, + instance, + streamingUrls: audioFormats.map((f: any) => ({ + url: f.url, + bitrate: f.bitrate, + type: f.type, + audioQuality: f.audioQuality, + })), + metadata: { + id: videoId, + title: data.title, + author: data.author, + thumbnail: data.videoThumbnails?.[0]?.url, + lengthSeconds: data.lengthSeconds, + viewCount: data.viewCount, + }, + }; + } + } catch { + continue; + } + } + + return { success: false, error: "No working Invidious instances found" }; +} + +// ============ LYRICS (LRCLib - Free, No API Key) ============ + +export async function getLyrics(title: string, artist: string, duration?: number) { + try { + // Try exact match first + let url = `https://lrclib.net/api/get?track_name=${encodeURIComponent(title)}&artist_name=${encodeURIComponent(artist)}`; + if (duration) url += `&duration=${duration}`; + + let response = await fetch(url); + let data = await response.json(); + + // If no exact match, try search + if (!data || data.statusCode === 404) { + const searchUrl = `https://lrclib.net/api/search?q=${encodeURIComponent(`${title} ${artist}`)}`; + response = await fetch(searchUrl); + const results = await response.json(); + if (Array.isArray(results) && results.length > 0) { + data = results[0]; + } + } + + if (!data || data.statusCode) { + return { success: false, error: "Lyrics not found" }; + } + + return { + success: true, + trackName: data.trackName, + artistName: data.artistName, + albumName: data.albumName, + duration: data.duration, + plainLyrics: data.plainLyrics, + syncedLyrics: data.syncedLyrics, // LRC format with timestamps + }; + } catch (err) { + return { success: false, error: String(err) }; + } +} + +// ============ TRENDING MUSIC (YouTube Music Search by Country) ============ + +export async function getTrendingMusic(country = "United States", ytmusic?: YTMusic) { + try { + if (ytmusic) { + const searchQueries = [ + `${country}n music 2026`, + `${country}n songs`, + `${country}n hits`, + `popular ${country}n music`, + `new ${country}n songs 2026`, + ]; + + const allTracks: any[] = []; + const seenIds = new Set(); + + for (const query of searchQueries) { + if (allTracks.length >= 30) break; + + const results = await ytmusic.search(query, "songs"); + if (results.results) { + for (const t of results.results) { + if (t.videoId && !seenIds.has(t.videoId)) { + seenIds.add(t.videoId); + allTracks.push({ + name: t.title, + artist: t.artists?.map((a: any) => a.name).join(", "), + videoId: t.videoId, + thumbnail: t.thumbnails?.[0]?.url, + duration: t.duration, + }); + } + if (allTracks.length >= 30) break; + } + } + } + + if (allTracks.length > 0) { + return { + success: true, + country: country, + tracks: allTracks, + }; + } + } + + return { success: false, error: "Could not fetch trending" }; + } catch (err) { + return { success: false, error: String(err) }; + } +} + +// ============ RADIO (Infinite Mix based on song) ============ + +export async function getRadio(videoId: string, ytmusic: YTMusic) { + try { + // Use YouTube Music's radio feature + const data = await ytmusic.getWatchPlaylist(videoId, undefined, true, false, 50); + + if (data.tracks && data.tracks.length > 0) { + return { + success: true, + seedVideoId: videoId, + tracks: data.tracks, + }; + } + + return { success: false, error: "Could not generate radio" }; + } catch (err) { + return { success: false, error: String(err) }; + } +} + +// ============ TOP ARTISTS BY COUNTRY (YouTube Music Search) ============ + +export async function getTopArtists(country?: string, limit = 20, ytmusic?: YTMusic) { + try { + if (country && ytmusic) { + // More specific search queries for artists FROM that country + const searchQueries = [ + `${country}n artist`, // Tunisian artist + `${country}n singer`, + `${country}n rapper`, + `${country}n musician`, + `artist from ${country}`, + `singer from ${country}`, + ]; + + const allArtists: any[] = []; + const seenIds = new Set(); + + for (const query of searchQueries) { + if (allArtists.length >= limit) break; + + const results = await ytmusic.search(query, "artists"); + if (results.results) { + for (const a of results.results) { + if (a.browseId && !seenIds.has(a.browseId)) { + seenIds.add(a.browseId); + allArtists.push({ + name: a.title, + browseId: a.browseId, + thumbnail: a.thumbnails?.[0]?.url, + }); + } + if (allArtists.length >= limit) break; + } + } + } + + if (allArtists.length > 0) { + return { + success: true, + country: country, + artists: allArtists.slice(0, limit), + }; + } + } + + // Fallback to Last.fm global charts + const url = `https://ws.audioscrobbler.com/2.0/?method=chart.gettopartists&api_key=${LastFM.API_KEY}&limit=${limit}&format=json`; + const response = await fetch(url); + const data = await response.json(); + + const artists = data?.artists?.artist || []; + + return { + success: true, + country: "Global", + artists: artists.map((a: any) => ({ + name: a.name, + playcount: a.playcount, + listeners: a.listeners, + url: a.url, + image: a.image?.find((i: any) => i.size === "large")?.["#text"], + })), + }; + } catch (err) { + return { success: false, error: String(err) }; + } +} + +// ============ TOP TRACKS BY COUNTRY (YouTube Music Search) ============ + +export async function getTopTracks(country?: string, limit = 20, ytmusic?: YTMusic) { + try { + if (country && ytmusic) { + // More specific search queries for music FROM that country + const searchQueries = [ + `${country}n music`, // Tunisian music + `${country}n songs`, + `${country}n rap`, + `${country}n hits 2026`, + `music from ${country}`, + `songs from ${country}`, + ]; + + const allTracks: any[] = []; + const seenIds = new Set(); + + for (const query of searchQueries) { + if (allTracks.length >= limit) break; + + const results = await ytmusic.search(query, "songs"); + if (results.results) { + for (const t of results.results) { + if (t.videoId && !seenIds.has(t.videoId)) { + seenIds.add(t.videoId); + allTracks.push({ + name: t.title, + artist: t.artists?.map((a: any) => a.name).join(", "), + videoId: t.videoId, + thumbnail: t.thumbnails?.[0]?.url, + duration: t.duration, + }); + } + if (allTracks.length >= limit) break; + } + } + } + + if (allTracks.length > 0) { + return { + success: true, + country: country, + tracks: allTracks.slice(0, limit), + }; + } + } + + // Fallback to Last.fm global charts + const url = `https://ws.audioscrobbler.com/2.0/?method=chart.gettoptracks&api_key=${LastFM.API_KEY}&limit=${limit}&format=json`; + const response = await fetch(url); + const data = await response.json(); + + const tracks = data?.tracks?.track || []; + + return { + success: true, + country: "Global", + tracks: tracks.map((t: any) => ({ + name: t.name, + artist: t.artist?.name, + playcount: t.playcount, + listeners: t.listeners, + url: t.url, + })), + }; + } catch (err) { + return { success: false, error: String(err) }; + } +} + +// ============ ARTIST INFO (Last.fm) ============ + +export async function getArtistInfo(artist: string) { + try { + const url = `https://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=${encodeURIComponent(artist)}&api_key=${LastFM.API_KEY}&format=json`; + + const response = await fetch(url); + const data = await response.json(); + + if (data?.error) { + return { success: false, error: data.message }; + } + + const a = data?.artist; + return { + success: true, + name: a?.name, + bio: a?.bio?.summary?.replace(/<[^>]*>/g, ""), // Strip HTML + tags: a?.tags?.tag?.map((t: any) => t.name) || [], + similar: a?.similar?.artist?.map((s: any) => s.name) || [], + stats: { + listeners: a?.stats?.listeners, + playcount: a?.stats?.playcount, + }, + image: a?.image?.find((i: any) => i.size === "large")?.["#text"], + }; + } catch (err) { + return { success: false, error: String(err) }; + } +} + +// ============ TRACK INFO (Last.fm) ============ + +export async function getTrackInfo(title: string, artist: string) { + try { + const url = `https://ws.audioscrobbler.com/2.0/?method=track.getInfo&artist=${encodeURIComponent(artist)}&track=${encodeURIComponent(title)}&api_key=${LastFM.API_KEY}&format=json`; + + const response = await fetch(url); + const data = await response.json(); + + if (data?.error) { + return { success: false, error: data.message }; + } + + const t = data?.track; + return { + success: true, + name: t?.name, + artist: t?.artist?.name, + album: t?.album?.title, + duration: t?.duration, + listeners: t?.listeners, + playcount: t?.playcount, + tags: t?.toptags?.tag?.map((tag: any) => tag.name) || [], + wiki: t?.wiki?.summary?.replace(/<[^>]*>/g, ""), + }; + } catch (err) { + return { success: false, error: String(err) }; + } +} diff --git a/mod.ts b/mod.ts new file mode 100644 index 0000000..c66d8b4 --- /dev/null +++ b/mod.ts @@ -0,0 +1,641 @@ +/** + * Virome API for Deno + * A consolidated YouTube Music, YouTube Search, JioSaavn, and Last.fm API + * + * Run with: deno run --allow-net --allow-env --allow-read mod.ts + * Or deploy to Deno Deploy + */ + +import { serve } from "https://deno.land/std@0.208.0/http/server.ts"; +import { YTMusic, YouTubeSearch, LastFM, fetchFromPiped, fetchFromInvidious, getLyrics, getTrendingMusic, getRadio, getTopArtists, getTopTracks, getArtistInfo, getTrackInfo } from "./lib.ts"; +import { html as uiHtml } from "./ui.ts"; + +const PORT = parseInt(Deno.env.get("PORT") || "8000"); + +// Initialize clients +const ytmusic = new YTMusic(); +const youtubeSearch = new YouTubeSearch(); + +// CORS headers +const corsHeaders = { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET, POST, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type, Authorization", +}; + +// Helper functions +function json(data: unknown, status = 200): Response { + return new Response(JSON.stringify(data), { + status, + headers: { "Content-Type": "application/json", ...corsHeaders }, + }); +} + +function error(message: string, status = 400): Response { + return json({ error: message }, status); +} + +// URL pattern matching +function matchRoute(pathname: string, pattern: string): Record | null { + const patternParts = pattern.split("/"); + const pathParts = pathname.split("/"); + + if (patternParts.length !== pathParts.length) return null; + + const params: Record = {}; + for (let i = 0; i < patternParts.length; i++) { + if (patternParts[i].startsWith(":")) { + params[patternParts[i].slice(1)] = pathParts[i]; + } else if (patternParts[i] !== pathParts[i]) { + return null; + } + } + return params; +} + +// Main request handler +async function handler(req: Request): Promise { + const url = new URL(req.url); + const { pathname, searchParams } = url; + + // Handle CORS preflight + if (req.method === "OPTIONS") { + return new Response(null, { headers: corsHeaders }); + } + + try { + // Root - API Documentation UI + if (pathname === "/") { + return new Response(uiHtml, { headers: { "Content-Type": "text/html", ...corsHeaders } }); + } + + // Serve logo from assets + if (pathname === "/assets/logo.png" || pathname === "/assets/Logo.png") { + try { + const logoPath = new URL("./assets/Logo.png", import.meta.url).pathname.replace(/^\/([A-Z]:)/, "$1"); + const logo = await Deno.readFile(logoPath); + return new Response(logo, { + headers: { "Content-Type": "image/png", ...corsHeaders } + }); + } catch { + return new Response("Logo not found", { status: 404 }); + } + } + + // Favicon + if (pathname === "/favicon.ico") { + return new Response(null, { status: 204 }); + } + + // Health check + if (pathname === "/health") { + return json({ status: "ok" }); + } + + // ============ SEARCH ENDPOINTS ============ + + // YouTube Music Search + if (pathname === "/api/search") { + const query = searchParams.get("q"); + const filter = searchParams.get("filter") || undefined; + const continuationToken = searchParams.get("continuationToken") || undefined; + const ignoreSpelling = searchParams.get("ignore_spelling") === "true"; + + if (!query && !continuationToken) { + return error("Missing required query parameter 'q' or 'continuationToken'"); + } + + const results = await ytmusic.search(query || "", filter, continuationToken, ignoreSpelling); + return json({ query, filter, ...results }); + } + + // Search suggestions + if (pathname === "/api/search/suggestions") { + const query = searchParams.get("q"); + const music = searchParams.get("music"); + + if (!query) return error("Missing required query parameter 'q'"); + + if (music === "1") { + const suggestions = await ytmusic.getSearchSuggestions(query); + return json({ suggestions, source: "youtube_music" }); + } else { + const suggestions = await youtubeSearch.getSuggestions(query); + return json({ suggestions, source: "youtube" }); + } + } + + // YouTube Search + if (pathname === "/api/yt_search") { + const query = searchParams.get("q"); + const filter = searchParams.get("filter") || "all"; + const continuationToken = searchParams.get("continuationToken") || undefined; + + if (!query && !continuationToken) { + return error("Missing required query parameter 'q' or 'continuationToken'"); + } + + const results: unknown[] = []; + let nextToken: string | null = null; + + if (continuationToken) { + if (filter === "videos") { + const r = await youtubeSearch.searchVideos(null, continuationToken); + results.push(...r.results); + nextToken = r.continuationToken; + } else if (filter === "channels") { + const r = await youtubeSearch.searchChannels(null, continuationToken); + results.push(...r.results); + nextToken = r.continuationToken; + } else if (filter === "playlists") { + const r = await youtubeSearch.searchPlaylists(null, continuationToken); + results.push(...r.results); + nextToken = r.continuationToken; + } + } else if (query) { + if (filter === "videos" || filter === "all") { + const r = await youtubeSearch.searchVideos(query); + results.push(...r.results); + nextToken = r.continuationToken; + } + if (filter === "channels" || filter === "all") { + const r = await youtubeSearch.searchChannels(query); + results.push(...r.results); + if (!nextToken) nextToken = r.continuationToken; + } + if (filter === "playlists" || filter === "all") { + const r = await youtubeSearch.searchPlaylists(query); + results.push(...r.results); + if (!nextToken) nextToken = r.continuationToken; + } + } + + return json({ filter, query, results, continuationToken: nextToken }); + } + + // ============ ENTITY ENDPOINTS ============ + + // Get song details + let params = matchRoute(pathname, "/api/songs/:videoId"); + if (params) { + const data = await ytmusic.getSong(params.videoId); + return json(data); + } + + // Get album details + params = matchRoute(pathname, "/api/albums/:browseId"); + if (params) { + const data = await ytmusic.getAlbum(params.browseId); + return json(data); + } + + params = matchRoute(pathname, "/api/album/:id"); + if (params) { + const data = await ytmusic.getAlbum(params.id); + return json(data); + } + + // Get artist details (skip if it's /api/artist/info) + params = matchRoute(pathname, "/api/artists/:browseId"); + if (params) { + const data = await ytmusic.getArtist(params.browseId); + return json(data); + } + + // Skip /api/artist/info - handled later by Last.fm endpoint + if (pathname !== "/api/artist/info") { + params = matchRoute(pathname, "/api/artist/:artistId"); + if (params) { + const country = searchParams.get("country") || "US"; + const data = await ytmusic.getArtistSummary(params.artistId, country); + return json(data); + } + } + + // Get playlist details + params = matchRoute(pathname, "/api/playlists/:playlistId"); + if (params) { + const data = await ytmusic.getPlaylist(params.playlistId); + return json(data); + } + + params = matchRoute(pathname, "/api/playlist/:id"); + if (params) { + const data = await ytmusic.getPlaylist(params.id); + return json(data); + } + + // Get related videos + params = matchRoute(pathname, "/api/related/:id"); + if (params) { + const data = await ytmusic.getRelated(params.id); + return json({ success: true, data }); + } + + // ============ EXPLORE ENDPOINTS ============ + + // Charts + if (pathname === "/api/charts") { + const country = searchParams.get("country") || undefined; + const data = await ytmusic.getCharts(country); + return json(data); + } + + // Moods + if (pathname === "/api/moods") { + const data = await ytmusic.getMoodCategories(); + return json(data); + } + + params = matchRoute(pathname, "/api/moods/:categoryId"); + if (params) { + const data = await ytmusic.getMoodPlaylists(params.categoryId); + return json(data); + } + + // Watch playlist + if (pathname === "/api/watch_playlist") { + const videoId = searchParams.get("videoId") || undefined; + const playlistId = searchParams.get("playlistId") || undefined; + const radio = searchParams.get("radio") === "true"; + const shuffle = searchParams.get("shuffle") === "true"; + const limit = parseInt(searchParams.get("limit") || "25"); + + if (!videoId && !playlistId) { + return error("Provide either videoId or playlistId"); + } + + const data = await ytmusic.getWatchPlaylist(videoId, playlistId, radio, shuffle, limit); + return json(data); + } + + // ============ STREAMING ENDPOINTS ============ + + // Find song + if (pathname === "/api/music/find") { + const name = searchParams.get("name"); + const artist = searchParams.get("artist"); + + if (!name || !artist) { + return error("Missing required parameters: name and artist are required"); + } + + const query = `${name} ${artist}`; + const searchResults = await ytmusic.search(query, "songs"); + + if (!searchResults.results?.length) { + return json({ success: false, error: "Song not found" }, 404); + } + + const normalize = (s: string) => s.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]+/gi, "").toLowerCase(); + const nName = normalize(name); + const artistsList = artist.split(",").map(a => normalize(a)); + + const bestMatch = searchResults.results.find((song: any) => { + const nSongName = normalize(song.title || ""); + const songArtists = (song.artists || []).map((a: any) => normalize(a.name || "")); + const titleMatch = nSongName.includes(nName) || nName.includes(nSongName); + const artistMatch = artistsList.some(a => songArtists.some((sa: string) => sa.includes(a) || a.includes(sa))); + return titleMatch && artistMatch; + }); + + if (bestMatch) { + return json({ success: true, data: bestMatch }); + } + return json({ success: false, error: "Song not found after filtering" }, 404); + } + + // Stream endpoint - multi-source + if (pathname === "/api/stream") { + const id = searchParams.get("id"); + + if (!id) { + return error("Missing required parameter: id"); + } + + // Try Piped first + const pipedResult = await fetchFromPiped(id); + if (pipedResult.success) { + return json({ + success: true, + service: "piped", + instance: pipedResult.instance, + streamingUrls: pipedResult.streamingUrls, + metadata: pipedResult.metadata, + requestedId: id, + timestamp: new Date().toISOString(), + }); + } + + // Try Invidious + const invidiousResult = await fetchFromInvidious(id); + if (invidiousResult.success) { + return json({ + success: true, + service: "invidious", + instance: invidiousResult.instance, + streamingUrls: invidiousResult.streamingUrls, + metadata: invidiousResult.metadata, + requestedId: id, + timestamp: new Date().toISOString(), + }); + } + + return json({ success: false, error: "No streaming data found from any source" }, 404); + } + + // ============ SIMILAR TRACKS ============ + + if (pathname === "/api/similar") { + const title = searchParams.get("title"); + const artist = searchParams.get("artist"); + const limit = searchParams.get("limit") || "5"; + + if (!title || !artist) { + return error("Missing title or artist parameter"); + } + + const similarTracks = await LastFM.getSimilarTracks(title, artist, limit); + if ("error" in similarTracks) { + return json({ error: similarTracks.error }, 500); + } + + const ytResults = await Promise.all( + similarTracks.map(async (t: any) => { + const r = await youtubeSearch.searchVideos(`${t.title} ${t.artist}`); + return r.results[0] || null; + }) + ); + + return json(ytResults.filter(Boolean)); + } + + // ============ FEED ENDPOINTS ============ + + // Audio proxy to bypass CORS + if (pathname === "/api/proxy") { + const audioUrl = searchParams.get("url"); + if (!audioUrl) { + return error("Missing url parameter"); + } + return proxyAudio(audioUrl); + } + + if (pathname === "/api/feed/unauthenticated" || pathname.startsWith("/api/feed/channels=")) { + let channelsParam = searchParams.get("channels"); + + if (pathname.startsWith("/api/feed/channels=")) { + channelsParam = pathname.replace("/api/feed/channels=", "").split("?")[0]; + } + + if (!channelsParam) { + return error("No valid channel IDs provided"); + } + + const channelIds = channelsParam.split(",").map(s => s.trim()).filter(Boolean); + const preview = searchParams.get("preview") === "1"; + + const results: any[] = []; + for (const channelId of channelIds) { + const items = await fetchChannelVideos(channelId, preview ? 5 : undefined); + results.push(...items); + } + + // Filter shorts and sort by upload date + const filtered = results + .filter(item => !item.isShort) + .sort((a, b) => Number(b.uploaded) - Number(a.uploaded)); + + return json(filtered); + } + + // ============ NEW FEATURES ============ + + // Lyrics + if (pathname === "/api/lyrics") { + const title = searchParams.get("title"); + const artist = searchParams.get("artist"); + const duration = searchParams.get("duration"); + + if (!title || !artist) { + return error("Missing required parameters: title and artist"); + } + + const result = await getLyrics(title, artist, duration ? parseInt(duration) : undefined); + return json(result); + } + + // Trending Music + if (pathname === "/api/trending") { + const country = searchParams.get("country") || "United States"; + const result = await getTrendingMusic(country, ytmusic); + return json(result); + } + + // Radio (infinite mix based on a song) + if (pathname === "/api/radio") { + const videoId = searchParams.get("videoId"); + if (!videoId) { + return error("Missing required parameter: videoId"); + } + const result = await getRadio(videoId, ytmusic); + return json(result); + } + + // Top Artists (by country using YouTube Music search) + if (pathname === "/api/top/artists") { + const country = searchParams.get("country") || undefined; + const limit = parseInt(searchParams.get("limit") || "20"); + const result = await getTopArtists(country, limit, ytmusic); + return json(result); + } + + // Top Tracks (by country using YouTube Music search) + if (pathname === "/api/top/tracks") { + const country = searchParams.get("country") || undefined; + const limit = parseInt(searchParams.get("limit") || "20"); + const result = await getTopTracks(country, limit, ytmusic); + return json(result); + } + + // Artist Info (detailed from Last.fm) + if (pathname === "/api/artist/info") { + const artist = searchParams.get("artist"); + if (!artist) { + return error("Missing required parameter: artist"); + } + const result = await getArtistInfo(artist); + return json(result); + } + + // Track Info (detailed from Last.fm) + if (pathname === "/api/track/info") { + const title = searchParams.get("title"); + const artist = searchParams.get("artist"); + if (!title || !artist) { + return error("Missing required parameters: title and artist"); + } + const result = await getTrackInfo(title, artist); + return json(result); + } + + // 404 + return json({ error: "Route not found", path: pathname }, 404); + + } catch (err) { + console.error("Error:", err); + return json({ error: "Internal server error", message: String(err) }, 500); + } +} + +// Audio proxy endpoint to bypass CORS +async function proxyAudio(url: string): Promise { + try { + const response = await fetch(url, { + headers: { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + }, + }); + + if (!response.ok) { + return new Response("Failed to fetch audio", { status: 502 }); + } + + const headers = new Headers(); + headers.set("Content-Type", response.headers.get("Content-Type") || "audio/mp4"); + headers.set("Access-Control-Allow-Origin", "*"); + headers.set("Cache-Control", "public, max-age=3600"); + + const contentLength = response.headers.get("Content-Length"); + if (contentLength) { + headers.set("Content-Length", contentLength); + } + + return new Response(response.body, { headers }); + } catch (err) { + return new Response("Proxy error: " + String(err), { status: 502 }); + } +} + +// Fetch channel videos using YouTube Browse API +async function fetchChannelVideos(channelId: string, limit?: number): Promise { + try { + const url = "https://www.youtube.com/youtubei/v1/browse?prettyPrint=false"; + const payload = { + browseId: channelId, + context: { + client: { + clientName: "WEB", + clientVersion: "2.20251013.01.00", + hl: "en", + gl: "US", + }, + }, + }; + + const response = await fetch(url, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + + const data = await response.json(); + const items: any[] = []; + + // Extract channel name + let channelName = data?.header?.c4TabbedHeaderRenderer?.title || + data?.metadata?.channelMetadataRenderer?.title || ""; + + // Extract videos from response + const extractVideos = (contents: any[]) => { + if (!contents) return; + for (const item of contents) { + const video = item?.richItemRenderer?.content?.videoRenderer || + item?.videoRenderer || + item?.gridVideoRenderer; + if (video?.videoId) { + items.push(parseVideo(video, channelId, channelName)); + } + // Handle nested content + if (item?.shelfRenderer?.content?.expandedShelfContentsRenderer?.items) { + extractVideos(item.shelfRenderer.content.expandedShelfContentsRenderer.items); + } + if (item?.itemSectionRenderer?.contents) { + extractVideos(item.itemSectionRenderer.contents); + } + if (limit && items.length >= limit) return; + } + }; + + // Try different response structures + const tabs = data?.contents?.twoColumnBrowseResultsRenderer?.tabs || + data?.contents?.singleColumnBrowseResultsRenderer?.tabs || []; + + for (const tab of tabs) { + const contents = tab?.tabRenderer?.content?.sectionListRenderer?.contents || + tab?.tabRenderer?.content?.richGridRenderer?.contents || []; + extractVideos(contents); + } + + return items.slice(0, limit || items.length); + } catch (err) { + console.error("Channel fetch error:", err); + return []; + } +} + +function parseVideo(video: any, channelId: string, channelName: string): any { + const id = video?.videoId || ""; + const title = video?.title?.runs?.[0]?.text || video?.title?.simpleText || ""; + + // Parse duration + let duration = 0; + const durationText = video?.lengthText?.simpleText || + video?.thumbnailOverlays?.[0]?.thumbnailOverlayTimeStatusRenderer?.text?.simpleText || ""; + if (durationText) { + const parts = durationText.split(":").map((p: string) => parseInt(p) || 0); + if (parts.length === 2) duration = parts[0] * 60 + parts[1]; + else if (parts.length === 3) duration = parts[0] * 3600 + parts[1] * 60 + parts[2]; + } + + // Parse views + let views = 0; + const viewText = video?.viewCountText?.simpleText || ""; + const match = viewText.match(/([\d,\.]+)([KMB]?)/); + if (match) { + let num = parseFloat(match[1].replace(/,/g, "")); + if (match[2] === "K") num *= 1000; + else if (match[2] === "M") num *= 1000000; + else if (match[2] === "B") num *= 1000000000; + views = Math.floor(num); + } + + // Parse published time + let uploaded = Date.now(); + const timeText = (video?.publishedTimeText?.simpleText || "").toLowerCase(); + if (timeText.includes("hour")) uploaded -= parseInt(timeText.match(/(\d+)/)?.[1] || "1") * 3600000; + else if (timeText.includes("day")) uploaded -= parseInt(timeText.match(/(\d+)/)?.[1] || "1") * 86400000; + else if (timeText.includes("week")) uploaded -= parseInt(timeText.match(/(\d+)/)?.[1] || "1") * 604800000; + else if (timeText.includes("month")) uploaded -= parseInt(timeText.match(/(\d+)/)?.[1] || "1") * 2592000000; + else if (timeText.includes("year")) uploaded -= parseInt(timeText.match(/(\d+)/)?.[1] || "1") * 31536000000; + + const isShort = duration > 0 && duration <= 60; + + return { + id, + authorId: channelId, + duration: duration.toString(), + author: channelName, + views: views.toString(), + uploaded: uploaded.toString(), + title, + isShort, + thumbnail: video?.thumbnail?.thumbnails?.slice(-1)[0]?.url || "", + }; +} + +// Start server +console.log(`Virome API running on http://localhost:${PORT}`); +console.log(`Endpoints: /api/search, /api/stream, /api/charts, etc.`); + +serve(handler, { port: PORT }); diff --git a/ui.ts b/ui.ts new file mode 100644 index 0000000..96d5627 --- /dev/null +++ b/ui.ts @@ -0,0 +1,266 @@ +/** + * Virome API - UI HTML Template + */ + +export const html = ` + + + + + Virome API + + + + +
+
+ + Virome APIUNOFFICIAL +
+
+
+ Get Started +

Explore the Docs

+

Check out the documentation to learn how to use the Virome API for music search and streaming.

+
+
+ Open Source +

Open Source

+

Virome API is open-source. Built with Deno for fast, secure music data access.

+
+
+ Features +

What You Can Do

+

Search songs, albums, artists. Get streaming URLs, related tracks, and more.

+
+
+ Try It +

Test the Player

+

Use the built-in player to search and play music directly from the API.

+
+
+
+ + + +
+
+
Search Endpoints
+
+
GET/api/search
Search YouTube Music. Params: q, filter (songs/albums/artists)
+
GET/api/yt_search
Search YouTube. Params: q, filter (videos/channels/playlists)
+
GET/api/search/suggestions
Get search suggestions. Params: q
+
+
Content Endpoints
+
+
GET/api/songs/:videoId
Get song details by video ID
+
GET/api/albums/:browseId
Get album details and tracks
+
GET/api/artists/:browseId
Get artist info and top songs
+
GET/api/playlists/:playlistId
Get playlist details and tracks
+
+
Discovery Endpoints
+
+
GET/api/related/:videoId
Get related songs for a video
+
GET/api/similar
Find similar tracks. Params: title, artist
+
GET/api/trending
Most played songs in a country
+
GET/api/radio
Generate radio mix. Params: videoId
+
GET/api/top/artists
Most listened artists in a country
+
GET/api/top/tracks
Most listened tracks in a country
+
+
Info Endpoints
+
+
GET/api/lyrics
Get lyrics. Params: title, artist
+
GET/api/artist/info
Artist bio and stats. Params: artist
+
GET/api/track/info
Track details. Params: title, artist
+
+
Streaming Endpoints
+
+
GET/api/stream
Get stream URLs. Params: id
+
GET/api/watch_playlist
Get watch playlist. Params: videoId or playlistId
+
GET/health
Health check endpoint
+
+
+ +
+ + +
Searching...
+
+
+
+
+ +
+
+
GET /api/search?q=Drake
+ +
Click "Test Endpoint" to see the response...
+
+
Virome API
+
+
+
+
+ +
+
-
+
-
+
+
+ + + +
+
+
+ 0:00 +
+
+
+ 0:00 +
+
+
+
+ + +`;