Fixed missing videoId
This commit is contained in:
parent
e3579a90b5
commit
10c15a85af
|
|
@ -2,8 +2,8 @@ import YTMusic from "./YTMusic"
|
||||||
|
|
||||||
const ytmusic = new YTMusic()
|
const ytmusic = new YTMusic()
|
||||||
ytmusic.initialize().then(() => {
|
ytmusic.initialize().then(() => {
|
||||||
ytmusic.search("Lilac", "ALBUM").then(res => {
|
ytmusic.search("Lilac", "PLAYLIST").then(res => {
|
||||||
ytmusic.getAlbum(res[0].albumId).then(res => {
|
ytmusic.getPlaylist(res[0].playlistId).then(res => {
|
||||||
console.log(res)
|
console.log(res)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@ import traverse from "../utils/traverse"
|
||||||
export default class SongParser {
|
export default class SongParser {
|
||||||
public static parseSearchResult(item: any): YTMusic.SongDetailed {
|
public static parseSearchResult(item: any): YTMusic.SongDetailed {
|
||||||
const flexColumns = traverse(item, "flexColumns")
|
const flexColumns = traverse(item, "flexColumns")
|
||||||
|
const videoId = traverse(item, "playlistItemData", "videoId")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "SONG",
|
type: "SONG",
|
||||||
videoId: traverse(item, "playlistItemData", "videoId"),
|
videoId: videoId instanceof Array ? null : videoId,
|
||||||
name: traverse(flexColumns[0], "runs", "text"),
|
name: traverse(flexColumns[0], "runs", "text"),
|
||||||
artists: traverse(flexColumns[1], "runs")
|
artists: traverse(flexColumns[1], "runs")
|
||||||
.filter((run: any) => "navigationEndpoint" in run)
|
.filter((run: any) => "navigationEndpoint" in run)
|
||||||
|
|
@ -23,10 +24,11 @@ export default class SongParser {
|
||||||
|
|
||||||
public static parseArtistSong(item: any): YTMusic.SongDetailed {
|
public static parseArtistSong(item: any): YTMusic.SongDetailed {
|
||||||
const flexColumns = traverse(item, "flexColumns")
|
const flexColumns = traverse(item, "flexColumns")
|
||||||
|
const videoId = traverse(item, "playlistItemData", "videoId")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "SONG",
|
type: "SONG",
|
||||||
videoId: traverse(item, "playlistItemData", "videoId"),
|
videoId: videoId instanceof Array ? null : videoId,
|
||||||
name: traverse(flexColumns[0], "runs", "text"),
|
name: traverse(flexColumns[0], "runs", "text"),
|
||||||
artists: [traverse(flexColumns[1], "runs")]
|
artists: [traverse(flexColumns[1], "runs")]
|
||||||
.flat()
|
.flat()
|
||||||
|
|
@ -49,10 +51,11 @@ export default class SongParser {
|
||||||
artistBasic: YTMusic.ArtistBasic
|
artistBasic: YTMusic.ArtistBasic
|
||||||
): Omit<YTMusic.SongDetailed, "duration"> {
|
): Omit<YTMusic.SongDetailed, "duration"> {
|
||||||
const flexColumns = traverse(item, "flexColumns")
|
const flexColumns = traverse(item, "flexColumns")
|
||||||
|
const videoId = traverse(item, "playlistItemData", "videoId")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "SONG",
|
type: "SONG",
|
||||||
videoId: traverse(item, "playlistItemData", "videoId"),
|
videoId: videoId instanceof Array ? null : videoId,
|
||||||
name: traverse(flexColumns[0], "runs", "text"),
|
name: traverse(flexColumns[0], "runs", "text"),
|
||||||
artists: [artistBasic],
|
artists: [artistBasic],
|
||||||
album: {
|
album: {
|
||||||
|
|
@ -70,10 +73,11 @@ export default class SongParser {
|
||||||
thumbnails: YTMusic.ThumbnailFull[]
|
thumbnails: YTMusic.ThumbnailFull[]
|
||||||
): YTMusic.SongDetailed {
|
): YTMusic.SongDetailed {
|
||||||
const flexColumns = traverse(item, "flexColumns")
|
const flexColumns = traverse(item, "flexColumns")
|
||||||
|
const videoId = traverse(item, "playlistItemData", "videoId")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "SONG",
|
type: "SONG",
|
||||||
videoId: traverse(item, "playlistItemData", "videoId"),
|
videoId: videoId instanceof Array ? null : videoId,
|
||||||
name: traverse(flexColumns[0], "runs", "text"),
|
name: traverse(flexColumns[0], "runs", "text"),
|
||||||
artists,
|
artists,
|
||||||
album: albumBasic,
|
album: albumBasic,
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ export const ALBUM_BASIC: ObjectValidator<YTMusic.AlbumBasic> = OBJECT({
|
||||||
|
|
||||||
export const SONG_DETAILED: ObjectValidator<YTMusic.SongDetailed> = OBJECT({
|
export const SONG_DETAILED: ObjectValidator<YTMusic.SongDetailed> = OBJECT({
|
||||||
type: STRING("SONG"),
|
type: STRING("SONG"),
|
||||||
videoId: STRING(),
|
videoId: OR(STRING(), NULL()),
|
||||||
name: STRING(),
|
name: STRING(),
|
||||||
artists: LIST(ARTIST_BASIC),
|
artists: LIST(ARTIST_BASIC),
|
||||||
album: ALBUM_BASIC,
|
album: ALBUM_BASIC,
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ declare namespace YTMusic {
|
||||||
|
|
||||||
interface SongDetailed {
|
interface SongDetailed {
|
||||||
type: "SONG"
|
type: "SONG"
|
||||||
videoId: string
|
videoId: string | null
|
||||||
name: string
|
name: string
|
||||||
artists: ArtistBasic[]
|
artists: ArtistBasic[]
|
||||||
album: AlbumBasic
|
album: AlbumBasic
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue