Fixed missing videoId

This commit is contained in:
Zechariah 2021-12-25 14:39:19 +08:00
parent e3579a90b5
commit 10c15a85af
4 changed files with 12 additions and 8 deletions

View File

@ -2,8 +2,8 @@ import YTMusic from "./YTMusic"
const ytmusic = new YTMusic()
ytmusic.initialize().then(() => {
ytmusic.search("Lilac", "ALBUM").then(res => {
ytmusic.getAlbum(res[0].albumId).then(res => {
ytmusic.search("Lilac", "PLAYLIST").then(res => {
ytmusic.getPlaylist(res[0].playlistId).then(res => {
console.log(res)
})
})

View File

@ -4,10 +4,11 @@ import traverse from "../utils/traverse"
export default class SongParser {
public static parseSearchResult(item: any): YTMusic.SongDetailed {
const flexColumns = traverse(item, "flexColumns")
const videoId = traverse(item, "playlistItemData", "videoId")
return {
type: "SONG",
videoId: traverse(item, "playlistItemData", "videoId"),
videoId: videoId instanceof Array ? null : videoId,
name: traverse(flexColumns[0], "runs", "text"),
artists: traverse(flexColumns[1], "runs")
.filter((run: any) => "navigationEndpoint" in run)
@ -23,10 +24,11 @@ export default class SongParser {
public static parseArtistSong(item: any): YTMusic.SongDetailed {
const flexColumns = traverse(item, "flexColumns")
const videoId = traverse(item, "playlistItemData", "videoId")
return {
type: "SONG",
videoId: traverse(item, "playlistItemData", "videoId"),
videoId: videoId instanceof Array ? null : videoId,
name: traverse(flexColumns[0], "runs", "text"),
artists: [traverse(flexColumns[1], "runs")]
.flat()
@ -49,10 +51,11 @@ export default class SongParser {
artistBasic: YTMusic.ArtistBasic
): Omit<YTMusic.SongDetailed, "duration"> {
const flexColumns = traverse(item, "flexColumns")
const videoId = traverse(item, "playlistItemData", "videoId")
return {
type: "SONG",
videoId: traverse(item, "playlistItemData", "videoId"),
videoId: videoId instanceof Array ? null : videoId,
name: traverse(flexColumns[0], "runs", "text"),
artists: [artistBasic],
album: {
@ -70,10 +73,11 @@ export default class SongParser {
thumbnails: YTMusic.ThumbnailFull[]
): YTMusic.SongDetailed {
const flexColumns = traverse(item, "flexColumns")
const videoId = traverse(item, "playlistItemData", "videoId")
return {
type: "SONG",
videoId: traverse(item, "playlistItemData", "videoId"),
videoId: videoId instanceof Array ? null : videoId,
name: traverse(flexColumns[0], "runs", "text"),
artists,
album: albumBasic,

View File

@ -19,7 +19,7 @@ export const ALBUM_BASIC: ObjectValidator<YTMusic.AlbumBasic> = OBJECT({
export const SONG_DETAILED: ObjectValidator<YTMusic.SongDetailed> = OBJECT({
type: STRING("SONG"),
videoId: STRING(),
videoId: OR(STRING(), NULL()),
name: STRING(),
artists: LIST(ARTIST_BASIC),
album: ALBUM_BASIC,

2
src/types.d.ts vendored
View File

@ -7,7 +7,7 @@ declare namespace YTMusic {
interface SongDetailed {
type: "SONG"
videoId: string
videoId: string | null
name: string
artists: ArtistBasic[]
album: AlbumBasic