@@ -30,7 +30,13 @@ internal partial class SearchResponse(JsonElement content)
3030 ContentRoot
3131 ? . EnumerateDescendantProperties ( "lockupViewModel" )
3232 . Select ( j => new PlaylistData ( j ) )
33- . ToArray ( ) ?? [ ] ;
33+ . ToArray ( )
34+ // fall back to older working paths
35+ ?? ContentRoot
36+ ? . EnumerateDescendantProperties ( "playlistRenderer" )
37+ . Select ( j => new PlaylistData ( j ) )
38+ . ToArray ( )
39+ ?? [ ] ;
3440
3541 [ Lazy ]
3642 public IReadOnlyList < ChannelData > Channels =>
@@ -129,13 +135,27 @@ internal partial class SearchResponse
129135 public class PlaylistData ( JsonElement content )
130136 {
131137 [ Lazy ]
132- public string ? Id => content . GetPropertyOrNull ( "contentId" ) ? . GetStringOrNull ( ) ;
138+ public string ? Id =>
139+ content . GetPropertyOrNull ( "contentId" ) ? . GetStringOrNull ( )
140+ // fall back to older working paths
141+ ?? content . GetPropertyOrNull ( "playlistId" ) ? . GetStringOrNull ( ) ;
133142
134143 [ Lazy ]
135- private JsonElement ? Metadata => content . GetPropertyOrNull ( "metadata" ) ? . GetPropertyOrNull ( "lockupMetadataViewModel" ) ;
144+ private JsonElement ? Metadata =>
145+ content . GetPropertyOrNull ( "metadata" ) ? . GetPropertyOrNull ( "lockupMetadataViewModel" ) ;
136146
137147 [ Lazy ]
138- public string ? Title => Metadata ? . GetPropertyOrNull ( "title" ) ? . GetPropertyOrNull ( "content" ) ? . GetStringOrNull ( ) ;
148+ public string ? Title =>
149+ Metadata ? . GetPropertyOrNull ( "title" ) ? . GetPropertyOrNull ( "content" ) ? . GetStringOrNull ( )
150+ // fall back to older working paths
151+ ?? content . GetPropertyOrNull ( "title" ) ? . GetPropertyOrNull ( "simpleText" ) ? . GetStringOrNull ( )
152+ ?? content
153+ . GetPropertyOrNull ( "title" )
154+ ? . GetPropertyOrNull ( "runs" )
155+ ? . EnumerateArrayOrNull ( )
156+ ? . Select ( j => j . GetPropertyOrNull ( "text" ) ? . GetStringOrNull ( ) )
157+ . WhereNotNull ( )
158+ . ConcatToString ( ) ;
139159
140160 [ Lazy ]
141161 private JsonElement ? AuthorDetails =>
@@ -144,10 +164,19 @@ public class PlaylistData(JsonElement content)
144164 ? . ElementAtOrNull ( 0 )
145165 ? . EnumerateArrayOrNull ( )
146166 ? . ElementAtOrNull ( 0 )
147- ? . GetPropertyOrNull ( "text" ) ;
167+ ? . GetPropertyOrNull ( "text" )
168+ // fall back to older working paths
169+ ?? content
170+ . GetPropertyOrNull ( "longBylineText" )
171+ ? . GetPropertyOrNull ( "runs" )
172+ ? . EnumerateArrayOrNull ( )
173+ ? . ElementAtOrNull ( 0 ) ;
148174
149175 [ Lazy ]
150- public string ? Author => AuthorDetails ? . GetPropertyOrNull ( "content" ) ? . GetStringOrNull ( ) ;
176+ public string ? Author =>
177+ AuthorDetails ? . GetPropertyOrNull ( "content" ) ? . GetStringOrNull ( )
178+ // fall back to older working paths
179+ ?? AuthorDetails ? . GetPropertyOrNull ( "text" ) ? . GetStringOrNull ( ) ;
151180
152181 [ Lazy ]
153182 public string ? ChannelId =>
@@ -159,6 +188,12 @@ public class PlaylistData(JsonElement content)
159188 ? . GetPropertyOrNull ( "innertubeCommand" )
160189 ? . GetPropertyOrNull ( "browseEndpoint" )
161190 ? . GetPropertyOrNull ( "browseId" )
191+ ? . GetStringOrNull ( )
192+ // fall back to older working paths
193+ ?? AuthorDetails
194+ ? . GetPropertyOrNull ( "navigationEndpoint" )
195+ ? . GetPropertyOrNull ( "browseEndpoint" )
196+ ? . GetPropertyOrNull ( "browseId" )
162197 ? . GetStringOrNull ( ) ;
163198
164199 [ Lazy ]
@@ -172,7 +207,15 @@ public class PlaylistData(JsonElement content)
172207 ? . GetPropertyOrNull ( "sources" )
173208 ? . EnumerateArrayOrEmpty ( )
174209 . Select ( j => new ThumbnailData ( j ) )
175- . ToArray ( ) ?? [ ] ;
210+ . ToArray ( )
211+ // fall back to older working paths
212+ ?? content
213+ . GetPropertyOrNull ( "thumbnails" )
214+ ? . EnumerateDescendantProperties ( "thumbnails" )
215+ . SelectMany ( j => j . EnumerateArrayOrEmpty ( ) )
216+ . Select ( j => new ThumbnailData ( j ) )
217+ . ToArray ( )
218+ ?? [ ] ;
176219 }
177220}
178221
0 commit comments