diff --git a/src/main/java/top/baogutang/music/client/KuGouMusicClient.java b/src/main/java/top/baogutang/music/client/KuGouMusicClient.java index b8e16db..d9e8cbd 100644 --- a/src/main/java/top/baogutang/music/client/KuGouMusicClient.java +++ b/src/main/java/top/baogutang/music/client/KuGouMusicClient.java @@ -3,6 +3,7 @@ package top.baogutang.music.client; import com.fasterxml.jackson.core.type.TypeReference; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import top.baogutang.music.annos.ChannelInfo; import top.baogutang.music.dao.entity.MusicDownloadRecordEntity; import top.baogutang.music.dao.entity.MusicRecordEntity; @@ -19,6 +20,7 @@ import top.baogutang.music.utils.OkHttpUtil; import javax.annotation.Resource; import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -178,7 +180,39 @@ public class KuGouMusicClient implements ChannelClient> kuGouMusicSearchCommonRes = OkHttpUtil.get(playlistUrl, null, null, new TypeReference<>() { + }); + if (Objects.isNull(kuGouMusicSearchCommonRes) || Objects.isNull(kuGouMusicSearchCommonRes.getData())) { + return null; + } + List songs = kuGouMusicSearchCommonRes.getData().getLists().stream() + .map(s -> { + MusicPlaylistRes.Song song = new MusicPlaylistRes.Song(); + song.setId(s.getHash()); + song.setName(s.getName()); + List artists = s.getSingerList().stream() + .map(si -> { + MusicPlaylistRes.Artist artist = new MusicPlaylistRes.Artist(); + artist.setId(si.getId()); + artist.setName(si.getName()); + return artist; + }) + .collect(Collectors.toList()); + song.setAr(artists); + MusicPlaylistRes.Album album = new MusicPlaylistRes.Album(); + if (Objects.nonNull(s.getAlbum())) { + album.setId(s.getAlbum().getId()); + album.setName(s.getAlbum().getName()); + } + song.setAl(album); + return song; + }) + .collect(Collectors.toList()); + MusicPlaylistRes musicPlaylistRes = new MusicPlaylistRes(); + musicPlaylistRes.setCode(200); + musicPlaylistRes.setSongs(songs); + return musicPlaylistRes; } @Override @@ -188,12 +222,71 @@ public class KuGouMusicClient implements ChannelClient> kuGouMusicSearchCommonRes = OkHttpUtil.get(albumUrl, null, null, new TypeReference<>() { + }); + if (Objects.isNull(kuGouMusicSearchCommonRes) || Objects.isNull(kuGouMusicSearchCommonRes.getData())) { + return null; + } + List songs = kuGouMusicSearchCommonRes.getData().getSongs().stream() + .map(albumSong -> { + MusicAlbumRes.Song song = new MusicAlbumRes.Song(); + song.setId(albumSong.getAudioInfo().getHash()); + song.setName(albumSong.getBase().getAudioName()); + List artists = albumSong.getAuthors().stream() + .map(songSinger -> { + MusicAlbumRes.Artist artist = new MusicAlbumRes.Artist(); + artist.setId(songSinger.getAuthorId()); + artist.setName(songSinger.getAuthorName()); + return artist; + }) + .collect(Collectors.toList()); + song.setAr(artists); + MusicAlbumRes.Album album = new MusicAlbumRes.Album(); + album.setName(albumSong.getAlbumInfo().getAlbumName()); + song.setAl(album); + return song; + }) + .collect(Collectors.toList()); + MusicAlbumRes musicAlbumRes = new MusicAlbumRes(); + musicAlbumRes.setCode(200); + musicAlbumRes.setSongs(songs); + return musicAlbumRes; } @Override public MusicArtistRes artist(String id) { - return null; + String artistUrl = String.format(kuGouMusicProperties.getArtistBaseUrl(), id, 1); + KuGouMusicSearchCommonRes commonRes = OkHttpUtil.get(artistUrl, null, null, new TypeReference<>() { + }); + if (Objects.isNull(commonRes) || Objects.isNull(commonRes.getTotal()) || commonRes.getTotal() < 1) { + return null; + } + artistUrl = String.format(kuGouMusicProperties.getArtistBaseUrl(), id, commonRes.getTotal()); + KuGouMusicSearchCommonRes> kuGouMusicSearchCommonRes = OkHttpUtil.get(artistUrl, null, null, new TypeReference<>() { + }); + + if (Objects.isNull(kuGouMusicSearchCommonRes) || CollectionUtils.isEmpty(kuGouMusicSearchCommonRes.getData())) { + return null; + } + List songs = kuGouMusicSearchCommonRes.getData().stream() + .map(s -> { + MusicArtistRes.Song song = new MusicArtistRes.Song(); + song.setId(s.getHash()); + song.setName(s.getAudioName()); + MusicArtistRes.Artist artist = new MusicArtistRes.Artist(); + artist.setName(s.getAuthorName()); + song.setAr(Collections.singletonList(artist)); + MusicArtistRes.Album album = new MusicArtistRes.Album(); + album.setName(s.getAlbumName()); + song.setAl(album); + return song; + }) + .collect(Collectors.toList()); + MusicArtistRes musicArtistRes = new MusicArtistRes(); + musicArtistRes.setSongs(songs); + + return musicArtistRes; } @Override @@ -203,7 +296,7 @@ public class KuGouMusicClient implements ChannelClient implements Serializable { +public class KuGouMusicSearchCommonRes implements Serializable { private static final long serialVersionUID = -3851575429347578104L; + private Integer total; + private Integer status; @JsonProperty("error_code") @@ -28,6 +30,157 @@ public class KuGouMusicSearchCommonRes implements Serial private T data; + @Data + public static class ArtistSong implements Serializable { + + private static final long serialVersionUID = 3165381746779447503L; + + @JsonProperty("hash") + private String hash; + + @JsonProperty("audio_name") + private String audioName; + + @JsonProperty("author_name") + private String authorName; + + @JsonProperty("album_name") + private String albumName; + } + + @Data + public static class AlbumData implements Serializable { + + private static final long serialVersionUID = 425274258965725976L; + + @JsonProperty("total") + private Integer total; + + @JsonProperty("songs") + private List songs; + } + + @Data + public static class AlbumSong implements Serializable { + + private static final long serialVersionUID = 6916254734866228577L; + + @JsonProperty("audio_info") + private AudioInfo audioInfo; + + @JsonProperty("base") + private SongBase base; + + @JsonProperty("authors") + private List authors; + + @JsonProperty("album_info") + private AlbumInfo albumInfo; + } + + @Data + public static class AlbumInfo implements Serializable { + + private static final long serialVersionUID = 9053952278346646036L; + + @JsonProperty("album_name") + private String albumName; + } + + @Data + public static class AlbumSongAuthor implements Serializable { + + private static final long serialVersionUID = -4273434798080895649L; + + @JsonProperty("author_id") + private String authorId; + + @JsonProperty("author_name") + private String authorName; + } + + @Data + public static class SongBase implements Serializable { + + private static final long serialVersionUID = -5422843795950363408L; + + @JsonProperty("audio_name") + private String audioName; + } + + @Data + public static class AudioInfo implements Serializable { + + private static final long serialVersionUID = -4706023836553750567L; + + @JsonProperty("hash") + private String hash; + + @JsonProperty("hash_flac") + private String hashFlac; + + } + + @Data + public static class InfoData implements Serializable { + + private static final long serialVersionUID = -3855070385611292886L; + + private Integer page; + + @JsonProperty("pagesize") + private Integer pageSize; + + private Integer count; + + @JsonProperty("info") + private List lists; + } + + @Data + public static class PlayListSong implements Serializable { + + private static final long serialVersionUID = -765848606882852042L; + + @JsonProperty("hash") + private String hash; + + @JsonProperty("name") + private String name; + + @JsonProperty("albuminfo") + private PlayListSongAlbum album; + + @JsonProperty("singerinfo") + private List singerList; + + } + + @Data + public static class PlayListSongSinger implements Serializable { + + private static final long serialVersionUID = -8169846601636903186L; + + @JsonProperty("id") + private String id; + + @JsonProperty("name") + private String name; + } + + @Data + public static class PlayListSongAlbum implements Serializable { + + private static final long serialVersionUID = 2581046968055806575L; + + @JsonProperty("id") + private String id; + + @JsonProperty("name") + private String name; + } + + @Data public static class PageData implements Serializable { diff --git a/src/main/java/top/baogutang/music/domain/res/search/MusicArtistRes.java b/src/main/java/top/baogutang/music/domain/res/search/MusicArtistRes.java index 13ffb53..3d4b200 100644 --- a/src/main/java/top/baogutang/music/domain/res/search/MusicArtistRes.java +++ b/src/main/java/top/baogutang/music/domain/res/search/MusicArtistRes.java @@ -31,7 +31,7 @@ public class MusicArtistRes extends AbstractMusicRes implements Serializable { private static final long serialVersionUID = -636513450925661161L; - private long id; + private String id; private String name; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index dad2508..2fa7bed 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -61,9 +61,10 @@ baogutang: kugou-music: query-base-url: http://117.72.78.133:5177/search?keywords=%s&page=%d&pagesize=%d&type=%s - playlist-base-url: http://117.72.78.133:5175/songlist?id=%s - album-base-url: http://117.72.78.133:5175/album/songs?albummid=%s - download-base-url: http://117.72.78.133:5176/song?url=https://y.qq.com/n/ryqq/songDetail/%s + playlist-base-url: http://117.72.78.133:5177/playlist/track/all?id=%s&pagesize=200 + album-base-url: http://117.72.78.133:5177/album/songs?id=%s&pagesize=50 + artist-base-url: http://117.72.78.133:5177/artist/audios?id=%s&sort=hot&pagesize=%d + download-base-url: http://117.72.78.133:5177/song/url?hash=%s&quality=viper_clear download-path: /downloads/music # download-path: /Users/nikooh/Desktop/downloads/music