@@ -259,6 +259,10 @@ final class YTMusicClient: YTMusicClientProtocol {
259259 static let albums = " EgWKAQIYAWoMEA4QChADEAQQCRAF "
260260 static let artists = " EgWKAQIgAWoMEA4QChADEAQQCRAF "
261261 static let playlists = " EgWKAQIoAWoMEA4QChADEAQQCRAF "
262+ /// Featured playlists (first-party YouTube Music curated playlists)
263+ static let featuredPlaylists = " EgeKAQQoADgBagwQDhAKEAMQBBAJEAU= "
264+ /// Community playlists (user-created playlists)
265+ static let communityPlaylists = " EgeKAQQoAEABagwQDhAKEAMQBBAJEAU= "
262266 }
263267
264268 /// Continuation token for filtered search pagination.
@@ -320,6 +324,40 @@ final class YTMusicClient: YTMusicClientProtocol {
320324 return SearchResponse ( songs: [ ] , albums: [ ] , artists: [ ] , playlists: playlists, continuationToken: token)
321325 }
322326
327+ /// Searches for featured playlists only (YouTube Music curated playlists).
328+ func searchFeaturedPlaylists( query: String ) async throws -> SearchResponse {
329+ self . logger. info ( " Searching featured playlists only for: \( query) " )
330+
331+ let body : [ String : Any ] = [
332+ " query " : query,
333+ " params " : SearchFilterParams . featuredPlaylists,
334+ ]
335+
336+ let data = try await request ( " search " , body: body, ttl: APICache . TTL. search)
337+ let ( playlists, token) = SearchResponseParser . parsePlaylistsOnly ( data)
338+ self . searchContinuationToken = token
339+
340+ self . logger. info ( " Featured playlists search found \( playlists. count) playlists, hasMore: \( token != nil ) " )
341+ return SearchResponse ( songs: [ ] , albums: [ ] , artists: [ ] , playlists: playlists, continuationToken: token)
342+ }
343+
344+ /// Searches for community playlists only (user-created playlists).
345+ func searchCommunityPlaylists( query: String ) async throws -> SearchResponse {
346+ self . logger. info ( " Searching community playlists only for: \( query) " )
347+
348+ let body : [ String : Any ] = [
349+ " query " : query,
350+ " params " : SearchFilterParams . communityPlaylists,
351+ ]
352+
353+ let data = try await request ( " search " , body: body, ttl: APICache . TTL. search)
354+ let ( playlists, token) = SearchResponseParser . parsePlaylistsOnly ( data)
355+ self . searchContinuationToken = token
356+
357+ self . logger. info ( " Community playlists search found \( playlists. count) playlists, hasMore: \( token != nil ) " )
358+ return SearchResponse ( songs: [ ] , albums: [ ] , artists: [ ] , playlists: playlists, continuationToken: token)
359+ }
360+
323361 /// Searches for songs only with pagination support.
324362 func searchSongsWithPagination( query: String ) async throws -> SearchResponse {
325363 self . logger. info ( " Searching songs with pagination for: \( query) " )
0 commit comments