添加延迟

This commit is contained in:
weiyachao 2023-10-06 16:56:53 +08:00
parent c62c38f5ad
commit 0cd03acb9d

View File

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.qiuguo.iot.third.resp.SingerResponse;
import com.qiuguo.iot.third.resp.SingerSongsResponse;
import com.qiuguo.iot.third.resp.SongInfoResponse;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -19,6 +20,7 @@ import org.springframework.util.ObjectUtils;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
import com.qiuguo.iot.third.resp.SearchResponse;
import reactor.core.scheduler.Schedulers;
import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;
@ -47,26 +49,29 @@ public class MusicService {
if (ObjectUtils.isEmpty(keyword)) {
keyword = "追梦赤子心";
}
WebClient build = WebClient.builder()
WebClient webClient = WebClient.builder()
.defaultHeader("Content-Type", "application/json; charset=utf-8")
.defaultHeader("User-Agent","PostmanRuntime/7.29.0")
.defaultHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS")
.defaultHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type")
.defaultHeader("Accept-Encoding", "gzip, deflate, br")
.defaultHeader("Connection", "keep-alive")
.defaultHeader("Accept", "*")
.defaultHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36")
.build();
String baseUrl = "http://121.40.172.241:8031";
if (type == 1) {
return build.get().uri(baseUrl+"/search?keywords="+keyword+"&limit=10"+"&timestamp="+System.currentTimeMillis()).retrieve()
.bodyToMono(SearchResponse.class).flatMap(res -> {
return webClient.get().uri(baseUrl+"/search?keywords="+keyword).retrieve()
.bodyToMono(SearchResponse.class)
.delaySubscription(Duration.ofMillis(300), Schedulers.boundedElastic())
.flatMap(res -> {
if (!Objects.equals(res.getCode(), 200)) {
return Mono.empty();
}
String ids = res.getResult().getSongs().stream().map(SearchResponse.Song::getId)
String ids = res.getResult().getSongs().stream().map(SearchResponse.Song::getId).limit(3)
.collect(Collectors.joining(","));
Map<String,SearchResponse.Song > songMap = res.getResult().getSongs().stream()
.collect(Collectors.toMap(SearchResponse.Song::getId, Function.identity()));
return build.get().uri(baseUrl+"/song/url?id="+ids+"&timestamp="+System.currentTimeMillis()).retrieve()
return webClient.get().uri(baseUrl+"/song/url/v1?id="+ids).retrieve()
.bodyToMono(SongInfoResponse.class).flatMap(song -> {
if (Objects.equals(200, song.getCode()) && song.getData().size() > 0) {
List<SongInfoResponse.ResultSong> data = song.getData();
@ -82,21 +87,25 @@ public class MusicService {
});
});
} else {
return build.get().uri(baseUrl+"/search?keywords="+keyword+"&type=100"+"&timestamp="+System.currentTimeMillis()).retrieve()
.bodyToMono(SingerResponse.class).flatMap(res -> {
return webClient.get().uri(baseUrl+"/search?keywords="+keyword+"&type=100").retrieve()
.bodyToMono(SingerResponse.class)
.delaySubscription(Duration.ofMillis(300), Schedulers.boundedElastic())
.flatMap(res -> {
if (!Objects.equals(res.getCode(), 200) && res.getResult().getArtists().size() == 0) {
return Mono.empty();
}
String id = res.getResult().getArtists().get(0).getId();
return build.get().uri(baseUrl+"/artist/top/song?id="+id+"&timestamp="+System.currentTimeMillis()).retrieve()
.bodyToMono(SingerSongsResponse.class).flatMap(song -> {
return webClient.get().uri(baseUrl+"/artist/top/song?id="+id).retrieve()
.bodyToMono(SingerSongsResponse.class)
.delaySubscription(Duration.ofMillis(300), Schedulers.boundedElastic())
.flatMap(song -> {
if (Objects.equals(200, song.getCode()) && song.getSongs().size() > 0) {
String ids = song.getSongs().stream().limit(10)
String ids = song.getSongs().stream().limit(3)
.map(SingerSongsResponse.Song::getId).collect(Collectors.joining(","));
Map<String, SingerSongsResponse.Song> songMap = song.getSongs().stream()
.collect(Collectors.toMap(SingerSongsResponse.Song::getId,
Function.identity()));
return build.get().uri(baseUrl+"/song/url?id="+ids+"&timestamp="+System.currentTimeMillis()).retrieve()
return webClient.get().uri(baseUrl+"/song/url/v1?id="+ids).retrieve()
.bodyToMono(SongInfoResponse.class).flatMap(so -> {
if (Objects.equals(200, song.getCode())
&& so.getData().size() > 0) {