add more metadata, and region list

This commit is contained in:
aria
2024-07-29 16:37:50 -04:00
parent 1803afcbab
commit 918c618d74
3 changed files with 30 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "lucida",
"version": "2.0.0-18",
"version": "2.0.0-19",
"description": "A modular music downloader tool",
"main": "build/index.js",
"type": "module",

View File

@@ -275,10 +275,14 @@ export default class Deezer implements StreamerWithLogin {
lang: 'en'
})
return {
const data = {
metadata: parseAlbum(DATA),
tracks: SONGS.data.map(parseTrack)
}
if (!data.metadata.trackCount) data.metadata.trackCount = data.tracks.length
return data
}
// Track
@@ -294,8 +298,8 @@ export default class Deezer implements StreamerWithLogin {
async #getStream(track: DeezerTrack): Promise<GetStreamResponse> {
if ('FALLBACK' in track) track = track.FALLBACK!
const countries = track.AVAILABLE_COUNTRIES.STREAM_ADS
if (!countries.length) throw new Error('Track not available in any country')
const countries = track?.AVAILABLE_COUNTRIES?.STREAM_ADS
if (!countries?.length) throw new Error('Track not available in any country')
if (!countries.includes(this.country!))
throw new Error("Track not available in the account's country")

View File

@@ -91,18 +91,27 @@ export interface DeezerAlbum {
ARTISTS?: DeezerArtist[]
ORIGINAL_RELEASE_DATE?: string
NUMBER_TRACK?: string
COPYRIGHT?: string
UPC?: string
LABEL_NAME?: string
}
export function parseAlbum(album: DeezerAlbum): Album {
return {
const data: Album = {
title: album.ALB_TITLE,
id: album.ALB_ID,
url: `https://www.deezer.com/album/${album.ALB_ID}`,
trackCount: album.NUMBER_TRACK ? parseInt(album.NUMBER_TRACK) : undefined,
releaseDate: album.ORIGINAL_RELEASE_DATE ? new Date(album.ORIGINAL_RELEASE_DATE) : undefined,
coverArtwork: parseArtwork(album.ALB_PICTURE),
artists: album.ARTISTS ? album.ARTISTS.map((a) => parseArtist(a)) : undefined
artists: album.ARTISTS ? album.ARTISTS.map((a) => parseArtist(a)) : undefined,
label: album.LABEL_NAME
}
if (album.COPYRIGHT) data.copyright = album.COPYRIGHT
if (album.UPC) data.upc = album.UPC
return data
}
export interface DeezerTrack {
@@ -118,7 +127,7 @@ export interface DeezerTrack {
ALB_TITLE: string
ALB_PICTURE: string
DURATION: string
AVAILABLE_COUNTRIES: { STREAM_ADS: string }
AVAILABLE_COUNTRIES?: { STREAM_ADS?: string }
COPYRIGHT: string
TRACK_TOKEN: string
@@ -133,6 +142,14 @@ export interface DeezerTrack {
}
export function parseTrack(track: DeezerTrack): Track {
let addt: {regions?: string[], copyright?: string, producers?: string[], composers?: string[], lyricists?: string[]} = {}
if (track?.AVAILABLE_COUNTRIES?.STREAM_ADS) addt.regions = [...track.AVAILABLE_COUNTRIES.STREAM_ADS]
if (track?.COPYRIGHT) addt.copyright = track.COPYRIGHT
if (track.SNG_CONTRIBUTORS?.producer) addt.producers = track.SNG_CONTRIBUTORS?.producer
if (track.SNG_CONTRIBUTORS?.composer) addt.composers = track.SNG_CONTRIBUTORS?.composer
if (track.SNG_CONTRIBUTORS?.composer) addt.lyricists = track.SNG_CONTRIBUTORS?.lyricist
return {
title: track.SNG_TITLE,
id: track.SNG_ID,
@@ -140,19 +157,16 @@ export function parseTrack(track: DeezerTrack): Track {
explicit: track.EXPLICIT_LYRICS == '1',
trackNumber: parseInt(track.TRACK_NUMBER),
discNumber: parseInt(track.DISK_NUMBER),
copyright: track.COPYRIGHT,
artists: track.ARTISTS.map((a) => parseArtist(a)),
isrc: track.ISRC,
producers: track.SNG_CONTRIBUTORS?.producer,
composers: track.SNG_CONTRIBUTORS?.composer,
lyricists: track.SNG_CONTRIBUTORS?.lyricist,
album: parseAlbum({
ALB_ID: track.ALB_ID,
ALB_PICTURE: track.ALB_PICTURE,
ALB_TITLE: track.ALB_TITLE
}),
durationMs: parseInt(track.DURATION) * 1e3,
coverArtwork: parseArtwork(track.ALB_PICTURE)
coverArtwork: parseArtwork(track.ALB_PICTURE),
...addt
}
}