diff --git a/.env.example b/.env.example index 2cd4d650..c022e9be 100644 --- a/.env.example +++ b/.env.example @@ -23,3 +23,5 @@ HARMONY_SPOTIFY_CLIENT_SECRET= # Tidal app config. See https://developer.tidal.com/reference/web-api HARMONY_TIDAL_CLIENT_ID= HARMONY_TIDAL_CLIENT_SECRET= +# Bugs! app config. +HARMONY_BUGS_CLIENT_SECRET= diff --git a/providers/Bugs/__snapshots__/mod.test.ts.snap b/providers/Bugs/__snapshots__/mod.test.ts.snap new file mode 100644 index 00000000..50a262d2 --- /dev/null +++ b/providers/Bugs/__snapshots__/mod.test.ts.snap @@ -0,0 +1,1945 @@ +export const snapshot = {}; + +snapshot[`Bugs! provider > release lookup > Regular (정규) album 1`] = ` +{ + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + availableIn: [ + "KR", + ], + excludedFrom: [], + externalLinks: [ + { + types: [ + "paid streaming", + "paid download", + ], + url: "https://music.bugs.co.kr/album/4119156", + }, + ], + images: [ + { + thumbUrl: "https://image.bugsm.co.kr/album/images/500/41191/4119156.jpg", + types: [ + "front", + ], + url: "https://image.bugsm.co.kr/album/images/original/41191/4119156.jpg", + }, + ], + info: { + messages: [], + providers: [ + { + apiUrl: "https://mapi.bugs.co.kr/music/5/multi/invoke/map?album_id=4119156", + id: "4119156", + internalName: "bugs", + lookup: { + method: "id", + value: "4119156", + }, + name: "Bugs!", + url: "https://music.bugs.co.kr/album/4119156", + }, + ], + }, + labels: [ + { + name: "모드하우스", + }, + ], + media: [ + { + format: "Digital Media", + number: 1, + tracklist: [ + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 62000, + number: 1, + recording: { + externalIds: [ + { + id: "6305557", + provider: "bugs", + type: "track", + }, + ], + }, + title: "@% (Alpha Percent)", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 186000, + number: 2, + recording: { + externalIds: [ + { + id: "6305558", + provider: "bugs", + type: "track", + }, + ], + }, + title: "깨어 (Are You Alive)", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 200000, + number: 3, + recording: { + externalIds: [ + { + id: "6305559", + provider: "bugs", + type: "track", + }, + ], + }, + title: "추리소설 (Detective Soseol)", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 188000, + number: 4, + recording: { + externalIds: [ + { + id: "6305560", + provider: "bugs", + type: "track", + }, + ], + }, + title: "어제 우리 불꽃놀이 (Firework Diary)", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 181000, + number: 5, + recording: { + externalIds: [ + { + id: "6305561", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Love Child", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 182000, + number: 6, + recording: { + externalIds: [ + { + id: "6305562", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Persona", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 201000, + number: 7, + recording: { + externalIds: [ + { + id: "6305563", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Too Hot", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 200000, + number: 8, + recording: { + externalIds: [ + { + id: "6305564", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Diablo", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 197000, + number: 9, + recording: { + externalIds: [ + { + id: "6305565", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Friend Zone", + }, + { + artists: [ + { + creditedName: "tripleS (트리플에스)", + externalIds: [ + { + id: "20171256", + provider: "bugs", + type: "artist", + }, + ], + name: "tripleS (트리플에스)", + }, + ], + length: 190000, + number: 10, + recording: { + externalIds: [ + { + id: "6305566", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Love2Love", + }, + ], + }, + ], + packaging: "None", + releaseDate: { + date: { + day: 12, + month: 5, + year: 2025, + }, + quality: "assumed-valid", + }, + status: "Official", + title: "", + types: [ + "Album", + ], +} +`; + +snapshot[`Bugs! provider > release lookup > Regular (정규) album with multiple discs and multiple artists 1`] = ` +{ + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + availableIn: [ + "KR", + ], + excludedFrom: [], + externalLinks: [ + { + types: [ + "paid streaming", + "paid download", + ], + url: "https://music.bugs.co.kr/album/590752", + }, + ], + images: [ + { + thumbUrl: "https://image.bugsm.co.kr/album/images/500/5907/590752.jpg", + types: [ + "front", + ], + url: "https://image.bugsm.co.kr/album/images/original/5907/590752.jpg", + }, + ], + info: { + messages: [], + providers: [ + { + apiUrl: "https://mapi.bugs.co.kr/music/5/multi/invoke/map?album_id=590752", + id: "590752", + internalName: "bugs", + lookup: { + method: "id", + value: "590752", + }, + name: "Bugs!", + url: "https://music.bugs.co.kr/album/590752", + }, + ], + }, + labels: [ + { + name: "크롬엔터테인먼트", + }, + ], + media: [ + { + format: "Digital Media", + number: 1, + tracklist: [ + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 180000, + number: 1, + recording: { + externalIds: [ + { + id: "4789231", + provider: "bugs", + type: "track", + }, + ], + }, + title: "부릉부릉(Vroom Vroom)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 182000, + number: 2, + recording: { + externalIds: [ + { + id: "4789232", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Too Much", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 190000, + number: 3, + recording: { + externalIds: [ + { + id: "4789233", + provider: "bugs", + type: "track", + }, + ], + }, + title: "두둠칫 (Doo Doom Chit)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 213000, + number: 4, + recording: { + externalIds: [ + { + id: "4789234", + provider: "bugs", + type: "track", + }, + ], + }, + title: "부기우기 (Boogie Woogie)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 212000, + number: 5, + recording: { + externalIds: [ + { + id: "4789235", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Tonight", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 179000, + number: 6, + recording: { + externalIds: [ + { + id: "4789236", + provider: "bugs", + type: "track", + }, + ], + }, + title: "다가와 (Get It Here)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 189000, + number: 7, + recording: { + externalIds: [ + { + id: "4789237", + provider: "bugs", + type: "track", + }, + ], + }, + title: "스케치북 (Sketch Book)", + }, + { + artists: [ + { + creditedName: "소율(크레용팝)", + externalIds: [ + { + id: "80131703", + provider: "bugs", + type: "artist", + }, + ], + name: "소율(크레용팝)", + }, + ], + length: 207000, + number: 8, + recording: { + externalIds: [ + { + id: "4789238", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Love Couple (feat. The Zoo)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 180000, + number: 9, + recording: { + externalIds: [ + { + id: "4789239", + provider: "bugs", + type: "track", + }, + ], + }, + title: "부릉부릉 (Vroom Vroom) (Inst.)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 190000, + number: 10, + recording: { + externalIds: [ + { + id: "4789240", + provider: "bugs", + type: "track", + }, + ], + }, + title: "두둠칫 (Doo Doom Chit) (Inst.)", + }, + ], + }, + { + format: "Digital Media", + number: 2, + tracklist: [ + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 179000, + number: 1, + recording: { + externalIds: [ + { + id: "4789241", + provider: "bugs", + type: "track", + }, + ], + }, + title: "빠빠빠 (Bar Bar Bar)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 193000, + number: 2, + recording: { + externalIds: [ + { + id: "4789242", + provider: "bugs", + type: "track", + }, + ], + }, + title: "어이 (UH-EE)", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 200000, + number: 3, + recording: { + externalIds: [ + { + id: "4789243", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Dancing Queen 2.0", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 186000, + number: 4, + recording: { + externalIds: [ + { + id: "4789244", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Bing Bing", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 221000, + number: 5, + recording: { + externalIds: [ + { + id: "4789245", + provider: "bugs", + type: "track", + }, + ], + }, + title: "FM", + }, + { + artists: [ + { + creditedName: "크레용팝(Crayon Pop)", + externalIds: [ + { + id: "80131691", + provider: "bugs", + type: "artist", + }, + ], + name: "크레용팝(Crayon Pop)", + }, + ], + length: 187000, + number: 6, + recording: { + externalIds: [ + { + id: "4789246", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Saturday Night", + }, + { + artists: [ + { + creditedName: "웨이(크레용팝)", + externalIds: [ + { + id: "80131708", + provider: "bugs", + type: "artist", + }, + ], + name: "웨이(크레용팝)", + }, + { + creditedName: "초아(크레용팝)", + externalIds: [ + { + id: "80131707", + provider: "bugs", + type: "artist", + }, + ], + name: "초아(크레용팝)", + }, + ], + length: 223000, + number: 7, + recording: { + externalIds: [ + { + id: "4789247", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Hello", + }, + ], + }, + ], + packaging: "None", + releaseDate: { + date: { + day: 26, + month: 9, + year: 2016, + }, + quality: "assumed-valid", + }, + status: "Official", + title: "Evolution Pop_Vol.1", + types: [ + "Album", + ], +} +`; + +snapshot[`Bugs! provider > release lookup > EP (미니) album 1`] = ` +{ + artists: [ + { + creditedName: "CSR(첫사랑)", + externalIds: [ + { + id: "80373333", + provider: "bugs", + type: "artist", + }, + ], + name: "CSR(첫사랑)", + }, + ], + availableIn: [ + "KR", + ], + excludedFrom: [], + externalLinks: [ + { + types: [ + "paid streaming", + "paid download", + ], + url: "https://music.bugs.co.kr/album/4078166", + }, + ], + images: [ + { + thumbUrl: "https://image.bugsm.co.kr/album/images/500/40781/4078166.jpg", + types: [ + "front", + ], + url: "https://image.bugsm.co.kr/album/images/original/40781/4078166.jpg", + }, + ], + info: { + messages: [], + providers: [ + { + apiUrl: "https://mapi.bugs.co.kr/music/5/multi/invoke/map?album_id=4078166", + id: "4078166", + internalName: "bugs", + lookup: { + method: "id", + value: "4078166", + }, + name: "Bugs!", + url: "https://music.bugs.co.kr/album/4078166", + }, + ], + }, + labels: [ + { + name: "CSR E&M", + }, + ], + media: [ + { + format: "Digital Media", + number: 1, + tracklist: [ + { + artists: [ + { + creditedName: "CSR(첫사랑)", + externalIds: [ + { + id: "80373333", + provider: "bugs", + type: "artist", + }, + ], + name: "CSR(첫사랑)", + }, + ], + length: 196000, + number: 1, + recording: { + externalIds: [ + { + id: "6170648", + provider: "bugs", + type: "track", + }, + ], + }, + title: "열일곱 (72.72Hz)", + }, + { + artists: [ + { + creditedName: "CSR(첫사랑)", + externalIds: [ + { + id: "80373333", + provider: "bugs", + type: "artist", + }, + ], + name: "CSR(첫사랑)", + }, + ], + length: 215000, + number: 2, + recording: { + externalIds: [ + { + id: "6170522", + provider: "bugs", + type: "track", + }, + ], + }, + title: "첫사랑 (Pop? Pop!)", + }, + { + artists: [ + { + creditedName: "CSR(첫사랑)", + externalIds: [ + { + id: "80373333", + provider: "bugs", + type: "artist", + }, + ], + name: "CSR(첫사랑)", + }, + ], + length: 200000, + number: 3, + recording: { + externalIds: [ + { + id: "6170649", + provider: "bugs", + type: "track", + }, + ], + }, + title: "비밀이야 (Manito)", + }, + { + artists: [ + { + creditedName: "CSR(첫사랑)", + externalIds: [ + { + id: "80373333", + provider: "bugs", + type: "artist", + }, + ], + name: "CSR(첫사랑)", + }, + ], + length: 193000, + number: 4, + recording: { + externalIds: [ + { + id: "6170650", + provider: "bugs", + type: "track", + }, + ], + }, + title: "지금 너에게 보내 (Toi Et Moi)", + }, + { + artists: [ + { + creditedName: "CSR(첫사랑)", + externalIds: [ + { + id: "80373333", + provider: "bugs", + type: "artist", + }, + ], + name: "CSR(첫사랑)", + }, + ], + length: 187000, + number: 5, + recording: { + externalIds: [ + { + id: "6170651", + provider: "bugs", + type: "track", + }, + ], + }, + title: "으랏차 (Euratcha!)", + }, + ], + }, + ], + packaging: "None", + releaseDate: { + date: { + day: 28, + month: 7, + year: 2022, + }, + quality: "assumed-valid", + }, + status: "Official", + title: "Sequence : 7272", + types: [ + "EP", + ], +} +`; + +snapshot[`Bugs! provider > release lookup > Single (싱글) album 1`] = ` +{ + artists: [ + { + creditedName: "하슬 (ARTMS)", + externalIds: [ + { + id: "80274322", + provider: "bugs", + type: "artist", + }, + ], + name: "하슬 (ARTMS)", + }, + ], + availableIn: [ + "KR", + ], + excludedFrom: [], + externalLinks: [ + { + types: [ + "paid streaming", + "paid download", + ], + url: "https://music.bugs.co.kr/album/4111423", + }, + ], + images: [ + { + thumbUrl: "https://image.bugsm.co.kr/album/images/500/41114/4111423.jpg", + types: [ + "front", + ], + url: "https://image.bugsm.co.kr/album/images/original/41114/4111423.jpg", + }, + ], + info: { + messages: [], + providers: [ + { + apiUrl: "https://mapi.bugs.co.kr/music/5/multi/invoke/map?album_id=4111423", + id: "4111423", + internalName: "bugs", + lookup: { + method: "id", + value: "4111423", + }, + name: "Bugs!", + url: "https://music.bugs.co.kr/album/4111423", + }, + ], + }, + labels: [ + { + name: "모드하우스", + }, + ], + media: [ + { + format: "Digital Media", + number: 1, + tracklist: [ + { + artists: [ + { + creditedName: "하슬 (ARTMS)", + externalIds: [ + { + id: "80274322", + provider: "bugs", + type: "artist", + }, + ], + name: "하슬 (ARTMS)", + }, + ], + length: 211000, + number: 1, + recording: { + externalIds: [ + { + id: "6275514", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Fragile Eyes", + }, + ], + }, + ], + packaging: "None", + releaseDate: { + date: { + day: 9, + month: 12, + year: 2024, + }, + quality: "assumed-valid", + }, + status: "Official", + title: "", + types: [ + "Single", + ], +} +`; + +snapshot[`Bugs! provider > release lookup > Compilation/Best of (베스트) album with an unavailable, CD-only bonus track 1`] = ` +{ + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + availableIn: [ + "KR", + ], + excludedFrom: [], + externalLinks: [ + { + types: [ + "paid streaming", + "paid download", + ], + url: "https://music.bugs.co.kr/album/4134802", + }, + ], + images: [ + { + thumbUrl: "https://image.bugsm.co.kr/album/images/500/41348/4134802.jpg", + types: [ + "front", + ], + url: "https://image.bugsm.co.kr/album/images/original/41348/4134802.jpg", + }, + ], + info: { + messages: [], + providers: [ + { + apiUrl: "https://mapi.bugs.co.kr/music/5/multi/invoke/map?album_id=4134802", + id: "4134802", + internalName: "bugs", + lookup: { + method: "id", + value: "4134802", + }, + name: "Bugs!", + url: "https://music.bugs.co.kr/album/4134802", + }, + ], + }, + labels: [ + { + name: "SM ENTERTAINMENT", + }, + ], + media: [ + { + format: "Digital Media", + number: 1, + tracklist: [ + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 180000, + number: 1, + recording: { + externalIds: [ + { + id: "6384173", + provider: "bugs", + type: "track", + }, + ], + }, + title: "인사 (Panorama)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 184000, + number: 2, + recording: { + externalIds: [ + { + id: "6384174", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Letter To Myself", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 256000, + number: 3, + recording: { + externalIds: [ + { + id: "6384175", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Time Lapse (2025 Mix)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 209000, + number: 4, + recording: { + externalIds: [ + { + id: "6384176", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Fine", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 205000, + number: 5, + recording: { + externalIds: [ + { + id: "6384177", + provider: "bugs", + type: "track", + }, + ], + }, + title: "INVU", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 217000, + number: 6, + recording: { + externalIds: [ + { + id: "6384178", + provider: "bugs", + type: "track", + }, + ], + }, + title: "불티 (Spark)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 158000, + number: 7, + recording: { + externalIds: [ + { + id: "6384179", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Set Myself On Fire", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 207000, + number: 8, + recording: { + externalIds: [ + { + id: "6384180", + provider: "bugs", + type: "track", + }, + ], + }, + title: "그런 밤 (Some Nights)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 213000, + number: 9, + recording: { + externalIds: [ + { + id: "6384181", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Make Me Love You", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 163000, + number: 10, + recording: { + externalIds: [ + { + id: "6384182", + provider: "bugs", + type: "track", + }, + ], + }, + title: "I (Solo Ver.)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 207000, + number: 11, + recording: { + externalIds: [ + { + id: "6384183", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Why", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 233000, + number: 12, + recording: { + externalIds: [ + { + id: "6384184", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Weekend", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 170000, + number: 13, + recording: { + externalIds: [ + { + id: "6384185", + provider: "bugs", + type: "track", + }, + ], + }, + title: "To. X", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 167000, + number: 14, + recording: { + externalIds: [ + { + id: "6384186", + provider: "bugs", + type: "track", + }, + ], + }, + title: "What Do I Call You", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 188000, + number: 15, + recording: { + externalIds: [ + { + id: "6384187", + provider: "bugs", + type: "track", + }, + ], + }, + title: "사계 (Four Seasons)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 190000, + number: 16, + recording: { + externalIds: [ + { + id: "6384188", + provider: "bugs", + type: "track", + }, + ], + }, + title: "All For Nothing", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 215000, + number: 17, + recording: { + externalIds: [ + { + id: "6384189", + provider: "bugs", + type: "track", + }, + ], + }, + title: "겨울나무 (I'm all ears)", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 228000, + number: 18, + recording: { + externalIds: [ + { + id: "6384190", + provider: "bugs", + type: "track", + }, + ], + }, + title: "11:11", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 222000, + number: 19, + recording: { + externalIds: [ + { + id: "6384191", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Rain", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 239000, + number: 20, + recording: { + externalIds: [ + { + id: "6384192", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Gravity", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 193000, + number: 21, + recording: { + externalIds: [ + { + id: "6384193", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Disaster", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 274000, + number: 22, + recording: { + externalIds: [ + { + id: "6384194", + provider: "bugs", + type: "track", + }, + ], + }, + title: "U R", + }, + { + artists: [ + { + creditedName: "태연 (TAEYEON)", + externalIds: [ + { + id: "80026437", + provider: "bugs", + type: "artist", + }, + ], + name: "태연 (TAEYEON)", + }, + ], + length: 225000, + number: 23, + recording: { + externalIds: [ + { + id: "6384195", + provider: "bugs", + type: "track", + }, + ], + }, + title: "Ending Credits", + }, + ], + }, + ], + packaging: "None", + releaseDate: { + date: { + day: 1, + month: 12, + year: 2025, + }, + quality: "assumed-valid", + }, + status: "Official", + title: "Panorama : The Best of TAEYEON", + types: [ + "Compilation", + ], +} +`; diff --git a/providers/Bugs/api_types.ts b/providers/Bugs/api_types.ts new file mode 100644 index 00000000..a5db2122 --- /dev/null +++ b/providers/Bugs/api_types.ts @@ -0,0 +1,62 @@ +export interface BugsMultiResponse { + list: BugsSection[]; +} + +export type BugsSection = + | { album: { result: BugsAlbum } } + | { album_track: { list: BugsTrack[] } }; + +export interface BugsArtist { + artist_id: number; + artist_nm: string; + upd_dt?: number; + image?: { path: string; color?: string; ratio?: number }; + type?: { + group_yn: boolean; + group_cd_nm?: string; + sex_cd_nm?: string; + category?: string; + }; + expose_yn?: boolean; + genres?: Array<{ svc_type: number; svc_nm: string }>; + valid_yn?: boolean; +} + +export interface BugsAlbum { + album_id: number; + title: string; + artists: BugsArtist[]; + image: { path: string; color?: string; ratio?: number }; + /** The album's release date, formatted as YYYYMMDD */ + release_ymd: string; + rights: { + streaming: { service_yn: boolean }; + download: { service_yn: boolean }; + }; + /** The type of the album, e.g. "정규", "EP(미니)", "싱글" */ + album_tp_nm?: string; + agency_nm?: string; + nation_cd?: string; + /** The album's description */ + descr?: string; + labels?: Array<{ label_id: number; label_nm: string }>; + track_count?: number; + total_track_len?: string; +} + +export interface BugsTrack { + track_no: number; + track_id: number; + track_title: string; + artists: BugsArtist[]; + disc_id: number; + rights: { + streaming: { service_yn: boolean }; + download: { service_yn: boolean }; + }; + /** The track's length, formatted as `MM:SS` or `H:MM:SS` */ + len?: string; + adult_yn?: boolean; + title_yn?: boolean; + valid_yn?: boolean; +} diff --git a/providers/Bugs/mod.test.ts b/providers/Bugs/mod.test.ts new file mode 100644 index 00000000..fde3a169 --- /dev/null +++ b/providers/Bugs/mod.test.ts @@ -0,0 +1,102 @@ +import type { ReleaseOptions } from '@/harmonizer/types.ts'; +import { describeProvider, makeProviderOptions } from '@/providers/test_spec.ts'; +import { stubProviderLookups, stubTokenRetrieval } from '@/providers/test_stubs.ts'; +import { afterAll, describe } from '@std/testing/bdd'; +import { assertSnapshot } from '@std/testing/snapshot'; +import { assert, assertEquals } from 'std/assert/mod.ts'; + +import BugsProvider from './mod.ts'; + +describe('Bugs! provider', () => { + const bugs = new BugsProvider(makeProviderOptions()); + const stubs = [stubProviderLookups(bugs), stubTokenRetrieval(bugs)]; + + const releaseOptions: ReleaseOptions = { + withISRC: false, + withAllTrackArtists: true, + }; + + describeProvider(bugs, { + urls: [{ + description: 'album page', + url: new URL('https://music.bugs.co.kr/album/4119156'), + id: { type: 'album', id: '4119156' }, + isCanonical: true, + }, { + description: 'artist page', + url: new URL('https://music.bugs.co.kr/artist/20171256'), + id: { type: 'artist', id: '20171256' }, + }, { + description: 'track page', + url: new URL('https://music.bugs.co.kr/track/6180357'), + id: { type: 'track', id: '6180357' }, + }, { + description: 'search page (unsupported)', + url: new URL('https://music.bugs.co.kr/search/track?q=test'), + id: undefined, + }], + invalidIds: ['abc', 'not-a-number', '123abc'], + releaseLookup: [{ + description: 'Regular (정규) album', + release: new URL('https://music.bugs.co.kr/album/4119156'), + options: releaseOptions, + assert: async (release, ctx) => { + await assertSnapshot(ctx, release); + assertEquals(release.media.length, 1, 'Should have one disc'); + assertEquals(release.media[0].tracklist.length, 10, 'Should have 10 tracks'); + assert(release.types?.includes('Album'), 'Should be classified as Album'); + }, + }, { + description: 'Regular (정규) album with multiple discs and multiple artists', + release: new URL('https://music.bugs.co.kr/album/590752'), + options: releaseOptions, + assert: async (release, ctx) => { + await assertSnapshot(ctx, release); + assertEquals(release.media.length, 2, 'Should have two discs'); + assertEquals(release.media[0].tracklist.length, 10, 'Disc 1 should have 10 tracks'); + assertEquals(release.media[1].tracklist.length, 7, 'Disc 2 should have 7 tracks'); + assert(release.types?.includes('Album'), 'Should be classified as Album'); + const lastTrack = release.media[1].tracklist.at(-1)!; + assertEquals( + lastTrack.artists?.map((a) => a.name), + ['웨이(크레용팝)', '초아(크레용팝)'], + 'Track with multiple artists should have correct artists', + ); + }, + }, { + description: 'EP (미니) album', + release: new URL('https://music.bugs.co.kr/album/4078166'), + options: releaseOptions, + assert: async (release, ctx) => { + await assertSnapshot(ctx, release); + assertEquals(release.media.length, 1, 'Should have one disc'); + assertEquals(release.media[0].tracklist.length, 5, 'Should have 5 tracks'); + assert(release.types?.includes('EP'), 'Should be classified as EP'); + }, + }, { + description: 'Single (싱글) album', + release: new URL('https://music.bugs.co.kr/album/4111423'), + options: releaseOptions, + assert: async (release, ctx) => { + await assertSnapshot(ctx, release); + assertEquals(release.media.length, 1, 'Should have one disc'); + assertEquals(release.media[0].tracklist.length, 1, 'Should have 1 track'); + assert(release.types?.includes('Single'), 'Should be classified as Single'); + }, + }, { + description: 'Compilation/Best of (베스트) album with an unavailable, CD-only bonus track', + release: new URL('https://music.bugs.co.kr/album/4134802'), + options: releaseOptions, + assert: async (release, ctx) => { + await assertSnapshot(ctx, release); + assertEquals(release.media.length, 1, 'Should have one disc'); + assertEquals(release.media[0].tracklist.length, 23, 'Should have 23 tracks (without the CD-only track)'); + assert(release.types?.includes('Compilation'), 'Should be classified as Compilation'); + }, + }], + }); + + afterAll(() => { + stubs.forEach((s) => s.restore()); + }); +}); diff --git a/providers/Bugs/mod.ts b/providers/Bugs/mod.ts new file mode 100644 index 00000000..44a5b16f --- /dev/null +++ b/providers/Bugs/mod.ts @@ -0,0 +1,231 @@ +import { + type ApiAccessToken, + type ApiQueryOptions, + type CacheEntry, + MetadataApiProvider, + ReleaseApiLookup, +} from '@/providers/base.ts'; +import { DurationPrecision, FeatureQuality, type FeatureQualityMap } from '@/providers/features.ts'; +import type { PartialDate } from '@/utils/date.ts'; +import { parseDuration } from '@/utils/time.ts'; +import { ProviderError } from '@/utils/errors.ts'; +import type { + ArtistCreditName, + Artwork, + EntityId, + HarmonyMedium, + HarmonyRelease, + HarmonyTrack, + Label, + LinkType, + ReleaseGroupType, +} from '@/harmonizer/types.ts'; +import type { BugsAlbum, BugsArtist, BugsMultiResponse, BugsTrack } from './api_types.ts'; +import { getFromEnv } from '../../utils/config.ts'; + +const IMAGE_BASE = 'https://image.bugsm.co.kr/album/images'; + +const bugsMobileClientSecret = getFromEnv('HARMONY_BUGS_CLIENT_SECRET') || ''; + +export default class BugsProvider extends MetadataApiProvider { + readonly name = 'Bugs!'; + + readonly supportedUrls = new URLPattern({ + hostname: 'music.bugs.co.kr', + pathname: String.raw`/:type(album|track|artist)/:id(\d+)`, + }); + + override readonly features: FeatureQualityMap = { + 'cover size': 3000, + 'duration precision': DurationPrecision.SECONDS, + 'GTIN lookup': FeatureQuality.MISSING, + 'MBID resolving': FeatureQuality.PRESENT, + 'release label': FeatureQuality.PRESENT, + }; + + readonly entityTypeMap = { + artist: 'artist', + release: 'album', + recording: 'track', + }; + + override readonly availableRegions = new Set(['KR']); + + readonly releaseLookup = BugsReleaseLookup; + + override readonly launchDate: PartialDate = { + year: 2000, + month: 2, + }; + + readonly apiBaseUrl = 'https://mapi.bugs.co.kr/music/5/multi/invoke/map'; + + constructUrl(entity: EntityId): URL { + return new URL([entity.type, entity.id].join('/'), 'https://music.bugs.co.kr/'); + } + + override getLinkTypesForEntity(): LinkType[] { + return ['paid streaming', 'paid download']; + } + + async query(apiUrl: URL, options: ApiQueryOptions): Promise> { + const albumId = Number(apiUrl.searchParams.get('album_id')); + const body = JSON.stringify([ + { id: 'album', args: { album_id: albumId, result_type: 'DETAIL' } }, + { id: 'album_track', args: { album_id: albumId, result_type: 'LIST' } }, + ]); + const accessToken = await this.cachedAccessToken(this.requestAccessToken); + return this.fetchJSON(apiUrl, { + policy: { maxTimestamp: options.snapshotMaxTimestamp }, + requestInit: { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + 'Authorization': `Bearer ${accessToken}`, + }, + body, + }, + }); + } + + private async requestAccessToken(): Promise { + const url = new URL('https://secure.bugs.co.kr/api/5/appToken'); + url.searchParams.set('client_id', 'bugsapp_credentials_android'); + url.searchParams.set('client_secret', bugsMobileClientSecret); + url.searchParams.set('grant_type', 'client_credentials'); + const { result } = await (await fetch(url, { method: 'POST' })).json(); + return { + accessToken: result.access_token, + validUntilTimestamp: Date.now() + (result.expires_in * 1000), + }; + } +} + +export class BugsReleaseLookup extends ReleaseApiLookup { + constructReleaseApiUrl(): URL { + const url = new URL(this.provider.apiBaseUrl); + url.searchParams.set('album_id', this.lookup.value); + return url; + } + + protected async getRawRelease(): Promise { + if (this.lookup.method === 'gtin') { + throw new ProviderError(this.provider.name, 'GTIN lookups are not supported'); + } + const { content, timestamp } = await this.provider.query( + this.constructReleaseApiUrl(), + { snapshotMaxTimestamp: this.options.snapshotMaxTimestamp }, + ); + this.updateCacheTime(timestamp); + + let album: BugsAlbum | undefined; + let tracks: BugsTrack[] = []; + for (const section of content.list) { + if ('album' in section) album = section.album.result; + else if ('album_track' in section) tracks = section.album_track.list; + } + if (!album) throw new ProviderError(this.provider.name, 'Missing album section in response'); + return { album, tracks }; + } + + protected convertRawRelease(raw: BugsRawRelease): HarmonyRelease { + this.entity = { id: String(raw.album.album_id), type: 'album' }; + + const linkTypes: LinkType[] = []; + if (raw.album.rights.streaming.service_yn) linkTypes.push('paid streaming'); + if (raw.album.rights.download.service_yn) linkTypes.push('paid download'); + + return { + title: raw.album.title, + artists: raw.album.artists.map((a) => this.convertRawArtist(a)), + releaseDate: this.convertReleaseDate(parseYYYYMMDD(raw.album.release_ymd)), + labels: this.extractLabels(raw.album), + images: [this.coverArtwork(raw.album.image.path)], + types: mapReleaseType(raw.album.album_tp_nm), + availableIn: ['KR'], + status: 'Official', + packaging: 'None', + media: this.buildMedia(raw.tracks), + externalLinks: [{ + url: this.provider.constructUrl(this.entity).toString(), + types: linkTypes, + }], + info: this.generateReleaseInfo(), + }; + } + + private convertRawArtist(artist: BugsArtist): ArtistCreditName { + return { + name: artist.artist_nm, + creditedName: artist.artist_nm, + externalIds: this.provider.makeExternalIds({ type: 'artist', id: String(artist.artist_id) }), + }; + } + + private extractLabels(album: BugsAlbum): Label[] { + return album.labels?.map((l) => ({ name: l.label_nm })) ?? []; + } + + private coverArtwork(path: string): Artwork { + return { + url: `${IMAGE_BASE}/original${path}`, + thumbUrl: `${IMAGE_BASE}/500${path}`, + types: ['front'], + }; + } + + private buildMedia(tracks: BugsTrack[]): HarmonyMedium[] { + // Remove unavailable tracks like CD-only bonus tracks which are irrelevant for this digital provider + const filteredTracks = tracks.filter((t) => t.rights.streaming.service_yn || t.rights.download.service_yn); + const mediaMap = new Map(); + for (const track of filteredTracks) { + if (!mediaMap.has(track.disc_id)) { + mediaMap.set(track.disc_id, { + number: track.disc_id, + format: 'Digital Media', + tracklist: [], + }); + } + mediaMap.get(track.disc_id)!.tracklist.push(this.convertRawTrack(track)); + } + return [...mediaMap.values()].sort((a, b) => (a.number ?? 0) - (b.number ?? 0)); + } + + private convertRawTrack(track: BugsTrack): HarmonyTrack { + return { + title: track.track_title, + artists: track.artists.map((a) => this.convertRawArtist(a)), + number: track.track_no, + length: track.len ? parseDuration(track.len) * 1000 : undefined, + recording: { + externalIds: this.provider.makeExternalIds({ type: 'track', id: String(track.track_id) }), + }, + }; + } +} + +interface BugsRawRelease { + album: BugsAlbum; + tracks: BugsTrack[]; +} + +function parseYYYYMMDD(date: string): PartialDate { + const match = date.match(/^(\d{4})(\d{2})(\d{2})$/); + if (!match) return {}; + return { + year: parseInt(match[1]), + month: parseInt(match[2]), + day: parseInt(match[3]), + }; +} + +function mapReleaseType(albumType?: string): ReleaseGroupType[] | undefined { + if (!albumType) return undefined; + if (albumType === '싱글') return ['Single']; + if (albumType === '정규') return ['Album']; + if (albumType === 'EP(미니)') return ['EP']; + if (albumType === '베스트' || albumType === '컴필레이션') return ['Compilation']; + if (albumType === 'OST') return ['Soundtrack']; + if (albumType === '라이브') return ['Live']; + return undefined; +} diff --git a/providers/mod.ts b/providers/mod.ts index a32d4184..c5868682 100644 --- a/providers/mod.ts +++ b/providers/mod.ts @@ -12,6 +12,7 @@ import OtotoyProvider from './Ototoy/mod.ts'; import SpotifyProvider from './Spotify/mod.ts'; import TidalProvider from './Tidal/mod.ts'; import MoraProvider from './Mora/mod.ts'; +import BugsProvider from './Bugs/mod.ts'; /** Registry with all supported providers. */ export const providers = new ProviderRegistry({ @@ -30,6 +31,7 @@ providers.addMultiple( BeatportProvider, MoraProvider, OtotoyProvider, + BugsProvider, ); /** Internal names of providers which are enabled by default (for GTIN lookups). */ diff --git a/server/components/ProviderIcon.tsx b/server/components/ProviderIcon.tsx index 4a059e2d..d12d23e5 100644 --- a/server/components/ProviderIcon.tsx +++ b/server/components/ProviderIcon.tsx @@ -5,6 +5,7 @@ import { providers } from '@/providers/mod.ts'; const providerIconMap: Record = { bandcamp: 'brand-bandcamp', beatport: 'brand-beatport', + bugs: 'brand-bugs', deezer: 'brand-deezer', itunes: 'brand-apple', musicbrainz: 'brand-metabrainz', diff --git a/server/icons/BrandBugs.tsx b/server/icons/BrandBugs.tsx new file mode 100644 index 00000000..9b0d5de1 --- /dev/null +++ b/server/icons/BrandBugs.tsx @@ -0,0 +1,19 @@ +export default function IconBrandBugs({ + size = 24, + color = 'currentColor', + ...props +}) { + return ( + + + + ); +} diff --git a/server/routes/icon-sprite.svg.tsx b/server/routes/icon-sprite.svg.tsx index a53ac988..e1f3ae38 100644 --- a/server/routes/icon-sprite.svg.tsx +++ b/server/routes/icon-sprite.svg.tsx @@ -2,6 +2,7 @@ import IconBrandBeatport from '@/server/icons/BrandBeatport.tsx'; import IconBrandIfpi from '@/server/icons/BrandIfpi.tsx'; import IconBrandMetaBrainz from '@/server/icons/BrandMetaBrainz.tsx'; import IconBrandOtotoy from '@/server/icons/BrandOtotoy.tsx'; +import IconBrandBugs from '@/server/icons/BrandBugs.tsx'; import IconBrandMora from '@/server/icons/BrandMora.tsx'; import IconBrandApple from 'tabler-icons/brand-apple.tsx'; import IconBrandBandcamp from 'tabler-icons/brand-bandcamp.tsx'; @@ -57,6 +58,7 @@ const icons: Icon[] = [ IconBrandApple, IconBrandBandcamp, IconBrandBeatport, + IconBrandBugs, IconBrandDeezer, IconBrandGit, IconBrandIfpi, diff --git a/server/static/harmony.css b/server/static/harmony.css index 67c1522b..c541806a 100644 --- a/server/static/harmony.css +++ b/server/static/harmony.css @@ -30,6 +30,7 @@ --bandcamp: #1da0c3; --beatport: #00e586; --brainz: #eb743b; + --bugs: #ff3d33; --deezer: #a238ff; --mora: #02082a; --musicbrainz: #ba478f; @@ -457,6 +458,9 @@ label.bandcamp, td.bandcamp { label.beatport, td.beatport { background-color: var(--beatport); } +label.bugs, td.bugs { + background-color: var(--bugs); +} label.deezer, td.deezer { background-color: var(--deezer); } diff --git a/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4078166 b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4078166 new file mode 100644 index 00000000..6a109e34 --- /dev/null +++ b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4078166 @@ -0,0 +1 @@ +{"list":[{"album":{"result":{"album_id":4078166,"title":"Sequence : 7272","upd_dt":1718035906000,"track_count":5,"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"comment_group_id":255595433,"comment_count":31,"likes_count":70,"likes_yn":false,"vote_info_id":0,"vote_yn":false},"total_track_len":"16:31","flac_yn":true,"series_yn":false,"styles":[{"style_id":223,"style_nm":"댄스 팝"}],"image":{"path":"/40781/4078166.jpg","color":"DDDCD8","ratio":1.0},"release_ymd":"20220728","rights":{"streaming":{"service_yn":true},"download":{"service_yn":true}},"purchase":{"album_buy_yn":false,"album_price":0,"album_price_vat":0},"nation_cd":"KOR","genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"release_local_ymd":"20220728","descr":"▷ 첫사랑(CSR) 1st MINI ALBUM [Sequence : 7272] \r\n\r\n첫사랑(CSR) 청춘 영화 시리즈 1막\r\n열일곱의 첫사랑, 처음 느껴보는 7272(찌릿찌릿)한 느낌 \r\n\r\n열일곱 동갑내기 소녀들이 처음 느끼는 첫사랑의 감정을 담은 앨범으로 낯설지만 기분 좋은, 처음의 두근거림을 담아냈다.\r\n\r\n한 여름 태양처럼 뜨겁고, 소나기처럼 설레고, 산들바람처럼 시원한 '청춘 영화' 그 자체인 열일곱 소녀들의 첫사랑 이야기는 총 5개 트랙으로 구성된다.\r\n마치 이온음료를 떠올리게 만드는 청량하고 시원한 무드로 구성되어 있어 트랙 순으로 감상하면 한편의 첫사랑 영화를 본 듯한 감정 서사를 느낄 수 있다.\r\n\r\n\r\nㅡ\r\n1. 열일곱 (72.72Hz)\r\n\r\n#1. 나의 첫사랑, 그래 우린 열일곱 같아\r\n\r\n어느 멋진 날 맑은 햇살처럼 눈부시게 다가온 너\r\n마음의 주파수 72.72Hz가 딱 맞는 우리. 열일곱 같아.\r\n\r\n우리만의 7272(찌릿찌릿)한 비밀 주파수! \r\n다른 누구도 아닌 너와 나만 나눌 수 있는 마음을 ‘열일곱’에 비유한 곡으로, 우리가 함께하는 열일곱 주파수를 리스너들에게 전한다. \r\nFunky한 리듬을 기반으로 Rock적인 요소를 가미해 상큼발랄한 에너지를 느낄 수 있는 댄스곡이다.\r\n단둘이서만 나눌 수 있는 마음을 '열일곱'이라는 단어에 비유하여 처음 사랑을 알아가는 설렘의 순간을 그리고 있으며, 리스너들마저 찌릿한 첫사랑의 시작을 함께 하게 한다.\r\n\r\nLyrics by 한혜지(FAB), PiRi BOi(FAB)\r\nComposed by PiRi BOi(FAB), 한혜지(FAB), IKEK, KYRIELLE\r\nArranged by PiRi BOi(FAB), 한혜지(FAB), ATTL(FAB), IKEK, KYRIELLE\r\n\r\n\r\n2. 첫사랑 (Pop? Pop!) *Title*\r\n\r\n#2. 심장이 온종일 찌릿찌릿해. 말로만 듣던 내 첫사랑 아마도 시작인가 봐\r\n\r\n말로만 듣던 첫사랑의 시작.\r\n처음 느껴본 첫사랑, 찌릿하며 Pop? Pop! 터진다! \r\n낯설지만 기분 좋은 첫사랑 감정을 즐기며 솔직하게 표현할 줄 아는 열일곱. \r\n\r\n첫사랑(CSR)의 첫 타이틀곡 ‘첫사랑 (Pop? Pop!)’은 펑키한 리듬과 다이나믹한 베이스라인에 역동적이면서도 한편으로 서정적인 멜로디를 얹은 '팝댄스' 장르로 피어나는 꽃망울, 튀는 옥수수, CO2 사탕 등 아기자기한 소재를 더해 사랑에 빠지면서 달라진 자신의 모습을 그리고 있다. \r\n'Pop? Pop!'을 외치는 모든 라인에 적용한 변칙적 리듬은 어디로 튈지 모르는 설렘과 긴장을 청각화하며 듣는 재미를 더하고,\r\n팽팽하게 흐르는 트랙을 리드하는 첫사랑의 개성 있고 에너지 넘치는 보컬 또한 인상적이다.\r\n\r\n'첫사랑 (Pop? Pop!)'의 퍼포먼스는 첫사랑을 느낀 소녀들의 장난끼 가득하고 당찬 모습을 나타내며, 'Pop? Pop!'과 '7272'에 맞춘 핑거 안무 포인트가 인상적이다.\r\n특히 마지막 훅 구간의 화려하고 키치한 핑거 댄스는 대중들이 따라 하고 싶고, 또 도전하고 싶은 포인트 안무가 될 것으로 기대된다.\r\n\r\n뮤직비디오 역시 열일곱 소녀들이 첫사랑을 느꼈을 때의 감정을 시각화하는 데에 초점을 맞췄다.\r\n호기심 많고 엉뚱한 소녀들의 첫사랑 감성이 켜졌을 때, 7272(찌릿찌릿)한 감정이 Pop? Pop! 하고 터지는 연출은 광고의 한 장면처럼 눈길을 사로잡는다.\r\n\r\nLyrics by 김진환, danke\r\nComposed by 김진환\r\nArranged by 김진환\r\n\r\n\r\n3. 비밀이야 (Manito)\r\n\r\n#3. 비밀이야 숨겨온 나의 첫사랑, 아주 오랫동안 기다려왔던 \r\n\r\n비밀스럽게 간직했던 나의 첫사랑 \r\n넌 몰랐겠지만 사실 너의 마니또는 나였어.\r\n너의 마니또가 되어 이 마음을 전하려 해.\r\n\r\n'비밀이야 (Manito)'는 좋아하는 사람에게 마니또를 통해 고백을 하려는 소녀의 이야기로 보이지만 사실은 마니또가 본인이었던 반전 이야기가 담긴 열일곱 소녀의 당찬 러브레터를 그린 곡이다. \r\n뉴패드 사운드를 기반으로 한 신스팝 트랙의 곡으로 멤버들의 청량하지만 서정적인 톤의 장점을 극대화해 벅차오르는 첫사랑의 감정을 담아냈다.\r\n\r\nLyrics by IRIS Yerin Lee, Moode\r\nComposed by 김상훈, 테트리송, Moode, IRIS Yerin Lee\r\nArranged by 김상훈, 테트리송\r\n\r\n\r\n4. 지금 너에게 보내 (Toi Et Moi)\r\n\r\n#4. 우리 둘만의 Code를 정해 7272 \r\n\r\n처음 느껴본 설렘, 그 시작의 암호 7272\r\n지금 너에게 보내, 우리의 Code 7272\r\n\r\n꿈을 꾸듯 살며시 다가온 첫사랑은 딸기우유처럼, 쇼콜라처럼 달콤하다.\r\n경쾌한 오케스트라 악기와 Synth, 그리고 House 리듬이 한데 어우러져 있는 듯한 이 곡은 '첫사랑(CSR)'만의 색채감과 음악적 Base가 느껴지는 클래시한 곡이다.\r\n“Toi Et Moi (너와 나) 그리고 핑크빛 Timeline.” 열일곱 소녀들이 수줍은 진심 담아 보내는 Code '7272'는 리스너들을 설레게 만든다.\r\n\r\nLyrics by 박세찬, 이정윤, cicatrix, 윤\r\nComposed by 박세찬, JUNBEOM, 이정윤, BILDUP\r\nArranged by 박세찬, JUNBEOM\r\n\r\n\r\n5. 으랏차 (Euratcha!)\r\n\r\n#5. 난 너의, 난 너의 낭만일 거야 \r\n\r\n첫사랑(CSR) 청춘영화 1막 [Sequence : 7272]의 마지막 이야기\r\n첫사랑의 감정을 전하는 소녀들의 바람 \r\n우리의 열일곱이 낭만이 되길...\r\n\r\n첫사랑(CSR)만의 밝고 건강한 느낌이 가득한 팝댄스곡으로 앞으로 펼쳐질 날에 더 큰 기대와 벅찬 마음을 가져보자는 메시지를 담았다.\r\n여름 특유의 감성이 어우러진 곡으로 리스너들을 응원하는 듯한 후렴 부분은 특히 더 여운을 남긴다.\r\n\r\nLyrics by 송수윤, 이형석\r\nComposed by 한재호, 김승수\r\nArranged by 한재호, 김승수, 최윤호\r\n\r\n\r\n[Credits]\r\n\r\nExecutive Producer 채종주, 김진석\r\nExecutive Supervisor 안상현, 박제준\r\n\r\nDirector of Music Production 김상훈\r\nAssociate Music Producer 송승원\r\n\r\nChief Artist Management 이재혁\r\nArtist Manager 허영도, 박지원\r\nArtist Training & Development 윤소원\r\n\r\nActors Planning & Management 이용민, 이지수 @POPSTUDIO\r\n\r\nChief Project Manager 서유미\r\nAssociate Project Manager 김나령\r\nPlanning & New Media Marketing 이민영\r\nVideo Production 김민경\r\nFan Marketing 김소진\r\n\r\nProject Finance & Management 조민국\r\nProject Creative Advisor 이재국\r\nPublic Relations 김교식 @HNS HQ\r\n\r\nVisual Creatives 주희주\r\nStylist 박지혜 @月出 moonrise\r\nHair Stylist 준성, 세미, 상은 @PRANCE \r\nMake up Artist 마음, 예지, 슬이 @PRANCE\r\n\r\nPhotographer 이수진 (assist. 서세현, 남요한, 이채문) @STUDI5\r\nSet Stylist 김윤경, 박찬근 (assist. 김다슬, 김소정) @88LAB\r\nChoreographer of Track2 '첫사랑'(Pop? Pop!) 채다솜 @freemind\r\nChoreographer of Track5 '으랏차'(Euratcha!) 배윤정, 전홍복 @야마앤핫칙스\r\nMusic Video Director 최영지 @PINKLABEL VISUAL\r\nM/V Still Photographer 김현욱 (assist. 변성진, 김주영) @언아더데이\r\n\r\nAlbum Design @STUDIO ONSIL\r\n\r\nSpecial Thanks to \r\n송병준, 송재준, 전상균, 박인규, 안병태, 조성완, 김재훈, 윤준희, 김태형, 김윤경","album_tp_nm":"EP(미니)","agency_nm":"카카오엔터테인먼트","labels":[{"label_id":1264469,"label_nm":"CSR E&M"}],"valid_yn":true},"ret_code":0,"ret_msg":"성공하였습니다."}},{"album_track":{"list":[{"track_no":1,"track_id":6170648,"track_title":"열일곱 (72.72Hz)","upd_dt":1718035906000,"album":{"album_id":4078166,"title":"Sequence : 7272","upd_dt":1718035906000,"track_count":0,"image":{"path":"/40781/4078166.jpg","color":"DDDCD8","ratio":1.0},"release_ymd":"20220728","release_local_ymd":"20220728","valid_yn":true},"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":3,"comment_group_id":255600714,"likes_count":43,"likes_yn":false,"vote_yn":false},"disc_id":1,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"track_gain":-12.08,"len":"03:16","valid_yn":true},{"track_no":2,"track_id":6170522,"track_title":"첫사랑 (Pop? Pop!)","upd_dt":1718035906000,"album":{"album_id":4078166,"title":"Sequence : 7272","upd_dt":1718035906000,"track_count":0,"image":{"path":"/40781/4078166.jpg","color":"DDDCD8","ratio":1.0},"release_ymd":"20220728","release_local_ymd":"20220728","valid_yn":true},"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":10,"comment_group_id":255595434,"likes_count":293,"likes_yn":false,"vote_yn":false},"mvs":[{"mv_id":610119,"mv_title":"첫사랑 (Pop? Pop!)","mv_grade":"ALL","upd_dt":1718035906000,"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"likes_count":11,"play_count":368,"comment_group_id":255595502,"comment_count":1},"image":{"path":"/6101/610119.jpg","color":"D0DCE3","ratio":0.5625},"len":"03:55","attr_tp_nm":"정규","release_ymd":"20220727","adult_yn":false,"valid_yn":true},{"mv_id":610094,"mv_title":"첫사랑 (Pop? Pop!) (Teaser)","mv_grade":"ALL","upd_dt":1718035906000,"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"likes_count":2,"play_count":27,"comment_group_id":255554614,"comment_count":0},"image":{"path":"/6100/610094.jpg","color":"CCD1D7","ratio":0.5625},"len":"00:35","attr_tp_nm":"티저","release_ymd":"20220726","adult_yn":false,"valid_yn":true}],"disc_id":1,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":true,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"track_gain":-11.41,"len":"03:35","valid_yn":true},{"track_no":3,"track_id":6170649,"track_title":"비밀이야 (Manito)","upd_dt":1718035906000,"album":{"album_id":4078166,"title":"Sequence : 7272","upd_dt":1718035906000,"track_count":0,"image":{"path":"/40781/4078166.jpg","color":"DDDCD8","ratio":1.0},"release_ymd":"20220728","release_local_ymd":"20220728","valid_yn":true},"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":3,"comment_group_id":255600715,"likes_count":60,"likes_yn":false,"vote_yn":false},"disc_id":1,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"track_gain":-11.37,"len":"03:20","valid_yn":true},{"track_no":4,"track_id":6170650,"track_title":"지금 너에게 보내 (Toi Et Moi)","upd_dt":1718035906000,"album":{"album_id":4078166,"title":"Sequence : 7272","upd_dt":1718035906000,"track_count":0,"image":{"path":"/40781/4078166.jpg","color":"DDDCD8","ratio":1.0},"release_ymd":"20220728","release_local_ymd":"20220728","valid_yn":true},"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":255600716,"likes_count":35,"likes_yn":false,"vote_yn":false},"disc_id":1,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"track_gain":-12.25,"len":"03:13","valid_yn":true},{"track_no":5,"track_id":6170651,"track_title":"으랏차 (Euratcha!)","upd_dt":1718035906000,"album":{"album_id":4078166,"title":"Sequence : 7272","upd_dt":1718035906000,"track_count":0,"image":{"path":"/40781/4078166.jpg","color":"DDDCD8","ratio":1.0},"release_ymd":"20220728","release_local_ymd":"20220728","valid_yn":true},"artists":[{"artist_id":80373333,"artist_nm":"CSR(첫사랑)","upd_dt":1718161802000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/803733/80373333.jpg","color":"866F3A","ratio":1.0},"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":6,"comment_group_id":255600717,"likes_count":51,"likes_yn":false,"vote_yn":false},"disc_id":1,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"track_gain":-11.72,"len":"03:07","valid_yn":true}],"info":{"list_identity":{"style":"album_track","id":"4078166"}},"ret_code":0,"ret_msg":"성공하였습니다."}}],"apiset":{"next_date":1777595640000},"ret_code":0,"ret_msg":"성공하였습니다."} \ No newline at end of file diff --git a/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4111423 b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4111423 new file mode 100644 index 00000000..1d4bd9e9 --- /dev/null +++ b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4111423 @@ -0,0 +1 @@ +{"list":[{"album":{"result":{"album_id":4111423,"title":"","upd_dt":1735237291000,"track_count":1,"artists":[{"artist_id":80274322,"artist_nm":"하슬 (ARTMS)","upd_dt":1749828081000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"}],"image":{"path":"/802743/80274322.jpg","color":"131A25","ratio":1.0},"valid_yn":true}],"adhoc_attr":{"comment_group_id":278875808,"comment_count":1,"likes_count":13,"likes_yn":false,"vote_info_id":0,"vote_yn":false},"total_track_len":"03:31","flac_yn":true,"series_yn":false,"nation_cd":"KOR","agency_nm":"카카오엔터테인먼트","album_tp_nm":"싱글","genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"}],"release_local_ymd":"20241209","descr":"HaSeul \r\n\r\nARTMS 하슬의 디지털 싱글 ‘Fragile Eyes’\r\n현실 여친같은 하슬의 소박한 목소리는 팬들에게 큰 위로이자 사랑이다.\r\n‘Fragile Eyes’는 전작 ‘Plastic Candy’에 이은 시티팝 곡으로 차가운 도시에 살고 있는 20대의 외로운 정서를 노래한다.\r\n포근한 위로가 아닌 차가운 위로가 팬들에게 선물이 될 수 있길.\r\n\r\n\r\n\r\n1. Fragile Eyes\r\n\r\nComposed by sweetch, ddodde\r\nLyrics by sweetch, U.je\r\nArranged by sweetch, ddodde\r\nChorus by daybea\r\nSynthesizer by ddodde\r\nE. Piano by sweetch\r\nGuitar by 류현우\r\nMoog Bass by sweetch\r\nDrums by sweetch, ddodde\r\nBrass by sweetch\r\nRecorded by 윤길중 @ Sol Sound\r\nMixed by 정진 @ J's Atelier\r\nMastered by 권남우 @ 821 Sound Mastering","styles":[{"style_id":225,"style_nm":"알앤비"}],"image":{"path":"/41114/4111423.jpg","color":"B2B190","ratio":1.0},"release_ymd":"20241209","rights":{"streaming":{"service_yn":true},"download":{"service_yn":true}},"purchase":{"album_buy_yn":false,"album_price":0,"album_price_vat":0},"labels":[{"label_id":1129304,"label_nm":"모드하우스"}],"valid_yn":true},"ret_msg":"성공하였습니다.","ret_code":0}},{"album_track":{"list":[{"track_no":1,"track_id":6275514,"track_title":"Fragile Eyes","upd_dt":1735237291000,"album":{"album_id":4111423,"title":"","upd_dt":1735237291000,"track_count":0,"release_local_ymd":"20241209","image":{"path":"/41114/4111423.jpg","color":"B2B190","ratio":1.0},"release_ymd":"20241209","valid_yn":true},"artists":[{"artist_id":80274322,"artist_nm":"하슬 (ARTMS)","upd_dt":1749828081000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"}],"image":{"path":"/802743/80274322.jpg","color":"131A25","ratio":1.0},"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":10,"comment_group_id":278875809,"likes_count":14,"likes_yn":false,"vote_yn":false},"disc_id":1,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":true,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"track_gain":-9.43,"valid_yn":true,"len":"03:31"}],"info":{"list_identity":{"style":"album_track","id":"4111423"}},"ret_msg":"성공하였습니다.","ret_code":0}}],"apiset":{"next_date":1777595640000},"ret_msg":"성공하였습니다.","ret_code":0} \ No newline at end of file diff --git a/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4119156 b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4119156 new file mode 100644 index 00000000..3118f69c --- /dev/null +++ b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4119156 @@ -0,0 +1 @@ +{"list":[{"album":{"result":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":10,"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"comment_group_id":284004517,"comment_count":13,"likes_count":61,"likes_yn":false,"vote_info_id":0,"vote_yn":false},"total_track_len":"29:47","flac_yn":true,"series_yn":false,"styles":[{"style_id":223,"style_nm":"댄스 팝"},{"style_id":225,"style_nm":"알앤비"}],"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","rights":{"streaming":{"service_yn":true},"download":{"service_yn":true}},"purchase":{"album_buy_yn":false,"album_price":0,"album_price_vat":0},"album_tp_nm":"정규","agency_nm":"카카오엔터테인먼트","nation_cd":"KOR","genres":[{"svc_type":20510,"svc_nm":"댄스/팝"},{"svc_type":20355,"svc_nm":"알앤비/소울"}],"descr":"tripleS \r\n\r\n서로가 서로를 알지 못하고 살아가던 작은 s들이 자신의 능력을 각성하고 함께 모여 힘을 합쳐 큰 S가 되어 tripleS가 되는 이야기. 실제로 tripleS는 서로의 존재를 알지 못한 채 개인 연습생 생활을 했고 그렇게 한 명 한 명이 자신의 잠재력을 발견한 S가 되면서 비로소 서로를 만나고 힘을 합치는 과정을 완성했다.\r\nK-POP 역사상 전무후무한 초대형 프로젝트는 이라는 이름으로 1년에 한 번 전체 힘을 모은다.\r\n'Rising'을 탄생시켰던 , 'Girls Never Die'라는 tripleS만의 주제가를 만들었던 에 이어 정규앨범 가 완성되었다.\r\n타이틀 곡 '깨어'는 희망과 절망 그 사이에서 불안한 삶을 살아가고 있는 청춘에게 보내는 tripleS만 의 주제 의식이 담긴 음악이다.\r\n\"삶은 희망으로 가득 차 있는 걸까? 아니면 쓸데없는 희망 때문에 절망만 더 커져가는 것일까?”\r\n'Girls Never Die'를 통해 죽을힘을 다해 버티다 보면 언젠가 삶도 의미를 갖게 될 것이라고 노래했던 tripleS의 24인 완전체 음악은 언제나 더 깊이, 더 뜨겁게 이 시대를 살고 있는 젊은이들의 이야기를 선명하게 담아낸다.\r\n세상이 그렇게 밝은 것만은 아니지만 그 어둠 속에서 함께 깨어나자고 노래한다.\r\n팬들에게 많은 사랑을 받았던 'Girls Never Die' 뮤직비디오의 세계관과 고스란히 이어지며 소녀들은 방황 속에서 서로가 연대하고 힘을 합쳐 삶의 의미를 찾는다.\r\n최상위 집단이라는 뜻을 가진 인트로곡 ‘@%(Alpha Percent)’는 트랜지션 비트와 호쾌한 기타 사운드가 레이어를 쌓아가며 서로의 힘을 모은 앨범 의 문을 연다.\r\n‘연애소설’에 이어 펼쳐지는 두 번째 이야기, ‘추리소설’은 사랑의 두근거리는 감정을 추리소설에 빗대어 노래한다. 아직은 확인되지 않은 설렘의 순간을 추리하듯 마음을 좇는다. ‘깨어’가 K-POP 안에서 tripleS만의 서사를 가진 주제가라면 ‘추리소설’은 가장 보편적인 걸그룹의 음악 형태에서도 tripleS의 대형 포메이션을 거치면 얼마나 다이내믹한 힘을 모을 수 있는지 증명한다.\r\n‘Rising’과 'Hit the Floor’를 프로듀싱한 GDLO가 만든 '어제 우리 불꽃놀이’는 불꽃처럼 찰나의 순간 강렬하게 타오르지만 사라지기에 더 아름다운 감정들을 담아낸 곡이다. 특히 멤버들의 캐릭터가 한껏 드러난 보컬의 매력이 담겨 있어 평소 tripleS 멤버들을 하나하나 잘 알고 있는 팬이라면 더욱 음악에 숨겨져 있는 개개인의 개성을 발견하는 재미를 찾을 수 있다.\r\n‘Love Child’는 사랑만 받고 자라난 아이에게 인생 처음으로 발견한 짝사랑의 감정을 표현했다. 세상은 이렇게 아름답기만 한데 왜 너 하나만 날 바라봐주지 않느냐고 사랑스러운 투정을 한다.\r\ntripleS의 멤버이자 프로듀서인 박소현이 직접 프로듀싱과 작곡과 작사에 참여한 ‘Persona’는 수많은 K-POP 걸그룹 가운데 tripleS만의 차별점을 제시한다. 달콤함과 쌉싸름의 그 경계 어딘가에서 방황하고 고민할 수밖에 없는 청춘의 질문을 던진다. 모두가 숨기면서 살고 있지만 선뜻 이야기하지 못했던 자아의 양면성에 대해서 노래한다.\r\n2024년 타이틀 곡 선정 그래비티에서 안타깝게 2위를 차지하며 팬들의 지지를 받았던 그 곡. ‘Too Hot’이 드디어 앨범에 수록되었다. 불타오르는 열정과 포기하지 않는 의지를 품고, 더 나은 내일을 향해 달려가는 소녀들의 이야기를 질주하는 듯한 비트에 담았다.\r\n그리고 2025년 수록곡 선정 투표에서 1위를 차지하며 기대를 모았던 ‘Diablo’ 또한 하이테크 댄스 트랙으로 완성되었다. 집착과 중독이라는 위태로운 내면의 이야기를 디아블로라는 모티브로 표현했다.\r\n우린 우정일까 사랑일까. ‘Friend Zone’은 우정의 미묘한 경계선에서 조심스레 피어나는 감정을 고백하는 곡이다. 친구 그 이상이 되고 싶은 간절함과 망설임을 따뜻한 R&B 사운드로 전달한다.\r\n앨범의 마지막 곡 ‘Love2Love’는 ‘깨어’, ‘추리소설’, ‘Love Child’와 함께 앨범의 콘셉트를 관통하는 곡이다. 를 통해 우린 사랑을 전하자고 노래한다. 지금 우리는 불완전하고 불안한 시대를 살고 있지만 어렵더라도 사랑의 끈을 놓지 말자고 말한다.\r\n소녀들이 서로의 손을 잡고 힘을 모았을 때 얼마나 더 큰 도약을 할 수 있는지 tripleS는 매번 불안의 한계를 넘어선다.\r\n\r\n\r\n\r\n\r\n1. @% (Alpha Percent)\r\nComposed by HARING (MonoTree), Revin\r\nLyrics by Jaden Jeong\r\nArranged by HARING (MonoTree), Revin\r\nKeyboard by HARING\r\nSynthesizer by HARING\r\nDrums by HARING\r\nBass by HARING\r\nGuitar by Shiry\r\nDigitally Edited by Revin\r\nBackground Vocals by SeoYeon\r\nRecorded by 민성환 @ The VIBE Studio\r\nMixed by Revin @ Redzone Studio\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n2. 깨어 (Are You Alive)\r\nComposed by HARING (MonoTree), IKKI, 권애진 (MonoTree), Lyd\r\nLyrics by Jaden Jeong, 장다인, 리라, IKKI \r\nArranged by HARING (MonoTree)\r\nVocals Directed by HARING, 권애진, IKKI, 정이수\r\nBackground Vocals by IKKI, 권애진, Lyd\r\nKeyboard by HARING\r\nSynthesizer by HARING\r\nDrums by HARING\r\nBass by HARING\r\nGuitar by Shiry\r\nDigitally Edited by HARING\r\nRecorded by 윤길중 @ Sol Sound, 최우석 @ STUDIO BEYOND, 민성환 @ The VIBE Studio\r\nMixed by 이태섭 @ gateway studio\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n3. 추리소설 (Detective Soseol)\r\nComposed by 영광의 얼굴들 (Full8loom), 진리 (Full8loom), KEEJUN (Full8loom)\r\nLyrics by 진리 (Full8loom), Jaden Jeong\r\nArranged by 영광의 얼굴들 (Full8loom), KEEJUN (Full8loom)\r\nVocals Directed by SEION, 정이수\r\nBackground Vocals by 진리\r\nKeyboard by 장준호, 임기준\r\nSynthesizer by 장준호, 임기준\r\nBass by 박순철\r\nDigitally Edited by 주우영\r\nRecorded by 윤길중 @ Sol Sound\r\nMixed by 정진 @ J’s Atelier\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n4. 어제 우리 불꽃놀이 (Firework Diary)\r\nComposed by GDLO, Moonkyo (MonoTree), C’SA\r\nLyrics by GDLO (MonoTree)\r\nArranged by Moonkyo, GDLO (MonoTree)\r\nVocals Directed by C’SA, Moonkyo, 정이수\r\nBackground Vocals by C’SA\r\nKeyboard by GDLO, Moonkyo\r\nSynthesizer by Moonkyo, GDLO\r\nDrums by Moonkyo, GDLO\r\nRecorded by 윤길중 @ Sol Sound, 최우석 @ STUDIO BEYOND \r\nMixed by 이태섭 @ gateway studio\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n5. Love Child\r\nComposed by Junhyuk, LUKE (MonoTree), Arineh Karimi, BB Elliot\r\nLyrics by Jaden Jeong\r\nArranged by Junhyuk, LUKE (MonoTree)\r\nVocals Directed by LUKE, Junhyuk\r\nBackground Vocals by 권애진 \r\nMidi Programing by Junhyuk, LUKE\r\nDigitally Edited by 김주형, Junhyuk, LUKE\r\nRecorded by 민성환 @ The VIBE Studio\r\nMixed by 정진 @ J’s Atelier\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n6. Persona\r\nComposed by Park SoHyun, BADD, IKKI, NILD (MonoTree), Frankie Day (THE HUB), Awrii (THE HUB), HYUN\r\nLyrics by Park SoHyun\r\nArranged by Park SoHyun, BADD\r\nVocals Directed by Park SoHyun, BADD, 정이수\r\nBackground Vocals by IKKI\r\nKeyboard by BADD, codename\r\nSynthesizer by BADD\r\nDigitally Edited by 주우영, BADD\r\nRecorded by 민성환 @ The VIBE Studio, 윤길중 @ Sol Sound\r\nMixed by 이태섭 @ gateway studio\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n7. Too Hot\r\nComposed by Didrik Thott, Andreas Öhrn, hymax\r\nLyrics by 정일권 (MUMW), MUHA (MUMW), 이보배 (MUMW), 김루키 (MUMW), 김바다 (MUMW), che-che (MUMW), 카리스 (MUMW), 아란 (MUMW), 현유월 (MUMW), 채리하 (MUMW), 도화윤 (MUMW)\r\nArranged by hymax\r\nVocals Directed by hymax, SEION, 정이수\r\nBackground Vocals by Kuzzi\r\nKeyboard by hymax\r\nGuitar by Takey\r\nBass by hymax\r\nDigitally Edited by hymax\r\nRecorded by 윤길중 @ Sol Sound, 민성환 @ The VIBE Studio \r\nMixed by 이태섭 @ gateway studio\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n8. Diablo\r\nComposed by KZ, HONEYSWEAT, DINT, MLC, Maria Marcus\r\nLyrics by Park SoHyun, Jaden Jeong, D'DAY\r\nArranged by HONEYSWEAT\r\nBackground Vocals by COOMO\r\nSynthesizer by HONEYSWEAT\r\nE.Piano by KZ\r\nPiano by HONEYSWEAT, KZ\r\nDrums by HONEYSWEAT\r\nBass by HONEYSWEAT\r\nMidi Programming by HONEYSWEAT\r\nDigitally Edited by DINT @ DINT Studio\r\nRecorded by 김지현 @ doobdoob studio, 민성환 @ The VIBE Studio \r\nMixed by 정진 @ J's Atelier\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n9. Friend Zone\r\nComposed by Artronic Waves, Mayday (AW:crew)\r\nLyrics by Artronic Waves, 해나현 (MUMW), yeon (ARTiffect music)\r\nArranged by Artronic Waves, Mayday (AW:crew)\r\nVocals Directed by 다우리, 권애진, yeon, 정이수\r\nBackground Vocals by Mayday, yeon\r\nKeyboard by 다우리, Mayday\r\nGuitar by Mayday\r\nBass by Mayday\r\nDigitally Edited by 다우리\r\nRecorded by 민성환 @ The VIBE Studio\r\nMixed by 정진 @ J’s Atelier\r\nMastered by 권남우 @ 821 Sound Mastering\r\n\r\n10. Love2Love\r\nComposed by imsuho, Naasim, LuckyJang, MLC, Maria Marcus\r\nLyrics by MLC, Maria Marcus, imsuho, Naasim, LuckyJang\r\nArranged by LuckyJang, Naasim, imsuho\r\nVocals Directed by imsuho, Naasim, LuckyJang\r\nBackground Vocals by 김소현\r\nKeyboard by LuckyJang, Naasim\r\nSynthesizer by imsuho, LuckyJang\r\nBass by Naasim, imsuho\r\nDigitally Edited by imsuho, Naasim, LuckyJang\r\nRecorded by 윤길중 @ Sol Sound, 민성환 @ The VIBE Studio\r\nMixed by 김석민\r\nMastered by 권남우 @ 821 Sound Mastering","release_local_ymd":"20250512","labels":[{"label_id":1129304,"label_nm":"모드하우스"}],"valid_yn":true},"ret_msg":"성공하였습니다.","ret_code":0}},{"album_track":{"list":[{"track_no":1,"track_id":6305557,"track_title":"@% (Alpha Percent)","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":284004518,"likes_count":14,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.44,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"01:02"},{"track_no":2,"track_id":6305558,"track_title":"깨어 (Are You Alive)","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":10,"comment_group_id":284004519,"likes_count":250,"likes_yn":false,"vote_yn":false},"mvs":[{"mv_id":632156,"mv_title":"깨어 (Are You Alive)","mv_grade":"ALL","upd_dt":1749569470000,"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"likes_count":6,"play_count":196,"comment_group_id":284042169,"comment_count":0},"image":{"path":"/6321/632156.jpg","color":"CACACF","ratio":0.5625},"len":"03:20","attr_tp_nm":"정규","release_ymd":"20250512","adult_yn":false,"valid_yn":true},{"mv_id":632041,"mv_title":"깨어 (Are You Alive) (Teaser) (Awake Ver.)","mv_grade":"ALL","upd_dt":1749569470000,"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"likes_count":1,"play_count":22,"comment_group_id":283824362,"comment_count":0},"image":{"path":"/6320/632041.jpg","color":"121213","ratio":0.5625},"len":"00:15","attr_tp_nm":"티저","release_ymd":"20250506","adult_yn":false,"valid_yn":true},{"mv_id":632040,"mv_title":"깨어 (Are You Alive) (Teaser) (Care Ver.)","mv_grade":"ALL","upd_dt":1749569470000,"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"likes_count":0,"play_count":20,"comment_group_id":283766027,"comment_count":0},"image":{"path":"/6320/632040.jpg","color":"0A1E12","ratio":0.5625},"len":"00:14","attr_tp_nm":"티저","release_ymd":"20250501","adult_yn":false,"valid_yn":true}],"disc_id":1,"track_gain":-11.38,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":true,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:06"},{"track_no":3,"track_id":6305559,"track_title":"추리소설 (Detective Soseol)","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":8,"comment_group_id":284004520,"likes_count":57,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.04,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:20"},{"track_no":4,"track_id":6305560,"track_title":"어제 우리 불꽃놀이 (Firework Diary)","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":284004521,"likes_count":40,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.17,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:08"},{"track_no":5,"track_id":6305561,"track_title":"Love Child","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":4,"comment_group_id":284004522,"likes_count":41,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-8.93,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:01"},{"track_no":6,"track_id":6305562,"track_title":"Persona","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":284004523,"likes_count":25,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.3,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:02"},{"track_no":7,"track_id":6305563,"track_title":"Too Hot","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":284004524,"likes_count":28,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.12,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:21"},{"track_no":8,"track_id":6305564,"track_title":"Diablo","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":4,"comment_group_id":284004525,"likes_count":29,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.9,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:20"},{"track_no":9,"track_id":6305565,"track_title":"Friend Zone","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":284004526,"likes_count":27,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.49,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:17"},{"track_no":10,"track_id":6305566,"track_title":"Love2Love","upd_dt":1749569470000,"album":{"album_id":4119156,"title":"","upd_dt":1749569470000,"track_count":0,"image":{"path":"/41191/4119156.jpg","color":"1E1E1E","ratio":1.0},"release_ymd":"20250512","release_local_ymd":"20250512","valid_yn":true},"artists":[{"artist_id":20171256,"artist_nm":"tripleS (트리플에스)","upd_dt":1764170460000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/201712/20171256.jpg","color":"F2C8D8","ratio":1.0},"expose_yn":true,"genres":[{"svc_type":20355,"svc_nm":"알앤비/소울"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":7,"comment_group_id":284004527,"likes_count":40,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.57,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"valid_yn":true,"len":"03:10"}],"info":{"list_identity":{"style":"album_track","id":"4119156"}},"ret_msg":"성공하였습니다.","ret_code":0}}],"apiset":{"next_date":1777594560000},"ret_msg":"성공하였습니다.","ret_code":0} \ No newline at end of file diff --git a/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4134802 b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4134802 new file mode 100644 index 00000000..d7dbcfad --- /dev/null +++ b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=4134802 @@ -0,0 +1 @@ +{"list":[{"album":{"result":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":23,"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"comment_group_id":289796650,"comment_count":27,"likes_count":224,"likes_yn":false,"vote_info_id":0,"vote_yn":false},"total_track_len":"1:19:03","flac_yn":true,"series_yn":false,"styles":[{"style_id":218,"style_nm":"발라드"},{"style_id":223,"style_nm":"댄스 팝"},{"style_id":224,"style_nm":"팝 락"},{"style_id":225,"style_nm":"알앤비"}],"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"purchase":{"album_buy_yn":false,"album_price":0,"album_price_vat":0},"release_ymd":"20251201","rights":{"streaming":{"service_yn":true},"download":{"service_yn":true}},"descr":"‘솔로 데뷔 10주년’ 태연, 첫 컴필레이션 앨범 ‘Panorama’ 발매\r\n‘I’부터 ‘Letter To Myself’까지, ‘믿듣탱’의 10년 파노라마!\r\n\r\n소녀시대 태연이 솔로 데뷔 10주년 기념 첫 컴필레이션 앨범을 발매했다.\r\n\r\n‘Panorama : The Best of TAEYEON’은 태연이 ‘믿고 듣는’ 보컬리스트로서 지난 10년간 펼쳐온 음악 여정을 한 폭의 파노라마로 담아낸 앨범으로, 그동안 선보인 수많은 곡 가운데 대표적인 시기와 장르로 선별한 트랙들로 이루어져 있다.\r\n\r\n이번 앨범의 신곡이자 타이틀곡 ‘인사 (Panorama)’는 생동감 있는 피아노와 신디사이저, 강렬한 드럼 라인 위에 거칠게 몰아치는 기타 멜로디가 어우러진 Pop Rock 장르의 곡으로, 고조되는 감정선을 따라 섬세함과 파워풀함을 오가며 펼쳐지는 태연의 보컬로 깊은 울림과 카타르시스를 선사하며, 가사에는 지난 시간과 앞으로 다가올 날들에 인사를 전하는 내용을 담았다.\r\n\r\n또한 기존 곡을 새롭게 구성한 2025년 믹스 버전, 오직 CD에서만 감상할 수 있는 라이브 버전 등도 추가되어, 단순한 베스트가 아닌 아티스트의 음악 세계를 재정의하는 스페셜 패키지로 완성도를 높였다.\r\n\r\n그룹 넬 (NELL)의 보컬 김종완이 태연을 위해 작업한 ‘Time Lapse (2025 Mix)’는 시간이 지나도 계속해서 마음을 아프게 하는 이별의 감정을 담아낸 가사와 태연의 폭발적인 가창력이 잘 어우러져 많은 사랑을 받은 곡으로, 이번 컴필레이션 앨범의 발매를 기념하여 김종완이 새롭게 믹스, 원곡과는 색다른 매력을 느낄 수 있다.\r\n\r\n데뷔곡 ‘I (Solo Ver.)’는 일렉트로닉 기타 선율과 강렬한 드럼 리듬이 조화를 이룬 미디움 템포의 팝 곡으로, 첫 컴필레이션 앨범 발매를 기념하여 원곡을 재구성, 태연만의 목소리로 재탄생했다.\r\n\r\n더불어 오직 CD로만 감상할 수 있는 ‘인사 (Panorama) (Live Studio Session) (CD Only)’ 라이브 스튜디오 세션 버전은 원곡의 고조되는 감성을 몰아치는 태연의 보컬과 라이브 세션으로 더욱 생생하게 담아내, 리스너들의 몰입도를 높일 것으로 보인다.\r\n\r\n이밖에도 모든 감정을 쏟아내는 듯한 태연의 가창이 감성을 자극하는 미니 6집 타이틀곡 ‘Letter To Myself’, 화려한 고음의 멜로디가 드라마틱한 정규 3집 타이틀곡 ‘INVU’, 소울풀한 보컬이 매력적인 정규 1집 디럭스 에디션 타이틀곡 ‘Make Me Love You’, 섬세한 표현력이 돋보이는 정규 3집 수록곡 ‘그런 밤 (Some Nights)’, 시원하고 청량감 있는 보컬이 인상적인 미니 2집 타이틀곡 ‘Why’, 달콤한 보컬과 나긋한 싱잉랩이 곡의 매력을 더한 싱글 ‘Weekend’, 덤덤하고 무심하게 노래하는 보컬이 인상적인 미니 4집 타이틀곡 ‘What Do I Call You’, 재즈의 소울풀한 느낌이 새로웠던 SM STATION의 첫 곡 ‘Rain’, 특유의 맑고 깨끗한 보컬이 돋보이는 미니 1집 더블 타이틀곡 ‘U R’ 등 태연의 폭넓은 보컬 스펙트럼을 경험할 수 있는 대표곡들도 수록되어 있다.\r\n\r\n이어 태연의 부드럽고 매력적인 음색과 감정선의 절정을 함께 만끽할 수 있는 정규 1집 타이틀곡 ‘Fine’부터 태연의 아티스트로서 뜨거운 자아와 비전을 담은 정규 2집 타이틀곡 '불티 (Spark)', 애틋한 보컬이 감성을 자극하는 정규 3집 수록곡 'Set Myself On Fire', 시크하고 냉담한 무드를 느낄 수 있는 미니 5집 타이틀곡 ‘To. X’, 감성적인 보컬이 극적인 분위기를 연출하는 싱글 '사계 (Four Seasons)', 태연이 작사에 참여한 가사로 솔직한 감정을 녹인 미니 5집 수록곡 ‘All For Nothing’, 따뜻한 위로와 팬사랑을 담은 겨울 앨범 수록곡 '겨울나무 (I'm all ears)', 태연의 어쿠스틱한 매력을 담은 싱글 '11:11', 호소력 짙은 보이스가 깊은 여운을 선사하는 정규 2집 수록곡 ‘Gravity’, 사랑을 재앙에 빗대어 벅찬 감정을 노래한 미니 6집 수록곡 ‘Disaster’, '아름다운 마무리'에 대한 단상을 노래하는 보컬이 감정을 고조시키는 정규 3집 수록곡 'Ending Credits' 등 태연표 감성을 다채롭게 표현한 곡들까지, 태연이 지금까지 걸어온 음악 여정을 되돌아보고 앞으로 펼쳐질 또 다른 음악 세계를 함께 바라보게 한다.\r\n\r\n\r\n01 인사 (Panorama)\r\nKorean Lyrics by Mola\r\nComposed by Mary Josephine Young / Keith Varon / JT Foley / Alida Peck\r\nArranged by Keith Varon\r\n타이틀곡 ‘인사 (Panorama)’는 생동감 있는 피아노와 신디사이저, 강렬한 드럼 라인 위에 거칠게 몰아치는 기타 멜로디가 어우러진 Pop Rock 장르의 곡으로, 고조되는 감정선을 따라 섬세함과 파워풀함을 오가며 펼쳐지는 태연의 보컬로 깊은 울림과 카타르시스를 선사하며, 가사에는 지난 시간과 앞으로 다가올 날들에 인사를 전하는 내용을 담았다.\r\n\r\n02 Letter To Myself\r\nKorean Lyrics by 하윤아(153/Joombas)\r\nComposed by Dino Medanhodzic / Johanna Jansson / Rena Lovelis / Nia Lovelis / Casey Moreta\r\nArranged by Dino Medanhodzic\r\n미니 6집 타이틀곡 ‘Letter To Myself’는 선율적인 기타 사운드와 서정적이면서도 폭발적인 멜로디가 어우러진 Pop Rock 장르의 곡으로, 모든 감정을 쏟아내는 듯한 태연의 가창과 광대하게 펼쳐지는 트랙이 극적인 분위기를 연출하여 풍부하고도 섬세한 감성을 느낄 수 있으며, 가사는 스스로를 아프게 했던 과거의 자신에게 지금의 화자가 보내는 진솔한 편지로, 마음속에 묻어둔 서툴지만 단단한 위로의 말을 전한다.\r\n\r\n03 Time Lapse (2025 Mix)\r\nLyrics by 김종완\r\nComposed & Arranged by 김종완 / ZOOEY\r\n‘Time Lapse (2025 Mix)’는 그룹 넬 (NELL)의 보컬 김종완이 태연을 위해 작업한 곡으로, 시간이 지나도 계속해서 마음을 아프게 하는 이별의 감정을 담아낸 가사와 태연의 폭발적인 가창력이 잘 어우러져 많은 사랑을 받았으며, 이번 컴필레이션 앨범의 발매를 기념하여 김종완이 새롭게 믹스하여 원곡과는 색다른 매력을 느낄 수 있다.\r\n\r\n04 Fine\r\nKorean Lyrics by 진리(Full8loom)\r\nComposed by Michael Woods / Kevin White / Andrew Bazzi / Shaylen Carroll / MZMC\r\nArranged by Rice n' Peas\r\n정규 1집 타이틀곡 ‘Fine’은 코러스 파트의 감성적이고 폭발적인 멜로디가 돋보이는 얼터너티브 팝 곡으로, 태연의 부드럽고 매력적인 음색과 감정선의 절정을 함께 만끽할 수 있으며, 가사에는 겉으로 태연한 척 하지만 속마음은 그렇지 못한, 이별 후의 힘든 감정을 솔직하고 담백하게 표현해 공감을 불러 일으킨다.\r\n\r\n05 INVU\r\nKorean Lyrics by 진리(Full8loom)\r\nComposed by Peter Wallevik / Daniel Davidsen / Rachel Furner / Jess Morgan\r\nArranged by PhD\r\n정규 3집 타이틀곡 ‘INVU’는 부드럽고 몽환적인 신스 사운드와 후렴에 등장하는 플룻 멜로디가 인상적인 하우스 기반의 팝 댄스 곡으로, 화려한 고음이 멜로디가 곡의 스토리텔링을 한층 더 드라마틱하게 보여주며, 가사에는 매번 상처받고 지칠 걸 알지만 그럼에도 사랑에 마음을 아끼지 않는 ‘나’와 그런 자신과는 너무 다른 상대방을 보며 느끼는 감정을 담았다.\r\n\r\n06 불티 (Spark)\r\nKorean Lyrics by KENZIE\r\nComposed & Arranged by KENZIE / Anne Judith Stokke Wik / Ronny Svendsen\r\n정규 2집 타이틀곡 ‘불티 (Spark)’는 감정을 휩쓰는 강렬한 멜로디와 태연의 압도적인 보컬이 어우러진 얼터너티브 소울 팝 장르의 곡으로, 히트메이커 KENZIE가 작사 및 작곡, 편곡에 참여했으며, 가사에는 태연이 가진 아티스트로서의 자아와 비전을 불티에 빗대어 표현했다.\r\n\r\n07 Set Myself On Fire\r\nKorean Lyrics by KENZIE\r\nComposed by Alna Hofmeyr / Michael Dunaief / Ryland Holland / Hamid Bashir\r\nArranged by Stryv\r\n정규 3집 수록곡 ‘Set Myself On Fire’는 빈티지한 기타 연주가 감성을 자극하는 팝 곡으로, 이별을 말하는 연인 앞에서 현실을 부정하지만 결국 이별을 예감하게 되는 가사와 태연의 애틋한 보컬이 잘 어우러진다.\r\n\r\n08 그런 밤 (Some Nights)\r\nKorean Lyrics by 김이나\r\nComposed by Edvard Grieg / Simon Petrén / Andreas Oberg\r\nArranged by Simon Petrén\r\n정규 3집 수록곡 ‘그런 밤 (Some Nights)’은 노르웨이 작곡가 에드바르드 그리그(Edvard Grieg)의 ‘솔베이의 노래’를 샘플링한 R&B 발라드 곡으로, 하염없이 가라앉는 밤에 떠오르는 이름을 마음껏 그리워하면 한동안 버틸 수 있는 행복한 기억이 남는다는 내용을 태연의 섬세한 표현력으로 들려준다.\r\n\r\n09 Make Me Love You\r\nKorean Lyrics by 조윤경\r\nComposed & Arranged by Aaron Benward / Matthew Tishler / Felicia Barton\r\n정규 1집 디럭스 에디션 타이틀곡 ‘Make Me Love You’는 가볍고 잔잔한 사운드와 태연의 소울풀한 보컬이 조화를 이룬 팝 R&B 곡으로, 마치 마법 같은 신비스러운 분위기가 봄과 잘 어울려 곡의 매력을 한층 배가시킨다.\r\n\r\n10 I (Solo Ver.)\r\nKorean Lyrics by 태연 / Mafly / 버벌진트\r\nComposed & Arranged by Myah Marie Langston / Bennett Armstrong / Justin T. Armstrong / Cosmopolitan Douglas / David Quiñones / Jon Asher / RYAN JHUN\r\n태연의 솔로 데뷔곡 'I (Feat. 버벌진트)'를 태연의 첫 컴필레이션 앨범의 발매를 기념하여 새롭게 구성, 태연만의 목소리로 탄생시킨 ‘I (Solo Ver.)'은 일렉트로닉 기타 선율과 강렬한 드럼 리듬이 조화를 이룬 미디움 템포의 팝 곡으로 화려한 스포트라이트 속에 감춰진 진솔한 감정과 앞으로의 다짐 등 자전적인 이야기를 가사에 담았다.\r\n\r\n11 Why\r\nKorean Lyrics by 조윤경\r\nComposed & Arranged by LDN Noise / Lauren Dyson / Rodnae “Chikk” Bell\r\n프로듀싱 팀 런던노이즈(LDN Noise)가 작곡에 참여한 태연 미니 2집 타이틀곡 ‘Why’는 트로피컬 하우스 풍의 트렌디한 팝 곡으로, 갑갑한 일상으로부터 탈출을 꿈꾸면서도 망설이는 이들에게 ‘왜’라는 반문을 던지며 가볍게 떠나 몸과 마음을 재충전 할 수 있기를 바라는 마음을 담은 가사와 태연만의 시원하고 청량감 있는 보컬이 인상적이다.\r\n\r\n12 Weekend\r\nKorean Lyrics by 황유빈 (XYXX)\r\nComposed by Rose In Peace / Saimon / Willemijn van der Neut / Marcia “MISHA” Sondeijker\r\nArranged by Saimon / Rose In Peace\r\n2021년 7월 발매된 싱글 ‘Weekend’는 경쾌한 기타와 레트로한 신스 사운드가 어우러진 디스코 팝 장르 곡으로, 가사에는 반복되는 일상에서 잠시 벗어나 주말만은 하고 싶은 대로 자유롭게 보내고, 이끌리는 대로 떠나고 싶은 마음을 표현했으며, 태연의 달콤한 보컬과 나긋한 싱잉랩이 곡의 설레는 분위기를 배가시킨다.\r\n\r\n13 To. X\r\nKorean Lyrics by KENZIE\r\nComposed by Stephen Puth / dazy / Kristin Carpenter\r\nArranged by Stephen Puth / dazy\r\n미니 5집 타이틀곡 ‘To. X’는 감각적인 기타 리프와 리드미컬한 멜로디가 조화를 이룬 R&B 곡으로, 덤덤하고 냉담한 분위기를 자아내는 태연의 섬세한 보컬이 더해져 시크한 무드를 느낄 수 있으며, 가사에는 상대방이 자신을 통제하고 있음을 깨닫고 관계의 끝을 알리는 내용이 담겨 있다.\r\n\r\n14 What Do I Call You\r\nKorean Lyrics by KENZIE\r\nComposed by Linnea Södahl / Caroline Pennell / David Pramik\r\nArranged by David Pramik\r\n미니 4집 타이틀곡 ‘What Do I Call You’는 개성 있는 악기들이 만들어내는 미니멀하고 리드미컬한 선율이 특징인 R&B 팝곡으로, 이별 후에도 여전히 주변을 맴도는 그에게 느끼는 감정을 덤덤하고 무심하게 노래하는 태연의 보컬이 돋보인다.\r\n\r\n15 사계 (Four Seasons)\r\nKorean Lyrics by KENZIE\r\nComposed by Josh Cumbee / Afshin Salmani / Andrew Allen / KENZIE\r\nArranged by NONFICTION (AFSHeeN & Josh Cumbee) / KENZIE\r\n2019년 3월 발매된 싱글 ‘사계 (Four Seasons)’는 어쿠스틱 기타 중심의 악기 구성이 인상적인 얼터너티브 팝 곡으로, 후렴구의 풍성한 스트링 선율과 태연의 감성적인 보컬이 어우러져 극적인 분위기를 연출하며, 가사에는 사계절 속에서 온전히 사랑했지만 서로에게 점점 무뎌져 가는 모습을 보며 현재 사랑하고 있는지 고민한 후, 먼저 이별을 이야기하는 내용을 담아 독특한 이별 감성을 느낄 수 있다.\r\n\r\n16 All For Nothing\r\nKorean Lyrics by 황유빈 (XYXX) / 태연\r\nComposed by Mike Robinson / Sarah Troy / Thomas Daniel\r\nArranged by Mike Robinson\r\n미니 5집 수록곡 ‘All For Nothing’은 여린 듯 강한 피아노 연주와 몽환적인 사운드, 애절한 보이스가 만난 팝 발라드 곡으로, 태연이 작사에 참여한 가사는 모든 것을 내준 상대방에게 상처를 받은 마음을 솔직하게 표현했다.\r\n\r\n17 겨울나무 (I'm all ears)\r\nKorean Lyrics by Joohyoung (MonoTree)\r\nComposed by Joohyoung (MonoTree) / Astrid Holiday\r\nArranged by Joohyoung (MonoTree)\r\n겨울 앨범 수록곡 ’겨울나무 (I’m all ears)’는 현대인들을 거친 추위 속에 버티고 있는 한 그루의 나무에 빗대어, 말하지 못한 이야기들을 밤새 들어주겠다는 내용을 담은 위로송이자, 언제나 묵묵히 곁을 지켜주고 있는 팬들을 위한 팬송으로, 겨울철 모두의 마음을 따뜻하게 어루만져준다.\r\n\r\n18 11:11\r\nKorean Lyrics by 김이나\r\nComposed & Arranged by Christian Vinten / Chelcee Grimes\r\n2016년 11월 공개된 싱글 ‘11:11’은 어쿠스틱 기타의 잔잔한 선율과 태연의 부드러운 목소리가 잘 어우러진 팝 발라드 장르로, 고즈넉한 늦가을 밤의 운치 있는 분위기와 잘 어울리는 감성적인 곡이다. 가사는 유명 작사가 김이나가 작업, ‘하루가 끝나기 직전의 시간’을 ‘연인 관계가 완전히 끝나기 직전의 시간’에 비유한 내용과 시침과 분침이 11시 11분을 가리킬 때 연인과 함께 소원을 빌던 추억을 떠올리는 아련한 느낌이 인상적이다.\r\n\r\n19 Rain\r\nKorean Lyrics by 봉은영 / Mafly / 이유진\r\nComposed by Matthew Tishler / Aaron Benward / Felicia Barton / Olivia Holt\r\nArranged by Matthew Tishler\r\nSM 디지털 음원 공개 채널 'SM STATION'의 포문을 연 ‘Rain’은 재즈의 소울풀한 느낌을 살린 미디움 템포 곡으로, 독특한 멜로디와 코드 진행이 인상적이며, 헤어진 연인에 대한 추억을 ‘비’에 빗대어 아름다웠던 사랑을 회상하는 스토리가 담긴 가사가 감성을 자극한다.\r\n\r\n20 Gravity\r\nKorean Lyrics by JQ (makeumine works) / 문예린\r\nComposed by Lance Shipp / Rachael Kennedy / Nathalia Marshall / Angel Lopez / Gilde Flores\r\nArranged by LIONCHLD / Angel Lopez / Gilde Flores\r\n정규 2집 수록곡 ‘Gravity’는 소울풀한 멜로디와 감정을 극대화하는 코러스가 인상적인 팝 발라드 곡으로, 한결같은 사랑을 중력에 비유, 변함없는 마음에 감사하는 진심 어린 가사와 태연의 호소력 짙은 보이스가 깊은 여운을 선사한다.\r\n\r\n21 Disaster\r\nKorean Lyrics by bay(153/Joombas) / Ephy(153/Joombas)\r\nComposed & Arranged by Rob Resnick / Sarah de Warren / GiGi Grombacher\r\n미니 6집 수록곡 ‘Disaster’는 거칠고 역동적인 드럼 비트와 벅차오르는 신스 라인이 태연의 호소력 짙은 보컬과 만나 감수성을 극대화하는 Pop Rock 장르의 곡으로, 가사에는 끝이 절망임을 알면서도 기꺼이 뛰어드는 사랑의 감정을 ‘완벽한 재앙’이라는 모순적 표현으로 그려냈다.\r\n\r\n22 U R\r\nKorean Lyrics by 조윤경\r\nComposed by Matthew Tishler / Robyn Newman / Ben Charles\r\nArranged by Matthew Tishler\r\n미니 1집 더블 타이틀곡 'U R'은 잔잔한 어쿠스틱 피아노 멜로디와 화려한 현악기 연주가 잘 어우러지는 트랙과 태연의 맑고 깨끗한 보컬이 돋보이는 발라드 곡이다. 'U R'은 'You are'(그대는)와 'Under the rainbow'(무지개 아래에서)라는 두 가지 의미를 담고 있으며, 비 내리는 풍경 속에서 빛이자 꿈과 같은 상대방을 기다리는 사랑스러운 소녀의 마음을 풀어낸 가사가 인상적이다.\r\n\r\n23 Ending Credits\r\nKorean Lyrics by 지예원(153/Joombas)\r\nComposed by Mich Hansen / Jeppe London Bilsby / Celine Svanbäck / Sam Merrifield\r\nArranged by Cutfather / Jeppe London Bilsby\r\n정규 3집 수록곡 ‘Ending Credits’은 그윽하게 깔리는 여러 겹의 신디사이저와 강한 타격감으로 힘있는 드럼 사운드가 감정을 고조시키는 미디엄템포 팝 곡으로, '인생은 마치 영화와 같다'라는 문구에서 힌트를 얻어 ‘아름다운 마무리’에 대한 단상을 영화와 연극에 빗대어 표현한 가사가 태연의 감성적인 보컬과 잘 어우러져 있다.\r\n\r\n24 인사 (Panorama) (Live Studio Session) (CD Only)\r\nKorean Lyrics by Mola\r\nComposed by Mary Josephine Young / Keith Varon / JT Foley / Alida Peck\r\nArranged by Keith Varon\r\n오직 CD로만 감상할 수 있는 ‘인사 (Panorama)’ 라이브 스튜디오 세션 버전은 원곡의 고조되는 감성을 몰아치는 태연의 보컬과 라이브 세션으로 더욱 생생하게 담아냈다.","nation_cd":"KOR","agency_nm":"카카오엔터테인먼트","album_tp_nm":"베스트","release_local_ymd":"20251201","genres":[{"svc_type":20500,"svc_nm":"발라드"},{"svc_type":20510,"svc_nm":"댄스/팝"},{"svc_type":20355,"svc_nm":"알앤비/소울"}],"labels":[{"label_id":5144,"label_nm":"SM ENTERTAINMENT"}],"valid_yn":true},"ret_code":0,"ret_msg":"성공하였습니다."}},{"album_track":{"list":[{"track_no":1,"track_id":6384173,"track_title":"인사 (Panorama)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":10,"comment_group_id":289796651,"likes_count":492,"likes_yn":false,"vote_yn":false},"mvs":[{"mv_id":636361,"mv_title":"인사 (Panorama)","mv_grade":"ALL","upd_dt":1764605509000,"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"likes_count":2,"play_count":358,"comment_group_id":289798480,"comment_count":1},"image":{"path":"/6363/636361.jpg","color":"19202C","ratio":0.5625},"len":"03:11","attr_tp_nm":"정규","release_ymd":"20251201","adult_yn":false,"valid_yn":true},{"mv_id":636326,"mv_title":"인사 (Panorama) (Teaser)","mv_grade":"ALL","upd_dt":1764605509000,"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"likes_count":7,"play_count":61,"comment_group_id":289708366,"comment_count":0},"image":{"path":"/6363/636326.jpg","color":"474D52","ratio":0.5625},"len":"00:31","attr_tp_nm":"티저","release_ymd":"20251128","adult_yn":false,"valid_yn":true}],"disc_id":1,"track_gain":-9.89,"title_yn":true,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:00"},{"track_no":2,"track_id":6384174,"track_title":"Letter To Myself","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":4,"comment_group_id":289796652,"likes_count":32,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.98,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:04"},{"track_no":3,"track_id":6384175,"track_title":"Time Lapse (2025 Mix)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":6,"comment_group_id":289796653,"likes_count":77,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.04,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"04:16"},{"track_no":4,"track_id":6384176,"track_title":"Fine","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":4,"comment_group_id":289796654,"likes_count":30,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.4,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:29"},{"track_no":5,"track_id":6384177,"track_title":"INVU","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796655,"likes_count":20,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.11,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:25"},{"track_no":6,"track_id":6384178,"track_title":"불티 (Spark)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796656,"likes_count":22,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.03,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:37"},{"track_no":7,"track_id":6384179,"track_title":"Set Myself On Fire","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796657,"likes_count":21,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.41,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"02:38"},{"track_no":8,"track_id":6384180,"track_title":"그런 밤 (Some Nights)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796658,"likes_count":21,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.6,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:27"},{"track_no":9,"track_id":6384181,"track_title":"Make Me Love You","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796659,"likes_count":24,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.6,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:33"},{"track_no":10,"track_id":6384182,"track_title":"I (Solo Ver.)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":6,"comment_group_id":289796660,"likes_count":83,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.01,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"02:43"},{"track_no":11,"track_id":6384183,"track_title":"Why","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796661,"likes_count":20,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.85,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:27"},{"track_no":12,"track_id":6384184,"track_title":"Weekend","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796662,"likes_count":20,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.43,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:53"},{"track_no":13,"track_id":6384185,"track_title":"To. X","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796663,"likes_count":22,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-8.31,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"02:50"},{"track_no":14,"track_id":6384186,"track_title":"What Do I Call You","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796664,"likes_count":19,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-8.73,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"02:47"},{"track_no":15,"track_id":6384187,"track_title":"사계 (Four Seasons)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796665,"likes_count":23,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.38,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:08"},{"track_no":16,"track_id":6384188,"track_title":"All For Nothing","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796666,"likes_count":28,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-8.5,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:10"},{"track_no":17,"track_id":6384189,"track_title":"겨울나무 (I'm all ears)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796667,"likes_count":23,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-8.39,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:35"},{"track_no":18,"track_id":6384190,"track_title":"11:11","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796668,"likes_count":20,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-5.39,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:48"},{"track_no":19,"track_id":6384191,"track_title":"Rain","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796669,"likes_count":21,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.17,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:42"},{"track_no":20,"track_id":6384192,"track_title":"Gravity","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796670,"likes_count":19,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.64,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:59"},{"track_no":21,"track_id":6384193,"track_title":"Disaster","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796671,"likes_count":25,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.9,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:13"},{"track_no":22,"track_id":6384194,"track_title":"U R","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796672,"likes_count":22,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.19,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"04:34"},{"track_no":23,"track_id":6384195,"track_title":"Ending Credits","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796673,"likes_count":33,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.75,"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{"flac16":"44.1","flac24":"96"},"free_yn":false,"bitrates":["aac","320k","aac256","flac"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":true,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":true,"service_flac24_yn":true},"save":{"service_yn":true,"premium_yn":false}},"valid_yn":true,"len":"03:45"},{"track_no":24,"track_id":6384196,"track_title":"인사 (Panorama) (Live Studio Session) (CD Only)","upd_dt":1764605509000,"album":{"album_id":4134802,"title":"Panorama : The Best of TAEYEON","upd_dt":1764605509000,"track_count":0,"image":{"path":"/41348/4134802.jpg","color":"ECE9F3","ratio":1.0},"release_ymd":"20251201","release_local_ymd":"20251201","valid_yn":true},"artists":[{"artist_id":80026437,"artist_nm":"태연 (TAEYEON)","upd_dt":1763652060000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/800264/80026437.jpg","color":"121212","ratio":1.0},"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"expose_yn":true,"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":289796674,"likes_count":3,"likes_yn":false,"vote_yn":false},"disc_id":1,"title_yn":false,"adult_yn":false,"purchase":{"track_buy_yn":false,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":0},"flac_sample_rate":{},"free_yn":false,"bitrates":[],"rights":{"streaming":{"service_yn":false,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":false,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":false,"premium_yn":false}},"valid_yn":true}],"info":{"list_identity":{"style":"album_track","id":"4134802"}},"ret_code":0,"ret_msg":"성공하였습니다."}}],"apiset":{"next_date":1777596480000},"ret_code":0,"ret_msg":"성공하였습니다."} \ No newline at end of file diff --git a/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=590752 b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=590752 new file mode 100644 index 00000000..bda370fe --- /dev/null +++ b/testdata/https!/kr.co.bugs.mapi/music/5/multi/invoke/map!album_id=590752 @@ -0,0 +1 @@ +{"list":[{"album":{"result":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":17,"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"comment_group_id":191983539,"comment_count":98,"likes_count":113,"likes_yn":false,"vote_info_id":0,"vote_yn":false},"total_track_len":"55:11","series_yn":false,"styles":[{"style_id":223,"style_nm":"댄스 팝"},{"style_id":2020,"style_nm":"팝"}],"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","rights":{"streaming":{"service_yn":true},"download":{"service_yn":true}},"purchase":{"album_buy_yn":false,"album_price":0,"album_price_vat":0},"release_local_ymd":"20160926","agency_nm":"LUNE","album_tp_nm":"정규","genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"nation_cd":"KOR","descr":"Crayon Pop 1ST ALBUM [Evolution pop_Vol.1]\r\n크레용팝이 데뷔 이후 첫 정규 앨범 [Evolution pop_Vol.1] 으로 컴백!\r\n크레용팝, 타이틀곡 '두둠칫\" [Doo Doom Chit]\r\n\r\n크레용팝 전원이 정규앨범 제작에 참여해, 1년 6개월만의 공백을 깨고, 크레용팝의 모든것을 담아낸 스폐셜 에디션 앨범을 발표하며 컴백한다.\r\n\r\n앨범 타이틀 \"Evolution pop_Vol 1\"은 새롭게 변화하고 발전하는 크레용팝의 결과물이 담겨져 있으며, 직접 정규 앨범 작업에 참여하여 완성도를 높인 이번 앨범의 \r\n선공개곡인 \"부릉부릉\" 공개한 후 한층 더 성숙한 모습과 다양한 음악을 선보이기 위해 레트로 음악과 디스코 댄스를 현대적으로 재해석한 첫 정규 앨범은 \r\n크레용팝에게도 특별함이 담겨져 있어, 크레용팝만의 색깔이 들어간 새로운 음악으로 만들어낸 앨범을 통해 다양한 음악을 수록하고 2CD로 구성되어 있어,\r\n기대하고 있는 리스너들에게 눈과 귀를 즐겁게 해 줄 앨범이다.\r\n\r\n1CD\r\n01. 부릉부릉(Vroom Vroom) \r\n작사: 웨이(크레용팝), 오유원 작곡: 웨이(크레용팝), 유상균 , 어깨깡패 편곡: 유상균, 어깨깡패\r\n선공개된 '부릉부릉'은 웨이가 작사,작곡에 참여한 곡이며, 신디사이저, 기타 사운드가 더해져 한층 더 신나는 느낌을 주는 곡이다.\r\n\r\n02. Too Much\r\n작사: 도나,신승익,데니스서 작곡: 도나,신승익,데니스서 편곡: 도나,신승익,데니스서\r\nChorus : 김태연 Drum : 도나 Bass : 신승익 \r\n\r\n03. 두둠칫 (Doo Doom Chit)\r\n작사: 오창훈,박성호 작곡: 오창훈,박성호 편곡: 오창훈,박성호\r\n이번 앨범의 타이틀곡인 \"두둠칫\"은 레트로와 디스코가 적절히 섞인 브라스가 일품인 곡이다.\r\n\r\n04. 부기우기 (Boogie Woogie)\r\n작사: 은종태, 빨간머리앤 작곡: 은종태 편곡: 최천곤\r\n\r\n05. Tonight \r\n작사: 송지훈 작곡: 송지훈 편곡: 송지훈 Chorus 김현아 (KIM HYUNA)\r\n\r\n06. 다가와 (Get It Here)\r\n작사: 박상준,김희락,윤호기,이용청 작곡: 박상준,김희락,윤호기,이용청 편곡:박상준,김희락,윤호기,이용청\r\n\r\n07. 스케치북 (Sketch Book)\r\n작사: 김해나 작곡: 김해나,JIBE 편곡: DUDU\r\n\r\n08. Love Couple (feat.The Zoo)\r\n작사: 은종태, The Zoo 작곡: 은종태 편곡: 최천곤\r\n\r\n2CD\r\n01. 빠빠빠 (Bar Bar Bar)\r\n작사: 김유민,이다경 작곡: 김유민 편곡: 김유민,이승엽\r\n\r\n02. 어이 (UH-EE)\r\n작사: 강진우 작곡: 강진우\r\n\r\n03. Dancing Queen\r\n작사: 덤앤더머2,덤앤더머1 작곡: 덤앤더머2,덤앤더머1 편곡: 덤앤더머2,덤앤더머1\r\n\r\n04. Bing Bing\r\n작사: 강진우,송지훈 작곡: 강진우,송지훈 편곡: 이종승,송지훈\r\n\r\n05. FM\r\n작사: 신사동호랭이,몬스터팩토리 작곡: 신사동호랭이,몬스터팩토리\r\n\r\n06. Saturday Night\r\n작사: 송지훈, 강진우 작곡: 송지훈, 강진우 편곡: 송지훈, 강진우\r\n\r\n07. Hello\r\n작사: 은종태, 이승민 작곡: 은종태 편곡: 최천곤","labels":[{"label_id":9420,"label_nm":"크롬엔터테인먼트"}],"valid_yn":true},"ret_msg":"성공하였습니다.","ret_code":0}},{"album_track":{"list":[{"track_no":1,"track_id":4789231,"track_title":"부릉부릉(Vroom Vroom)","upd_dt":1533116480000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":147,"popular":10,"comment_group_id":191984589,"likes_count":110,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.59,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":true,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:00"},{"track_no":2,"track_id":4789232,"track_title":"Too Much","upd_dt":1533116476000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":6,"popular":2,"comment_group_id":191984196,"likes_count":23,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.41,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:02"},{"track_no":3,"track_id":4789233,"track_title":"두둠칫 (Doo Doom Chit)","upd_dt":1533116483000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":350,"popular":10,"comment_group_id":191984994,"likes_count":345,"likes_yn":false,"vote_yn":false},"mvs":[{"mv_id":290232,"mv_title":"두둠칫 (Doo Doom Chit)","mv_grade":"OVER_12","upd_dt":1552498540000,"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"likes_count":17,"play_count":14177,"comment_group_id":194061092,"comment_count":4},"image":{"path":"/2902/290232.jpg","color":"571908","ratio":0.5625},"len":"03:09","attr_tp_nm":"정규","release_ymd":"20160926","adult_yn":false,"valid_yn":true},{"mv_id":290233,"mv_title":"두둠칫 (Doo Doom Chit) (Teaser)","mv_grade":"ALL","upd_dt":1552498540000,"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"likes_count":2,"play_count":1713,"comment_group_id":195992494,"comment_count":1},"image":{"path":"/2902/290233.jpg","color":"7C6466","ratio":0.56206},"len":"00:22","attr_tp_nm":"티저","release_ymd":"20160926","adult_yn":false,"valid_yn":true}],"disc_id":1,"track_gain":-13.57,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":true,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:10"},{"track_no":4,"track_id":4789234,"track_title":"부기우기 (Boogie Woogie)","upd_dt":1533116482000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":20,"popular":2,"comment_group_id":191984806,"likes_count":20,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-12.2,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:33"},{"track_no":5,"track_id":4789235,"track_title":"Tonight","upd_dt":1533116474000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":30,"popular":2,"comment_group_id":191984005,"likes_count":24,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.78,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:32"},{"track_no":6,"track_id":4789236,"track_title":"다가와 (Get It Here)","upd_dt":1533116480000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":7,"popular":2,"comment_group_id":191984590,"likes_count":22,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-13.27,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"02:59"},{"track_no":7,"track_id":4789237,"track_title":"스케치북 (Sketch Book)","upd_dt":1533116483000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":7,"popular":2,"comment_group_id":191984995,"likes_count":17,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-9.04,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:09"},{"track_no":8,"track_id":4789238,"track_title":"Love Couple (feat. The Zoo)","upd_dt":1533116483000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131703,"artist_nm":"소율(크레용팝)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801317/80131703.jpg","color":"6BA0C6","ratio":1.49816},"expose_yn":true,"genres":[{"svc_type":20500,"svc_nm":"발라드"},{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":4,"popular":2,"comment_group_id":191984996,"likes_count":21,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.9,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:27"},{"track_no":9,"track_id":4789239,"track_title":"부릉부릉 (Vroom Vroom) (Inst.)","upd_dt":1533116476000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":2,"popular":2,"comment_group_id":191984197,"likes_count":6,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-10.01,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:00"},{"track_no":10,"track_id":4789240,"track_title":"두둠칫 (Doo Doom Chit) (Inst.)","upd_dt":1533116476000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":2,"popular":2,"comment_group_id":191984198,"likes_count":7,"likes_yn":false,"vote_yn":false},"disc_id":1,"track_gain":-11.74,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:10"},{"track_no":1,"track_id":4789241,"track_title":"빠빠빠 (Bar Bar Bar)","upd_dt":1533116485000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":27,"popular":10,"comment_group_id":191985201,"likes_count":260,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-11.79,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"02:59"},{"track_no":2,"track_id":4789242,"track_title":"어이 (UH-EE)","upd_dt":1533116485000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":37,"popular":8,"comment_group_id":191985202,"likes_count":105,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-10.32,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:13"},{"track_no":3,"track_id":4789243,"track_title":"Dancing Queen 2.0","upd_dt":1533116480000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":19,"popular":2,"comment_group_id":191984591,"likes_count":27,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-11.3,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:20"},{"track_no":4,"track_id":4789244,"track_title":"Bing Bing","upd_dt":1533116476000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":114,"popular":5,"comment_group_id":191984199,"likes_count":53,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-10.72,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:06"},{"track_no":5,"track_id":4789245,"track_title":"FM","upd_dt":1533116480000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":13,"popular":2,"comment_group_id":191984592,"likes_count":34,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-11.68,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:41"},{"track_no":6,"track_id":4789246,"track_title":"Saturday Night","upd_dt":1533116482000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131691,"artist_nm":"크레용팝(Crayon Pop)","upd_dt":1559316063000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":true,"group_cd_nm":"그룹","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801316/80131691.jpg","color":"5D99C1","ratio":0.66762},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"}],"valid_yn":true}],"adhoc_attr":{"play_count":14,"popular":2,"comment_group_id":191984807,"likes_count":27,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-10.71,"bitrates":["320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:07"},{"track_no":7,"track_id":4789247,"track_title":"Hello","upd_dt":1567610895000,"album":{"album_id":590752,"title":"Evolution Pop_Vol.1","upd_dt":1567611128000,"track_count":0,"image":{"path":"/5907/590752.jpg","color":"5C96BD","ratio":1.0},"release_ymd":"20160926","release_local_ymd":"20160926","valid_yn":true},"artists":[{"artist_id":80131708,"artist_nm":"웨이(크레용팝)","upd_dt":1567672503000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801317/80131708.jpg","color":"639AC1","ratio":1.49908},"expose_yn":true,"genres":[{"svc_type":20500,"svc_nm":"발라드"}],"valid_yn":true},{"artist_id":80131707,"artist_nm":"초아(크레용팝)","upd_dt":1567672503000,"adhoc_attr":{"likes_yn":false,"vote_yn":false},"type":{"group_yn":false,"group_cd_nm":"솔로","sex_cd_nm":"여성","category":"NORMAL"},"image":{"path":"/801317/80131707.jpg","color":"6197BE","ratio":1.4984},"expose_yn":true,"genres":[{"svc_type":20510,"svc_nm":"댄스/팝"},{"svc_type":20290,"svc_nm":"캐롤"},{"svc_type":20500,"svc_nm":"발라드"},{"svc_type":325,"svc_nm":"인디"},{"svc_type":20272,"svc_nm":"어린이"}],"valid_yn":true}],"adhoc_attr":{"play_count":0,"popular":2,"comment_group_id":191983817,"likes_count":22,"likes_yn":false,"vote_yn":false},"disc_id":2,"track_gain":-9.93,"bitrates":["aac","320k"],"rights":{"streaming":{"service_yn":true,"premium_yn":false,"flac_premium_yn":false,"pps_yn":false},"download":{"service_yn":true,"premium_yn":false,"ppd_yn":false},"download_flac":{"service_flac_yn":false,"service_flac24_yn":false},"save":{"service_yn":true,"premium_yn":false}},"title_yn":false,"adult_yn":false,"purchase":{"price":700,"track_buy_yn":true,"album_buy_only_yn":false,"pc_limit_cnt":0,"price_vat":770},"flac_sample_rate":{},"free_yn":false,"valid_yn":true,"len":"03:43"}],"info":{"list_identity":{"style":"album_track","id":"590752"}},"ret_msg":"성공하였습니다.","ret_code":0}}],"apiset":{"next_date":1777594800000},"ret_msg":"성공하였습니다.","ret_code":0} \ No newline at end of file