🔖 4.3.0

add back video count only to PlaylistFull
This commit is contained in:
zS1L3NT Windows 2023-08-08 05:18:55 +08:00
parent 57c1c37dcd
commit efb17791e6
14 changed files with 71 additions and 16 deletions

View File

@ -226,6 +226,10 @@ export default defineUserConfig({
text: "AlbumFull", text: "AlbumFull",
link: "/references/interfaces/AlbumFull.html" link: "/references/interfaces/AlbumFull.html"
}, },
{
text: "PlaylistDetailed",
link: "/references/interfaces/PlaylistDetailed.html"
},
{ {
text: "PlaylistFull", text: "PlaylistFull",
link: "/references/interfaces/PlaylistFull.html" link: "/references/interfaces/PlaylistFull.html"

View File

@ -11,4 +11,5 @@
- [AlbumBasic](./interfaces/AlbumBasic.html) - [AlbumBasic](./interfaces/AlbumBasic.html)
- [AlbumDetailed](./interfaces/AlbumDetailed.html) - [AlbumDetailed](./interfaces/AlbumDetailed.html)
- [AlbumFull](./interfaces/AlbumFull.html) - [AlbumFull](./interfaces/AlbumFull.html)
- [PlaylistDetailed](./interfaces/PlaylistDetailed.html)
- [PlaylistFull](./interfaces/PlaylistFull.html) - [PlaylistFull](./interfaces/PlaylistFull.html)

View File

@ -24,4 +24,6 @@ interface ArtistBasic {
[AlbumDetailed#artists](./AlbumDetailed.html) [AlbumDetailed#artists](./AlbumDetailed.html)
[PlaylistDetailed#artist](./PlaylistDetailed.html)
[PlaylistFull#artist](./PlaylistFull.html) [PlaylistFull#artist](./PlaylistFull.html)

View File

@ -0,0 +1,29 @@
# PlaylistDetailed
## Properties
| Name | Data Type | Description |
| :--------- | :---------------------------------- | :------------------------------- |
| type | `"PLAYLIST"` | Type of data |
| playlistId | `string` | Playlist ID |
| name | `string` | Name |
| artist | [ArtistBasic](#ArtistBasic) | Creator of the Playlist |
| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails |
## TypeScript Source Code
```ts
interface PlaylistDetailed {
type: "PLAYLIST"
playlistId: string
name: string
artist: ArtistBasic
thumbnails: ThumbnailFull[]
}
```
## Usages
[SearchResult](../types/SearchResult.html)
[YTMusic#searchPlaylists](../ytmusic/searchPlaylists.html)

View File

@ -8,6 +8,7 @@
| playlistId | `string` | Playlist ID | | playlistId | `string` | Playlist ID |
| name | `string` | Name | | name | `string` | Name |
| artist | [ArtistBasic](#ArtistBasic) | Creator of the Playlist | | artist | [ArtistBasic](#ArtistBasic) | Creator of the Playlist |
| videoCount | `number` | Number of videos in the Playlist |
| thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails | | thumbnails | [ThumbnailFull](#ThumbnailFull)`[]` | Thumbnails |
## TypeScript Source Code ## TypeScript Source Code
@ -18,14 +19,11 @@ interface PlaylistFull {
playlistId: string playlistId: string
name: string name: string
artist: ArtistBasic artist: ArtistBasic
videoCount: number
thumbnails: ThumbnailFull[] thumbnails: ThumbnailFull[]
} }
``` ```
## Usages ## Usages
[SearchResult](../types/SearchResult.html)
[YTMusic#searchPlaylists](../ytmusic/searchPlaylists.html)
[YTMusic#getPlaylist](../ytmusic/getPlaylist.html) [YTMusic#getPlaylist](../ytmusic/getPlaylist.html)

View File

@ -28,4 +28,6 @@ interface ThumbnailFull {
[AlbumDetailed#thumbnails](./AlbumDetailed.html) [AlbumDetailed#thumbnails](./AlbumDetailed.html)
[PlaylistDetailed#thumbnails](./PlaylistDetailed.html)
[PlaylistFull#thumbnails](./PlaylistFull.html) [PlaylistFull#thumbnails](./PlaylistFull.html)

View File

@ -8,7 +8,7 @@ Either
- [VideoDetailed](../interfaces/VideoDetailed.html) - [VideoDetailed](../interfaces/VideoDetailed.html)
- [AlbumDetailed](../interfaces/AlbumDetailed.html) - [AlbumDetailed](../interfaces/AlbumDetailed.html)
- [ArtistDetailed](../interfaces/ArtistDetailed.html) - [ArtistDetailed](../interfaces/ArtistDetailed.html)
- [PlaylistFull](../interfaces/PlaylistFull.html) - [PlaylistDetailed](../interfaces/PlaylistDetailed.html)
## TypeScript Source Code ## TypeScript Source Code
@ -18,7 +18,7 @@ type SearchResult =
| VideoDetailed | VideoDetailed
| AlbumDetailed | AlbumDetailed
| ArtistDetailed | ArtistDetailed
| PlaylistFull | PlaylistDetailed
``` ```
## Usages ## Usages

View File

@ -10,10 +10,10 @@ See the [guide](../../guides/usage/searchPlaylists.html) for information on how
## Returns ## Returns
`Promise<`[PlaylistFull](../interfaces/PlaylistFull.html)`[]>` `Promise<`[PlaylistDetailed](../interfaces/PlaylistDetailed.html)`[]>`
## TypeScript Source Code ## TypeScript Source Code
```ts ```ts
public async searchPlaylists(query: string): Promise<PlaylistFull[]> public async searchPlaylists(query: string): Promise<PlaylistDetailed[]>
``` ```

View File

@ -1,6 +1,6 @@
{ {
"name": "ytmusic-api", "name": "ytmusic-api",
"version": "4.2.0", "version": "4.3.0",
"description": "YouTube Music API", "description": "YouTube Music API",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@ -13,6 +13,7 @@ import {
AlbumFull, AlbumFull,
ArtistDetailed, ArtistDetailed,
ArtistFull, ArtistFull,
PlaylistDetailed,
PlaylistFull, PlaylistFull,
SearchResult, SearchResult,
SongDetailed, SongDetailed,
@ -305,7 +306,7 @@ export default class YTMusic {
* *
* @param query Query string * @param query Query string
*/ */
public async searchPlaylists(query: string): Promise<z.infer<typeof PlaylistFull>[]> { public async searchPlaylists(query: string): Promise<z.infer<typeof PlaylistDetailed>[]> {
const searchData = await this.constructRequest("search", { const searchData = await this.constructRequest("search", {
query, query,
params: "Eg-KAQwIABAAGAAgACgBMABqChAEEAMQCRAFEAo%3D", params: "Eg-KAQwIABAAGAAgACgBMABqChAEEAMQCRAFEAo%3D",

View File

@ -7,6 +7,7 @@ import {
AlbumFull, AlbumFull,
ArtistDetailed, ArtistDetailed,
ArtistFull, ArtistFull,
PlaylistDetailed,
PlaylistFull, PlaylistFull,
SongDetailed, SongDetailed,
SongFull, SongFull,
@ -57,7 +58,7 @@ queries.forEach(query => {
it("Search Playlists", async () => { it("Search Playlists", async () => {
const playlists = await ytmusic.searchPlaylists(query) const playlists = await ytmusic.searchPlaylists(query)
expect(playlists, z.array(PlaylistFull)) expect(playlists, z.array(PlaylistDetailed))
}) })
it("Search All", async () => { it("Search All", async () => {
@ -66,7 +67,7 @@ queries.forEach(query => {
results, results,
z.array( z.array(
AlbumDetailed.or(ArtistDetailed) AlbumDetailed.or(ArtistDetailed)
.or(PlaylistFull) .or(PlaylistDetailed)
.or(SongDetailed) .or(SongDetailed)
.or(VideoDetailed), .or(VideoDetailed),
), ),

View File

@ -7,6 +7,7 @@ export type {
ArtistBasic, ArtistBasic,
ArtistDetailed, ArtistDetailed,
ArtistFull, ArtistFull,
PlaylistDetailed,
PlaylistFull, PlaylistFull,
SearchResult, SearchResult,
SongDetailed, SongDetailed,

View File

@ -1,4 +1,4 @@
import { PlaylistFull } from "../schemas" import { PlaylistDetailed, PlaylistFull } from "../schemas"
import checkType from "../utils/checkType" import checkType from "../utils/checkType"
import traverseList from "../utils/traverseList" import traverseList from "../utils/traverseList"
import traverseString from "../utils/traverseString" import traverseString from "../utils/traverseString"
@ -14,13 +14,19 @@ export default class PlaylistParser {
artistId: traverseString(data, "header", "subtitle", "browseId")(), artistId: traverseString(data, "header", "subtitle", "browseId")(),
name: traverseString(data, "header", "subtitle", "text")(2), name: traverseString(data, "header", "subtitle", "text")(2),
}, },
videoCount:
+traverseList(data, "header", "secondSubtitle", "text")
.at(2)
.split(" ")
.at(0)
.replaceAll(",", "") ?? null,
thumbnails: traverseList(data, "header", "thumbnails"), thumbnails: traverseList(data, "header", "thumbnails"),
}, },
PlaylistFull, PlaylistFull,
) )
} }
public static parseSearchResult(item: any): PlaylistFull { public static parseSearchResult(item: any): PlaylistDetailed {
const flexColumns = traverseList(item, "flexColumns") const flexColumns = traverseList(item, "flexColumns")
return checkType( return checkType(
@ -34,7 +40,7 @@ export default class PlaylistParser {
}, },
thumbnails: traverseList(item, "thumbnails"), thumbnails: traverseList(item, "thumbnails"),
}, },
PlaylistFull, PlaylistDetailed,
) )
} }
} }

View File

@ -59,6 +59,15 @@ export const AlbumDetailed = z.object({
thumbnails: z.array(ThumbnailFull), thumbnails: z.array(ThumbnailFull),
}) })
export type PlaylistDetailed = z.infer<typeof PlaylistDetailed>
export const PlaylistDetailed = z.object({
type: z.literal("PLAYLIST"),
playlistId: z.string(),
name: z.string(),
artist: ArtistBasic,
thumbnails: z.array(ThumbnailFull),
})
export type SongFull = z.infer<typeof SongFull> export type SongFull = z.infer<typeof SongFull>
export const SongFull = z.object({ export const SongFull = z.object({
type: z.literal("SONG"), type: z.literal("SONG"),
@ -119,6 +128,7 @@ export const PlaylistFull = z.object({
playlistId: z.string(), playlistId: z.string(),
name: z.string(), name: z.string(),
artist: ArtistBasic, artist: ArtistBasic,
videoCount: z.number(),
thumbnails: z.array(ThumbnailFull), thumbnails: z.array(ThumbnailFull),
}) })
@ -126,4 +136,4 @@ export type SearchResult = z.infer<typeof SearchResult>
export const SearchResult = SongDetailed.or(VideoDetailed) export const SearchResult = SongDetailed.or(VideoDetailed)
.or(AlbumDetailed) .or(AlbumDetailed)
.or(ArtistDetailed) .or(ArtistDetailed)
.or(PlaylistFull) .or(PlaylistDetailed)