@@ -275,25 +275,14 @@ public static MusicMetaData parseMetaData(JsonObject object) {
275275 .map (JsonElement ::getAsLong )
276276 .orElseThrow ();
277277
278- List <String > authorList = optional .map (json -> json .getAsJsonArray ("authors" ))
279- .map (arr -> arr .asList ().stream ()
280- .map (JsonElement ::getAsJsonObject )
281- .map (Optional ::of )
282- .map (authorOpt -> Optionals
283- .flatFirstOf (
284- authorOpt ,
285- // getDetail 接口会再套一层 base 对象
286- json -> Optional .ofNullable (json .getAsJsonObject ("base" )),
287- Optional ::ofNullable
288- )
289- // 获取到 author_name 所在对象
290- .map (base -> base .get ("author_name" ))
291- )
292- .filter (nameElementOpt -> nameElementOpt .isPresent () && !nameElementOpt .get ().isJsonNull ())
293- .map (nameElementOpt -> nameElementOpt .get ().getAsString ())
294- .collect (Collectors .toList ())
295- )
296- .orElseThrow ();
278+ List <String > authorList = Optionals
279+ .flatFirstOf (
280+ optional ,
281+ // 先尝试从 authors 中提取
282+ KuGouMusic ::getAuthorsList ,
283+ // 再尝试从 base 中提取
284+ KuGouMusic ::getAuthorsListFromBase
285+ ).orElseThrow ();
297286
298287 String headPic = optional .map (json -> json .getAsJsonObject ("album_info" ))
299288 .map (albumInfo -> albumInfo .get ("cover" ))
@@ -310,6 +299,39 @@ public static MusicMetaData parseMetaData(JsonObject object) {
310299 }
311300 }
312301
302+ /**
303+ * 尝试从 authors 中提取作者列表, 可能有 authors 不存在的情况 (作者信息未上传)
304+ */
305+ private static Optional <List <String >> getAuthorsList (JsonObject jsonObject ) {
306+ return Optional .ofNullable (jsonObject )
307+ .map (json -> json .getAsJsonArray ("authors" ))
308+ .map (arr -> arr .asList ().stream ()
309+ .map (JsonElement ::getAsJsonObject )
310+ .map (Optional ::of )
311+ .map (authorOpt -> Optionals
312+ .flatFirstOf (
313+ authorOpt ,
314+ // getDetail 接口会再套一层 base 对象
315+ json -> Optional .ofNullable (json .getAsJsonObject ("base" )),
316+ Optional ::ofNullable
317+ )
318+ // 获取到 author_name 所在对象
319+ .map (base -> base .get ("author_name" ))
320+ )
321+ .filter (nameElementOpt -> nameElementOpt .isPresent () && !nameElementOpt .get ().isJsonNull ())
322+ .map (nameElementOpt -> nameElementOpt .get ().getAsString ())
323+ .collect (Collectors .toList ())
324+ );
325+ }
326+
327+ public static Optional <List <String >> getAuthorsListFromBase (JsonObject jsonObject ) {
328+ return Optional .ofNullable (jsonObject )
329+ .map (json -> json .getAsJsonObject ("base" ))
330+ .map (base -> base .get ("author_name" ))
331+ .map (JsonElement ::getAsString )
332+ .map (names -> Arrays .asList (names .split ("、" )));
333+ }
334+
313335 /**
314336 * 解析音乐元数据, 处理 searchMusic 和 getPlayListAllTrack 返回的 Json 对象
315337 * @param object 音乐详情 Json 对象
0 commit comments