/** * @Title: App.java * @Description: * @Copyright: Copyright (c) 2019 * @author: Su.Yuanlin * @date 2019年2月12日 * @QQ 314078331 * @Like 流水落花春去也,天上人间 */ package com.xiaoc.down_qq_music; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import com.alibaba.druid.support.json.JSONParser; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSON; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; public class App { public static final String __LIST = "list"; public static final String __SONG = "song"; public static final String __TAB = "tab"; public static final String __SINGER = "singer"; public static final String __NAME = "name"; public static final String __SONGNAME = "songname"; public static final String __SONGMID = "songmid"; public static final String __MP3_L = "mp3_l"; public static final String __MID = "mid"; public static final String QUERY_MUSIC_URL = "https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w="; public static final String DOWNURL = "http://www.douqq.com/qqmusic/qqapi.php"; public static String getSeachData(String keyWord) { String url = QUERY_MUSIC_URL + keyWord; String resultStr = HttpUtil.get(url); int begin = resultStr.indexOf(__SONG) + 6; int end = resultStr.indexOf(__TAB) - 2; return resultStr.substring(begin, end); } public static Map<Integer, String> getMusicDic(JSONArray jsonArrayData) { Map<Integer, String> sonmidMap = new HashMap<Integer, String>(); // 将音乐放入map,提供下载选择 for (int i = 0; i < jsonArrayData.size(); i++) { JSON jsonObject = JSONUtil.parse(jsonArrayData.get(i)); JSONArray jsonArray = new JSONArray(jsonObject.getByPath(__SINGER)); Object songName = JSONUtil.parse(jsonArray.get(0)).getByPath(__NAME); System.out.println(i + "---------" + jsonObject.getByPath(__SONGNAME) + "------" + songName.toString()); sonmidMap.put(i, jsonObject.getByPath(__SONGMID).toString()); } return sonmidMap; } public static String getDownLoadUrl(Map<Integer, String> musicDicMap, int order) { String post = HttpUtil.post(DOWNURL, "mid=" + musicDicMap.get(order).toString()); JSONParser jsp = new JSONParser(post); Object byPath2 = JSONUtil.parse(jsp.parse()).getByPath(__MP3_L); System.out.println(byPath2); return byPath2.toString(); } public static void main(String[] args) { System.out.print("请输入歌曲名称:"); String _keyWord = new Scanner(System.in).nextLine(); String jsonData = getSeachData(_keyWord); // System.out.println(jsonData); JSON objectJsonData = JSONUtil.parse(jsonData); Object listJsonData = objectJsonData.getByPath(__LIST); JSON listJson = JSONUtil.parse(listJsonData); JSONArray jsonArrayData = new JSONArray(listJson); Map<Integer, String> sonmidMap = getMusicDic(jsonArrayData); System.out.print("请输入歌曲编号:"); int nextInt = new Scanner(System.in).nextInt(); String downLoadUrl = getDownLoadUrl(sonmidMap, nextInt); System.out.println("请用浏览器打开,如果是H5播放页面,则点击播放页面省略号中的下载按钮即可"); System.out.println(downLoadUrl); } }