package com.qtfreet.musicuu.musicApi.MusicService;
import com.alibaba.fastjson.JSON;
import com.qtfreet.musicuu.musicApi.MusicBean.xm.XiamiDatas;
import com.qtfreet.musicuu.musicApi.MusicBean.xm.XiamiIds;
import java.util.ArrayList;
import java.util.List;
/**
* Created by qtfreet on 2017/2/8.
*/
public class XmMusic implements IMusic {
//虾米不支持mv和无损解析
private static List<SongResult> search(String key, int page, int size) throws Exception {
String url = "http://api.xiami.com/web?v=2.0&app_key=1&key=" + key + "&page=" + page + "&limit=" + size + "&r=search/songs";
String s = NetUtil.GetHtmlWithRefer(url, "http://m.xiami.com");
if (s.isEmpty()) {
return null; //搜索歌曲失败
}
XiamiDatas xiamiDatas = JSON.parseObject(s, XiamiDatas.class);
if (xiamiDatas == null) {
return null;//没有找到符合的歌曲
}
int totalsize = xiamiDatas.getData().getTotal();
return GetListByJson(xiamiDatas.getData().getSongs());
}
private static List<SongResult> GetListByJson(List<XiamiDatas.DataBean.SongsBean> songs) throws Exception {
List<SongResult> list = new ArrayList<>();
int len = songs.size();
if (len <= 0) {
return null;
}
int i = 0;
while (i < len) {
XiamiDatas.DataBean.SongsBean songsBean = songs.get(i);
String SongId = String.valueOf(songsBean.getSong_id());
SongResult songResult = SearchSong(SongId);
if (songResult != null) {
list.add(songResult);
}
i++;
}
return list;
}
private static SongResult GetResultsByIds(String ids, int type) {
String albumUrl = "http://www.xiami.com/song/playlist/id/" + ids + "/type/" + type + "/cat/json";
String html = NetUtil.GetHtmlContent(albumUrl);
if (html.isEmpty() || html.contains("应版权方要求,没有歌曲可以播放")) {
return null;
}
try {
XiamiIds xiamiIds = JSON.parseObject(html, XiamiIds.class);
List<XiamiIds.DataBean.TrackListBean> trackList = xiamiIds.getData().getTrackList();
if (trackList == null) {
return null;
}
XiamiIds.DataBean.TrackListBean trackListBean = trackList.get(0);
SongResult song = new SongResult();
String songId = trackListBean.getSong_id();
String songName = trackListBean.getSongName();
String songLink = "http://www.xiami.com/song/" + songId;
String artistId = String.valueOf(trackListBean.getArtistId());
String artistName = trackListBean.getSingers();
String ablum = String.valueOf(trackListBean.getAlbumId());
String album = trackListBean.getAlbum_name();
String length = Util.secTotime(trackListBean.getLength());
String lyric = trackListBean.getLyric();
String picUrl = trackListBean.getPic();//此处为小图
//trackListBean.getAlbum_pic()//大图
song.setSongId(songId);
song.setSongName(songName);
song.setSongLink(songLink);
song.setArtistId(artistId);
song.setArtistName(artistName);
song.setAlbumId(ablum);
song.setAlbumName(album);
song.setLength(length);
song.setLrcUrl(lyric);
song.setPicUrl(picUrl);
List<XiamiIds.DataBean.TrackListBean.AllAudiosBean> allAudios = trackListBean.getAllAudios();
boolean hash320Kbite = false;
for (XiamiIds.DataBean.TrackListBean.AllAudiosBean allAudiosBean : allAudios) {
if (allAudiosBean.getFormat().equals("mp3")) {
if (allAudiosBean.getAudioQualityEnum().equals("HIGH")) {
hash320Kbite = true;
song.setSqUrl(allAudiosBean.getFilePath());
song.setHqUrl(allAudiosBean.getFilePath());
}
if (allAudiosBean.getAudioQualityEnum().equals("LOW")) {
song.setLqUrl(allAudiosBean.getFilePath());
}
}
}
if (hash320Kbite) {
song.setBitRate("320K");
} else {
song.setBitRate("128K");
}
song.setType("xm");
return song;
} catch (Exception ex) {
}
return null;
}
private static SongResult SearchSong(String songId) {
SongResult song = GetResultsByIds(songId, 0);
if (song == null) {
return null;
}
return song;
}
//虾米网页版mv为m3u8
// private static String GetMvUrl(String id, String quality, String format) {
// if (format == "mp4" || format == "flv") {
// String mvId;
// String html;
// if (Util.isNumber(id)) {
// String url = "http://www.xiami.com/song/" + id;
// html = NetUtil.GetHtmlContent(url);
// if (html.isEmpty()) {
// return "";
// }
// mvId = Util.RegexString("(?<=href=\" \"/mv/)\\w+(?=\" \")", html);
// } else {
// mvId = id;
// }
// if (mvId.isEmpty()) {
// return null;
// }
// html = NetUtil.GetHtmlContent("http://m.xiami.com/mv/" + mvId);
// return html.isEmpty() ? "" : Util.RegexString("(?<=<video src=\"\")[^\"\"]+(?=\"\"\\s*poster=)", html);
// }
// return "";
// }
@Override
public List<SongResult> SongSearch(String key, int page, int size) {
try {
return search(key, page, size);
} catch (Exception e) {
return null; //解析歌曲失败
}
}
}