diff --git a/pom.xml b/pom.xml
index 601b2ae..fed2072 100644
--- a/pom.xml
+++ b/pom.xml
@@ -394,6 +394,11 @@
5.3.25
+
+ org.bouncycastle
+ bcprov-jdk16
+ 1.46
+
diff --git a/src/main/java/com/zhangmeng/tools/controller/MusicDownloadController.java b/src/main/java/com/zhangmeng/tools/controller/MusicDownloadController.java
index 08f8119..196d0b0 100644
--- a/src/main/java/com/zhangmeng/tools/controller/MusicDownloadController.java
+++ b/src/main/java/com/zhangmeng/tools/controller/MusicDownloadController.java
@@ -2,6 +2,7 @@ package com.zhangmeng.tools.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.UUID;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
@@ -13,12 +14,17 @@ import com.zhangmeng.tools.music.kugou.KuGouMusic;
import com.zhangmeng.tools.music.kuwo.DownLoadInfo;
import com.zhangmeng.tools.music.kuwo.DownLoadURL;
import com.zhangmeng.tools.music.kuwo.SearchByKey;
+import com.zhangmeng.tools.music.migu.MiGuMusic;
+import com.zhangmeng.tools.music.migu.SwitchType;
+import com.zhangmeng.tools.music.qianqian.QianQianMusic;
import com.zhangmeng.tools.music.qq.QQMusic;
import com.zhangmeng.tools.music.qq.QqEncrypt;
import com.zhangmeng.tools.music.qq.QqQuery;
import com.zhangmeng.tools.music.wangyiyun.Song;
import com.zhangmeng.tools.music.wangyiyun.WangYiYunMusic;
import com.zhangmeng.tools.utils.AlertUtils;
+import com.zhangmeng.tools.utils.EncryptUtils;
+import io.netty.util.internal.StringUtil;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
@@ -29,29 +35,32 @@ import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.digest.Md5Crypt;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
+import javax.script.Invocable;
+import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
+import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.security.MessageDigest;
import java.sql.Blob;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
import static com.zhangmeng.tools.music.qq.RequestModule.apiServer;
import static com.zhangmeng.tools.music.qq.RequestModule.headerMap;
@@ -93,7 +102,7 @@ public class MusicDownloadController {
@FXML
public TextField name;
- private SimpleIntegerProperty index = new SimpleIntegerProperty(0);
+ private final SimpleIntegerProperty index = new SimpleIntegerProperty(0);
public static final String ku_wo_vip_api = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?pn=1&rn=30&httpsStatus=1&reqId=a3d144b0-9570-11ed-9918-83c8c32b357d&key=";
@@ -104,6 +113,10 @@ public class MusicDownloadController {
public static RestTemplate restTemplate;
+ @FXML
+ public Button downloading;
+
+
@FXML
public void initialize() {
wangyiyun_music_init();
@@ -119,7 +132,7 @@ public class MusicDownloadController {
@Override
public void changed(ObservableValue extends Tab> observable, Tab oldValue, Tab newValue) {
byte[] bytes = newValue.getText().getBytes(Charset.forName("GBk"));
- String text = new String(bytes,StandardCharsets.UTF_8);
+ String text = new String(bytes, StandardCharsets.UTF_8);
System.out.println(text);
}
});
@@ -140,50 +153,130 @@ public class MusicDownloadController {
String title = name.getText();
switch (index.get()) {
case 0 -> set(wangyiyun_music_table_view, get_wangyiyun_song_info(title));
- case 1 -> set(QQ_music_table_view,get_qq_song_info(title));
- case 2 -> set(kugou_music_table_view,get_ku_gou_info(title));
- case 3 -> set(kuwo_music_table_view,get_kuwo_song_info(title));
-// case 4 -> set(migu_music_table_view);
-// case 5 -> set(qianqian_music_table_view);
+ case 1 -> set(QQ_music_table_view, get_qq_song_info(title));
+ case 2 -> set(kugou_music_table_view, get_ku_gou_info(title));
+ case 3 -> set(kuwo_music_table_view, get_kuwo_song_info(title));
+ case 4 -> set(migu_music_table_view, get_migu_song_info(title));
+ case 5 -> set(qianqian_music_table_view,get_qianqian_music_info(title));
}
});
+ downloading.setOnAction(event -> {
+ download_song();
+ });
}
- public ObservableList get_ku_gou_info(String title){
- ScriptEngineManager manager = new ScriptEngineManager();
+ private ObservableList get_qianqian_music_info(String title) {
+ String api = "https://music.91q.com/v1/search?word=" + title+ "&pageNo=1&type=1×tamp=1682223843&appid=16073360&sign=36fa85caedcd22f0f46ba834679537df";
+ String json = HttpRequest.get(api).timeout(20000).execute().body();
+ QianQianMusic qianQianMusic = JSON.parseObject(json, QianQianMusic.class);
+ ObservableList list = FXCollections.observableArrayList();
+ List results = qianQianMusic.getData().getTypeTrack();
+ int id = 1;
+ for (QianQianMusic.DataBean.TypeTrackBean resList : results) {
+ SongInfo songInfo = new SongInfo();
+ songInfo.setName(resList.getTitle());
+ songInfo.setArtist(resList.getArtist().get(0).getName());
+ songInfo.setAlbum(resList.getAlbumTitle());
+ songInfo.setId(id);
+ id++;
+ list.add(songInfo);
+ }
+ return list;
+ }
+ public ObservableList get_migu_song_info(String title) {
+// Map map = new HashMap<>();
+// map.put("song", 1);
+// String searchSwitch = map.toString();
+// String sid = (uuid() + uuid()).replace("-", "");
+// String url = "";
+// String target_url = "https://jadeite.migu.cn/music_search/v2/search/searchAll?sid=" + sid + "&isCorrect=1&isCopyright=1&searchSwitch=" + encode(searchSwitch) + "&pageSize=20&text=" + encode(title) + "&pageNo=1&feature=1000000000&sort=1";
+// String deviceId = EncryptUtils.md5(uuid().replace("-", "")).toUpperCase();
+// long timestamp = new Date().getTime();
+// String signature_md5 = "6cdc72a439cef99a3418d2a78aa28c73"; // app绛惧悕璇佷功鐨刴d5
+// String text = title + signature_md5 + "yyapp2d16148780a1dcc7408e06336b98cfd50" + deviceId + timestamp;
+// String sign = EncryptUtils.md5(text);
+//
+// Map headers = new HashMap<>();
+// headers.put("appId", "yyapp2");
+// headers.put("uiVersion", "A_music_3.3.0");
+// headers.put("version", "7.0.4");
+// headers.put("deviceId", deviceId);
+// headers.put("sign", sign);
+// headers.put("timestamp", timestamp);
+ SwitchType switchType = SwitchType.getSwitchType();
+ Map map = new HashMap<>();
+ map.put("feature","1111000000");
+ map.put("isCopyright",1);
+ map.put("isCorrect",1);
+ map.put("pageIndex",1);
+ map.put("pageSize",20);
+ map.put("searchSwitch",JSON.toJSONString(switchType));
+ map.put("sort",0);
+ map.put("text",title);
+ map.put("uiVersion","I_music_3.0.2");
+
+ String target_url = "http://jadeite.migu.cn:7090/music_search/v2/search/searchAll";
+ String json = HttpRequest.get(target_url)
+ .form(map).timeout(20000).execute().body();
+
+ MiGuMusic miGuMusic = JSON.parseObject(json, MiGuMusic.class);
+ ObservableList list = FXCollections.observableArrayList();
+ List results = miGuMusic.getSongResultData().getResult();
+ int id = 1;
+ for (MiGuMusic.Result resList : results) {
+ SongInfo songInfo = new SongInfo();
+ songInfo.setName(resList.getSongName());
+ songInfo.setArtist(resList.getSinger());
+ songInfo.setAlbum(resList.getAlbum());
+ songInfo.setId(id);
+ id++;
+ list.add(songInfo);
+ }
+ return list;
+ }
+
+ public String uuid() {
+ return UUID.randomUUID().toString();
+ }
+
+ public String encode(String url) {
+ return java.net.URLEncoder.encode(url, StandardCharsets.UTF_8);
+ }
+
+ public ObservableList get_ku_gou_info(String title) {
String api = "https://songsearch.kugou.com/song_search_v2";
ObservableList list = FXCollections.observableArrayList();
HashMap paramMap = new HashMap<>();
paramMap.put("keyword", title);
paramMap.put("page", 1);
- String result3= HttpUtil.get(api, paramMap);
+ String result3 = HttpUtil.get(api, paramMap);
KuGouMusic kuGouMusic = JSON.parseObject(result3, KuGouMusic.class);
- if (kuGouMusic.getData() != null){
+ if (kuGouMusic.getData() != null) {
List lists = kuGouMusic.getData().getLists();
int id = 1;
for (KuGouMusic.ResList resList : lists) {
SongInfo songInfo = new SongInfo();
- songInfo.setName( resList.getSongName());
+ songInfo.setName(resList.getSongName());
songInfo.setArtist(resList.getSingerName());
songInfo.setAlbum(resList.getAlbumName());
songInfo.setId(id);
- id ++;
+ id++;
list.add(songInfo);
}
}
return list;
}
- public ObservableList get_kuwo_song_info(String title){
+ public ObservableList get_kuwo_song_info(String title) {
ObservableList list = FXCollections.observableArrayList();
List lists = request_api(title);
- int i = 0 ;
+ int i = 0;
for (SongInfo listBean : lists) {
- i = i + 1 ;
+ i = i + 1;
listBean.setId(i);
list.add(listBean);
}
@@ -199,7 +292,7 @@ public class MusicDownloadController {
// }
}
- public static List request_api(String key) {
+ public static List request_api(String key) {
String headers_json_path = MusicDownloadController.class.getClassLoader().getResource("headers.json").toExternalForm();
try {
List list = FileUtil.readLines(new URL(headers_json_path), StandardCharsets.UTF_8);
@@ -214,11 +307,11 @@ public class MusicDownloadController {
}
HttpEntity