public static string GetSongName(DownloadSettings downSetting, SongResult songResult) { if (downSetting.EnableUserSetting) { return(downSetting.UserName.Replace("%ARTIST%", songResult.ArtistName) .Replace("%INDEX%", songResult.TrackNum.ToString()).Replace("%SONG%", songResult.SongName) .Replace("%DISC%", songResult.Disc.ToString())); } switch (downSetting.NameSelect) { case 0: return(songResult.SongName); case 1: if (string.IsNullOrEmpty(songResult.ArtistName)) { return(songResult.SongName); } return(songResult.ArtistName + " - " + songResult.SongName); case 2: if (string.IsNullOrEmpty(songResult.ArtistName)) { return(songResult.SongName); } return(songResult.SongName + " - " + songResult.ArtistName); default: if (songResult.TrackNum < 0) { return(songResult.SongName); } return(songResult.TrackNum.ToString().PadLeft(2, '0') + " - " + songResult.SongName); } }
private static void PrintSongResult(SongResult songResult) { foreach (var item in songResult.Songs) { Console.WriteLine("Id: {0} Song: {1} Album: {2} Artist: {3}", item.ArtistId, item.TrackCensoredName, item.CollectionName, item.ArtistName); } }
//http://audiojungle.net/search?term=Tears&page=2 public static List<SongResult> GetResultsByKey(string key,int page) { var url = "http://audiojungle.net/search?term=" + key + "&page=" + page; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var matches = Regex.Matches(html, @"(?<=<li\s*data-item-id="")(\d+)(?:[\s\S]+?<img[\s\S]+?src="")([^""]+)(?:""[\s\S]+?tsunami-item__title"">\s*<a href=""[^""]+"">)([^<]+)(?:</a>\s* </h3>[\s\S]+?author-link"">)([^<]+)(?:</a>[\s\S]+?data-file="")([^""]+)(?="")"); var list = new List<SongResult>(); foreach (Match match in matches) { var song = new SongResult() { SongId = match.Groups[1].Value, PicUrl = match.Groups[2].Value, Name = match.Groups[3].Value, Artist = match.Groups[4].Value, AlbumArtist = match.Groups[4].Value, LqUrl = match.Groups[5].Value, ExtHqUrl = match.Groups[5].Value, HqUrl = match.Groups[5].Value, Type = "AJ", AlbumId = "5211314" }; list.Add(song); } return list; }
public static string GetSongPath(DownloadSettings downSetting, SongResult songResult) { if (downSetting.EnableUserSetting) { var path = downSetting.UserFolder.Replace("%ARTIST%", songResult.ArtistName) .Replace("%INDEX%", songResult.TrackNum.ToString()).Replace("%SONG%", songResult.SongName) .Replace("%DISC%", songResult.Disc.ToString()); if (!string.IsNullOrEmpty(songResult.Year) && songResult.Year.Length >= 4) { path = path.Replace("%YEAR%", songResult.Year.Substring(0, 4)); } return(path); } switch (downSetting.FolderSelect) { case 0: return(""); case 1: return(songResult.ArtistName); case 2: return(songResult.AlbumName); default: return(songResult.ArtistName + "/" + songResult.AlbumName); } }
public static List<SongResult> GetResultsByKey(string key, int page) { key = Regex.Replace(key, @"[\W]+", "+"); var url = "http://mp3pm.com/s/f/" + key + "/page/" + page + "/"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var matches = Regex.Matches(html, @"(?<=data-sound-author"">)([^<]+?)(?:<[\s\S]+?data-sound-title"">)([^<]+?)(?:<[\s\S]+?data-sound-id="")(\d+)(?:""\s*data-sound-url="")([^""]+?)(?="")"); var list = new List<SongResult>(); foreach (Match match in matches) { var song = new SongResult() { SongId = match.Groups[3].Value, Name = match.Groups[2].Value, Artist = match.Groups[1].Value, AlbumArtist = match.Groups[1].Value, LqUrl = match.Groups[4].Value, ExtHqUrl = match.Groups[4].Value, HqUrl = match.Groups[4].Value, Type = "MP3PM", AlbumId = "5211314" }; list.Add(song); } return list; }
public static SongResult GetEchoUrl(string id) { var url = "http://echosystem.kibey.com/sound/info?android_v=66&app_channel=qvideo&sound_id=" + id; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var json = (JObject) JsonConvert.DeserializeObject(html); if (json["message"].ToString() != "success") { return null; } var song = new SongResult() { SongId = json["result"]["id"].ToString(), Name = json["result"]["name"].ToString(), CopyUrl = json["result"]["source"].ToString(), LqUrl = json["result"]["source"].ToString(), HqUrl = json["result"]["source"].ToString(), ExtHqUrl = json["result"]["source"].ToString(), PicUrl = json["result"]["pic"].ToString(), Type = "echo" }; return song; }
private SongResult CreateLinksForSong(SongResult song) { song.Links.Add(new Link(Url.Link("GetSong", new { songbookId = song.SongbookId, id = song.Id }), "self", "GET")); song.Links.Add(new Link(Url.Link("DeleteSong", new { songbookId = song.SongbookId, id = song.Id }), "delete_song", "DELETE")); return(song); }
public static List<SongResult> GetResultsByKey(string key, int page) { var url = "http://v5.pc.duomi.com/search-ajaxsearch-searchall?kw=" + key + "&pi=" + page +"&pz=20"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var json = (JObject)JsonConvert.DeserializeObject(html.Trim('(', ')')); if (Convert.ToInt32(json["total_tracks"]) <= 0) { return null; } var list = new List<SongResult>(); var songs = json["tracks"]; foreach (JToken song in songs) { var single = new SongResult() { SongId = song["id"].ToString(), Name = song["title"].ToString(), Artist = song["artists"][0]["name"].ToString(), AlbumArtist = song["artists"][0]["name"].ToString(), Album = song["album"]["name"].ToString(), AlbumId = song["album"]["id"].ToString(), PicUrl = "http://photo.cdn.duomi.com/imageproxy2/dimgm/scaleImage?url=http://img.kxting.cn/" + song["album"]["cover"] + "&w=1500&h=1500&s=100&c=0&o=0&m=", BitRate = song["medias"][0]["bitrate"] +"K" }; single.Type = "Duomi"; single.CopyUrl = "http://www.musicuu.com/songurl/dm^320^" + single.SongId + ".mp3"; list.Add(single); } return list; }
private static void GetSongDetials(SongResult song) { var url = "http://www.xiami.com/app/xiating/album?spm=0.0.0.0.L6k2wP&id=" + song.AlbumId + "&uid=0"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return; } var match = Regex.Match(html, @"(?<=h1 title="")([^""]+)(?:""[\s\S]+?p class="")([^""]*)(?:""[\s\S]+detail_songer"">)([^<]+)(?:</a>[\s\S]+?<em>)([^<]+)(?:</em>[\s\S]+?<em>)([^<]+)(?:</em>[\s\S]+?<em>)([^<]+)(?:</em>[\s\S]+?<em>)([^<]+)(?:</em>)"); if (match.Length <= 0) { return; } song.AlbumName = match.Groups[1].Value; song.AlbumSubName = match.Groups[2].Value; song.AlbumArtist = match.Groups[3].Value; song.Language = match.Groups[4].Value; song.Company = match.Groups[5].Value; song.Year = match.Groups[6].Value.Replace("年", "-").Replace("月", "-").Replace("日", ""); var discs = Regex.Matches(html, @"(?<=<ul class=""playlist)[\s\S]+?(?=</ul>)"); for (int i = 0; i < discs.Count; i++) { match = Regex.Match(discs[i].Value, @"(?<=rel=""" + song.SongId + @"""[\s\S]+?list_index"">)\d+(?=[\s\S]+?id=" + song.SongId + ")"); if (!string.IsNullOrEmpty(match.Value)) { song.TrackNum = Convert.ToInt32(match.Value); song.Disc = i + 1; } } }
public static List<SongResult> GetSearchResult(string key,int page) { var url = "http://search.5sing.kugou.com/home/json?keyword=" + key + "&type=0&filter=0&sort=0&page=" + page + "&callback=succes"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var json = (JObject) JsonConvert.DeserializeObject(html); if (json["pageInfo"]["totalCount"].ToString() == "0") { return null; } var js = json["list"]; var list = new List<SongResult>(); foreach (JToken jToken in js) { var song = new SongResult { SongId = jToken["songId"].ToString(), Name = jToken["originalName"].ToString(), AlbumArtist = jToken["originSinger"].ToString(), Artist = jToken["originSinger"].ToString(), Type = "fs" }; song.CopyUrl = song.HqUrl = song.LqUrl = song.ExtHqUrl = "http://musicuu.com/songurl/fs^"+jToken["typeEname"] +"^"+song.SongId+".mp3"; song.PicUrl = "http://musicuu.com/songurl/fs^" + jToken["typeEname"] + "^" + song.SongId + ".jpg"; list.Add(song); } return list; }
async Task IJukeboxLogic.AddSongToListAsync(SongResult song) { SongsToPlay.Add(song); if (SongsToPlay.Count == 1) { _currentSong = _dats.GetSong(song.ID); await _currentSong.PlayNewSongAsync(0); } }
private static List<SongResult> GetListByJson(IEnumerable<JToken> jsons) { var list = new List<SongResult>(); foreach (var json in jsons) { try { var song = new SongResult { Name = XiamiMusic.CheckIsInValidate(json["name"].ToString()), SongId = json["id"].ToString(), Artist = XiamiMusic.CheckIsInValidate(json["artists"][0]["name"].ToString()), Album = XiamiMusic.CheckIsInValidate(json["album"]["name"].ToString()), AlbumId = json["album"]["id"].ToString(), AlbumArtist = XiamiMusic.CheckIsInValidate(json["album"]["artists"][0]["name"].ToString()), Company = XiamiMusic.CheckIsInValidate(json["album"]["company"].ToString()), Year = ConvertIntDateTime(Convert.ToDouble(json["album"]["publishTime"])).ToString("yyyy年MM月dd日"), PicUrl = json["album"]["picUrl"].ToString(), LqUrl = json["mp3Url"].ToString(), Time = json["duration"].ToString(), Type = "NetEase" }; try { song.TrackNum = json["position"].ToString().PadLeft(2, '0'); } catch (Exception ex) { Console.Write(ex.ToString()); } var hqUrl = GetHqUrl(json); if (string.IsNullOrEmpty(hqUrl)) { song.HqUrl = song.LqUrl; song.BitRate = "160K"; } else { song.HqUrl = hqUrl; song.BitRate = "320K"; } song.HqUrl = hqUrl; song.CopyUrl = "http://www.musicuu.com/songurl/wy^320^" + song.SongId + ".mp3"; list.Add(song); } catch (Exception ex) { Console.Write(ex.ToString()); } } return list; }
private SongResult FindBestMatchBetweenTwo(MusicBeeSong song, SongResult a, SongResult b) { int aMatches = NumberOfMatches(song, a); int bMatches = NumberOfMatches(song, b); if (aMatches == 0 && bMatches == 0) { return(null); } // Prefer the YTM tracks over uploads if there is a tie return(aMatches >= bMatches ? a : b); }
private int NumberOfMatches(MusicBeeSong song, SongResult songResult) { if (songResult == null) { return(0); } bool titleMatches = song.Title.ToLower() == songResult.Title.ToLower(); bool artistMatches = songResult.Artists.Exists(x => x.Name.ToLower() == song.Artist.ToLower()); bool albumMatches = song.Album.ToLower() == songResult.Album.Name.ToLower(); return((titleMatches ? 1 : 0) + (artistMatches ? 1 : 0) + (albumMatches ? 1 : 0)); }
async Task IJukeboxLogic.RemoveSongFromListAsync(SongResult song) { if (_currentSong == null) { throw new BasicBlankException("I think there should be a current song if removing song. If I am wrong, rethink"); } int id = song.ID; if (id == _currentSong.ID) { await NextSongAsync(); //hopefully this works. return; } SongsToPlay.RemoveSpecificItem(song); }
public static List<SongResult> GetResultsByKey(string key, int page) { var url = "http://www.118100.cn/v5/action/secweborder/v3/searchall.do?keywords="+key+"&tpye=1&pageCount="+page; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var list = new List<SongResult>(); var ids = Regex.Matches(html, @"(?<=type=""checkbox"" value="")\d+(?="")"); foreach (Match id in ids) { html = CommonHelper.GetHtmlContent("http://www.118100.cn/v5/action/secweborder/v3/songsdata.do?songId="+id.Value+"&it=1"); var json = (JObject) JsonConvert.DeserializeObject(html); try { var single = new SongResult { SongId = id.Value, Name = json["songName"].ToString(), Artist = json["singerName"].ToString(), AlbumArtist = json["singerName"].ToString(), Album = json["album"].ToString(), AlbumId = json["singerId"].ToString(), Type = "IMusic", BitRate = "320K", PicUrl = json["singerPic"].ToString().Replace("95x95", "500x500"), LqUrl = Encoding.Default.GetString(Convert.FromBase64String(json["zhengAddr"].ToString().Replace("imusic://",""))).Trim('A','Z'), HqUrl = Encoding.Default.GetString(Convert.FromBase64String(json["ququAddr"].ToString().Replace("imusic://", ""))).Trim('A', 'Z'), ExtHqUrl = Encoding.Default.GetString(Convert.FromBase64String(json["ququAddr"].ToString().Replace("imusic://", ""))).Trim('A', 'Z') }; single.LrcUrl = "http://www.118100.cn/v5/action/common/lrcOutput.do?songName=" + single.Name + "&singerName=" + single.Artist + "&type=lrc"; single.CopyUrl = "http://www.musicuu.com/songurl/dx^320^" + single.SongId + ".mp3"; list.Add(single); } catch (Exception exception) { Console.Write(exception.ToString()); } } return list; }
/// <summary> /// 根据艺术家和歌名得到歌曲信息 /// 用于获取虾米付费歌曲 /// </summary> /// <param name="ar">艺术家</param> /// <param name="name">歌名</param> /// <returns></returns> public static SongResult GetXmSqUrl(string ar, string name) { var key = ar + " - " + name; var list = Search(key, 1, 20); if (list == null) { return(null); } if (list.Songs.Count <= 0) { return(null); } var songs = list.Songs.Where(s => (s.SongName == name) && (s.ArtistName == ar)).ToList(); var song = new SongResult(); if (songs.Count <= 0) { decimal max = 0; var index = 0; var stringcompute1 = new StringCompute(); foreach (var songResult in list.Songs) { stringcompute1.SpeedyCompute(key, song.ArtistName + " - " + songResult.SongName); var rate = stringcompute1.ComputeResult.Rate; if (rate < (decimal)0.8) { continue; } if (rate > max) { max = rate; song = list.Songs[index]; } index++; } } else { song = songs[0]; } return(song); }
private async Task CortanaResponseShowSong(SongResult info) { if (info == null) { await CompleteMessage("Right now... Nothing is playing"); } else if (info.Loved) { var message = $"Now is playing: {info.Song}, from artist {info.Artist}, on album {info.Album}. You liked this song."; await CompleteMessage(message); } else { var message = $"Now is playing: {info.Song}, from artist {info.Artist}, on album {info.Album}. Do you like this song?"; var userPrompt = new VoiceCommandUserMessage(); userPrompt.DisplayMessage = userPrompt.SpokenMessage = message; var userReprompt = new VoiceCommandUserMessage(); var prompt = "Do you like this song?"; userReprompt.DisplayMessage = userReprompt.SpokenMessage = prompt; var response = VoiceCommandResponse.CreateResponseForPrompt(userPrompt, userReprompt); var voiceCommandConfirmation = await voiceServiceConnection.RequestConfirmationAsync(response); if (voiceCommandConfirmation == null) { response = VoiceCommandResponse.CreateResponse(userPrompt); await voiceServiceConnection.ReportSuccessAsync(response); } else if (voiceCommandConfirmation.Confirmed) { var service = new SmartHouseService(); var result = await service.LoveSong(); await CompleteMessage(result?.Message); } else { await CompleteMessage(""); } } }
private SongResult FindMatchInSearchResult(string searchStr, MusicBeeSong song, SearchResult response) { SongResult bestMatch = null; foreach (var songResult in response.Songs) { bool titleMatches = song.Title.ToLower() == songResult.Title.ToLower(); bool artistMatches = songResult.Artists.Exists(x => x.Name.ToLower() == song.Artist.ToLower()); bool albumMatches = song.Album.ToLower() == songResult.Album.Name.ToLower(); if (titleMatches && artistMatches && albumMatches) { // if we matched all three, likely this is the right track bestMatch = songResult; return(bestMatch); } else if ((titleMatches && artistMatches) || (titleMatches && albumMatches)) { // if two of them match, guessing this track is correct is // probably better than just using the firstordefault, but keep looping hoping for a better track bestMatch = songResult; return(bestMatch); } else if (artistMatches && bestMatch == null) { // if just the artist matches and we haven't found anything yet... this might be our best guess bestMatch = songResult; } } //if (videoIdToAdd == null) //{ // var first = response.Songs.FirstOrDefault(); // if (first != null) // { // videoIdToAdd = first.VideoId; // Log($"Didn't find a perfect match for {searchStr} for '{song.Title}' by '{song.Artist}', so using '{first.Title}' by '{first.Artists.FirstOrDefault().Name}' instead"); // } //} return(bestMatch); }
/// <summary> /// 根据艺术家和歌名得到歌曲信息 /// 用于获取虾米付费歌曲 /// </summary> /// <param name="ar">艺术家</param> /// <param name="name">歌名</param> /// <returns></returns> public static SongResult GetXmSqUrl(string ar, string name) { var key = ar + " - " + name; var list = Search(key, 1, 20); if (list == null) { return null; } if (list.Songs.Count <= 0) { return null; } var songs = list.Songs.Where(s => (s.SongName == name) && (s.ArtistName == ar)).ToList(); var song = new SongResult(); if (songs.Count <= 0) { decimal max = 0; var index = 0; var stringcompute1 = new StringCompute(); foreach (var songResult in list.Songs) { stringcompute1.SpeedyCompute(key, song.ArtistName + " - " + songResult.SongName); var rate = stringcompute1.ComputeResult.Rate; if (rate < (decimal)0.8) { continue; } if (rate > max) { max = rate; song = list.Songs[index]; } index++; } } else { song = songs[0]; } return song; }
public static List<SongResult> GetResultsByKey(string key,int page) { var url = "https://api.vk.com/method/audio.search?q="+key+"&count=30&page"+page+"&https=0&access_token=6c2905fdc2c76b3c42e7a39951efcd1e7b00d54d834c1fa8580e9aae8e9f613cf61ce41ba8e2c47c752d3"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var json = (JObject)JsonConvert.DeserializeObject(html.Trim('(', ')')); if (Convert.ToInt32(json["response"][0]) <= 0) { return null; } var list = new List<SongResult>(); var songs = json["response"]; var index = 0; foreach (JToken song in songs) { if (index == 0) { index++; continue; } var single = new SongResult() { SongId = song["aid"].ToString(), Name = song["title"].ToString(), Artist = song["artist"].ToString(), AlbumArtist = song["artist"].ToString(), AlbumId = "1990", Type = "VK", LqUrl = song["url"].ToString(), HqUrl = song["url"].ToString(), ExtHqUrl = song["url"].ToString() }; list.Add(single); } return list; }
private static string GetUrlFromThird(string id, string quality) { var singleSong = SearchSingle(id); var songListQq = MusicService.GetMusic("qq") .SongSearch(singleSong.ArtistName + "-" + singleSong.SongName, 1, 30); SongResult song = null; if (songListQq != null) { song = songListQq.FirstOrDefault(t => CommonHelper.CompareStr(t.SongName, singleSong.SongName) && (CommonHelper.CompareStr(t.ArtistName, singleSong.ArtistName) || CommonHelper.CompareStr(t.AlbumName, singleSong.AlbumName))); } if (song == null) { var songList = MusicService.GetMusic("xm") .SongSearch(singleSong.ArtistName + "-" + singleSong.SongName, 1, 30); song = songList.FirstOrDefault(t => CommonHelper.CompareStr(t.SongName, singleSong.SongName) && (CommonHelper.CompareStr(t.ArtistName, singleSong.ArtistName) || CommonHelper.CompareStr(t.AlbumName, singleSong.AlbumName))); if (song == null) { song = songListQq.FirstOrDefault(t => CommonHelper.CompareStr(t.SongName, singleSong.SongName)); } if (song == null) { song = songList.FirstOrDefault(t => CommonHelper.CompareStr(t.SongName, singleSong.SongName)); } } if (song == null) { return(""); } if (quality == "999000") { if (!string.IsNullOrEmpty(song.FlacUrl)) { return(song.FlacUrl); } if (!string.IsNullOrEmpty(song.ApeUrl)) { return(song.ApeUrl); } if (!string.IsNullOrEmpty(song.WavUrl)) { return(song.WavUrl); } if (!string.IsNullOrEmpty(song.SqUrl)) { return(song.SqUrl); } if (!string.IsNullOrEmpty(song.HqUrl)) { return(song.HqUrl); } } else if (quality == "320000" || quality == "192000") { if (!string.IsNullOrEmpty(song.SqUrl)) { return(song.SqUrl); } } return(song.LqUrl); }
private static List <SongResult> GetListByJson(JToken datas) { var list = new List <SongResult>(); foreach (JToken j in datas) { var song = new SongResult { SongId = j["MUSICRID"].ToString().Replace("MUSIC_", ""), SongName = j["SONGNAME"].ToString(), SongSubName = j["ALIAS"]?.ToString() ?? "", SongLink = "", ArtistId = j["ARTISTID"]?.ToString() ?? "", ArtistName = (j["ARTIST"]?.ToString() ?? "").Replace("&", ";"), ArtistSubName = "", AlbumId = j["ALBUMID"]?.ToString() ?? "0", AlbumName = j["ALBUM"]?.ToString() ?? "", AlbumSubName = "", AlbumArtist = (j["ARTIST"]?.ToString() ?? "").Replace("+", ";"), Length = CommonHelper.NumToTime(j["DURATION"]?.ToString() ?? "0"), Size = "", BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = "", LrcUrl = "", TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = j["LANGUAGE"]?.ToString(), Company = j["COMPANY"]?.ToString(), Year = j["RELEASEDATE"]?.ToString(), Disc = "1", TrackNum = "", Type = "kw" }; if (string.IsNullOrEmpty(song.Year)) { try { song.Year = j["TIMESTAMP"].ToString().Substring(0, 10); } catch (Exception) { // } } song.PicUrl = CommonHelper.GetSongUrl("kw", "320", song.SongId, "jpg"); song.LrcUrl = CommonHelper.GetSongUrl("kw", "320", song.SongId, "lrc"); var format = j["FORMATS"]?.ToString() ?? j["formats"].ToString(); if (format.Contains("MP3128")) { song.BitRate = "128K"; song.CopyUrl = song.LqUrl = CommonHelper.GetSongUrl("kw", "128", song.SongId, "mp3"); } if (format.Contains("MP3192")) { song.BitRate = "192K"; song.CopyUrl = song.HqUrl = CommonHelper.GetSongUrl("kw", "192", song.SongId, "mp3"); } if (format.Contains("MP3H")) { song.BitRate = "320K"; song.CopyUrl = song.SqUrl = CommonHelper.GetSongUrl("kw", "320", song.SongId, "mp3"); } if (format.Contains("AL")) { song.BitRate = "无损"; song.ApeUrl = CommonHelper.GetSongUrl("kw", "1000", song.SongId, "ape"); } if (format.Contains("MP4")) { song.MvHdUrl = song.MvLdUrl = CommonHelper.GetSongUrl("kw", "1000", song.SongId, "mp4"); } if (format.Contains("MV")) { song.MvLdUrl = CommonHelper.GetSongUrl("kw", "1000", song.SongId, "mkv"); } list.Add(song); } return(list); }
private List <SongResult> SearchCollect(string id) { var url = "http://api.xiami.com/web?v=2.0&app_key=1&id=" + id + "&type=collectId&r=collect/detail"; var html = CommonHelper.GetHtmlContent(url, 1, new Dictionary <string, string> { { "Referer", "http://m.xiami.com/" } }); if (string.IsNullOrEmpty(html)) { return(null); } try { var json = JObject.Parse(html); var datas = json["data"]["songs"]; var list = new List <SongResult>(); foreach (JToken j in datas) { if (j["song_id"].ToString() == "0") { return(null); } var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["song_name"].ToString(), SongSubName = "", ArtistId = j["artist_id"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = "", AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = "", AlbumArtist = j["artist_name"].ToString(), Length = Convert.ToInt32(j["length"].ToString()), BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = j["listen_file"].ToString(), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), SmallPic = j["album_logo"].ToString(), PicUrl = j["album_logo"].ToString().Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = 1, TrackNum = 0, Type = "xm" }; if (string.IsNullOrEmpty(song.LqUrl)) { song.LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"); } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } list.Add(song); } return(list); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); return(null); } }
/// <summary> /// 根据SongIds获取歌曲信息 /// 因为百度FM的解析一次只允许解析10个结果 /// 当解析20个结果时要分批次 /// </summary> /// <param name="ids">歌曲Id连接成的字符串,使用逗号隔开</param> /// <returns></returns> private static List<SongResult> GetResultsByIds(string ids) { var first = CommonHelper.GetHtmlContent("http://music.baidu.com/data/music/fmlink?songIds=" + ids + "&type=mp3&rate=320"); if (string.IsNullOrEmpty(first)) { return null; } var jobject = (JObject)JsonConvert.DeserializeObject(first); if (jobject.Count != 2) { return null; } if ((int)jobject["errorCode"] != 22000) return null; var results = jobject["data"]["songList"]; if (!results.HasValues) return null; var list = new List<SongResult>(); foreach (var result in results) { try { var song = new SongResult { SongId =result["songId"].ToString(), Name = result["songName"].ToString(), Album = result["albumName"].ToString(), AlbumId = result["albumId"].ToString(), AlbumArtist = result["artistName"].ToString(), Artist = result["artistName"].ToString(), PicUrl = result["songPicRadio"].ToString(), LrcUrl = "http://fm.baidu.com" + result["lrcLink"], Time = CommonHelper.NumToTime(result["time"].ToString()), BitRate = result["rate"] + "kbps", HqUrl = result["songLink"].ToString(), LqUrl = result["songLink"].ToString(), Size = Math.Round((Convert.ToDouble(result["size"]) / 1024 / 1024), 2) + "MB", Type = "Baidu" }; song.CopyUrl = "http://www.musicuu.com/songurl/bd^320^" + song.SongId + ".mp3"; list.Add(song); } catch (Exception) { Console.Write(""); } } var html = CommonHelper.GetHtmlContent("http://music.baidu.com/data/music/fmlink?songIds=" + ids + "&type=flac"); if (string.IsNullOrEmpty(html)) { return list; } var flac = (JObject)JsonConvert.DeserializeObject(html); if (flac.Count != 2) { return list; } if ((int)flac["errorCode"] != 22000) return null; var wusuns = flac["data"]["songList"]; if (!results.HasValues) return list; var i = 0; foreach (var wusun in wusuns) { if (string.IsNullOrEmpty(wusun["songLink"].ToString())) { i++; continue; } list[i].ExtHqUrl = wusun["songLink"].ToString(); list[i].BitRate = wusun["rate"] + "kbps"; i++; } return list; }
private static List <SongResult> GetResultsByIds(string ids, int type) { var albumUrl = "http://www.xiami.com/song/playlist/id/" + ids + "/type/" + type + "/cat/json"; var html = CommonHelper.GetHtmlContent(albumUrl); if (string.IsNullOrEmpty(html) || html.Contains("应版权方要求,没有歌曲可以播放")) { return(null); } var list = new List <SongResult>(); try { var json = JObject.Parse(html); var data = json["data"]["trackList"]; if (string.IsNullOrEmpty(data.ToString())) { return(null); } foreach (var j in data) { try { var song = new SongResult { SongId = j["songId"].ToString(), SongName = j["songName"].ToString().HtmlDecode(), SongSubName = j["subName"]?.ToString().HtmlDecode(), SongLink = "http://www.xiami.com/song/" + j["song_id"], ArtistId = j["artistId"].ToString(), ArtistName = j["singers"].ToString().HtmlDecode(), ArtistSubName = j["artist_sub_title"]?.ToString().HtmlDecode(), AlbumId = j["albumId"].ToString(), AlbumName = j["album_name"].ToString().HtmlDecode(), AlbumSubName = j["album_sub_title"]?.ToString().HtmlDecode(), AlbumArtist = j["artist"].ToString().HtmlDecode(), Length = Convert.ToInt32(j["length"].ToString()), BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = Jurl(j["location"].ToString()), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), SmallPic = ("http://img.xiami.net/" + j["album_logo"]), PicUrl = ("http://img.xiami.net/" + j["album_logo"]).Replace("_1.", "_4."), LrcUrl = j["lyric"].ToString(), TrcUrl = "", KrcUrl = j["lyric_karaok"]?.ToString(), MvId = j["mvUrl"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = Convert.ToInt32(j["cd_serial"].ToString()), TrackNum = Convert.ToInt32(j["track"].ToString()), Type = "xm" }; if (j["purview"] != null) { song.BitRate = "320K"; song.SqUrl = song.HqUrl = j["purview"]["filePath"]?.ToString(); } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } if (!string.IsNullOrEmpty(j["ttpodId"]?.ToString())) { song.BitRate = "320K"; song.HqUrl = CommonHelper.GetSongUrl("tt", "192", j["ttpodId"].ToString(), "mp3"); song.SqUrl = CommonHelper.GetSongUrl("tt", "320", j["ttpodId"].ToString(), "mp3"); } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); } } return(list); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); return(null); } }
private CollectResult SearchCollect(string id) { var url = "http://api.xiami.com/web?v=2.0&app_key=1&id=188126468&type=collectId&r=collect/detail"; var html = CommonHelper.GetHtmlContent(url, 1, new Dictionary<string, string> { {"Referer", "http://m.xiami.com/"} }); var result = new CollectResult { ErrorCode = 200, ErrorMsg = "OK", CollectId = id, CollectLink = "http://www.xiami.com/collect/"+id, Page = 1, Songs = new List<SongResult>() }; if (string.IsNullOrEmpty(html)) { result.ErrorCode = 300; result.ErrorMsg = "获取歌单信息失败"; return result; } try { var json = JObject.Parse(html); var datas = json["data"]["songs"]; result.CollectName = json["data"]["collect_name"].ToString(); result.CollectLogo = json["data"]["logo"].ToString().Replace("_1.", "_4."); result.SongSize = json["data"]["songs_count"].Value<int>(); result.Date = CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(json["data"]["gmt_create"].ToString())).ToString("yyyy-MM-dd"); result.CollectMaker = json["data"]["user_name"].ToString(); result.Tags = json["data"]["tags"].First?.ToString(); foreach (JToken j in datas) { if (j["song_id"].ToString() == "0") { return null; } var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["song_name"].ToString(), SongSubName = "", ArtistId = j["artist_id"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = "", AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = "", AlbumArtist = j["artist_name"].ToString(), Length = CommonHelper.NumToTime(j["length"].ToString()), Size = "", BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = j["listen_file"].ToString(), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), PicUrl = j["album_logo"].ToString().Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = "1", TrackNum = "", Type = "xm" }; if (string.IsNullOrEmpty(song.LqUrl)) { song.LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"); } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } result.Songs.Add(song); } return result; } catch (Exception ex) { CommonHelper.AddLog(ex); result.ErrorCode = 500; result.ErrorMsg = "解析歌单出现异常"; return result; } }
private static void GetSongDetials(SongResult song) { var url = "http://www.xiami.com/app/xiating/album?spm=0.0.0.0.L6k2wP&id=" + song.AlbumId + "&uid=0"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return; } var match = Regex.Match(html, @"(?<=h1 title="")([^""]+)(?:""[\s\S]+?p class="")([^""]*)(?:""[\s\S]+detail_songer"">)([^<]+)(?:</a>[\s\S]+?<em>)([^<]+)(?:</em>[\s\S]+?<em>)([^<]+)(?:</em>[\s\S]+?<em>)([^<]+)(?:</em>[\s\S]+?<em>)([^<]+)(?:</em>)"); if (match.Length <= 0) { return; } song.AlbumName = match.Groups[1].Value; song.AlbumSubName = match.Groups[2].Value; song.AlbumArtist = match.Groups[3].Value; song.Language = match.Groups[4].Value; song.Company = match.Groups[5].Value; song.Year = match.Groups[6].Value.Replace("年", "-").Replace("月", "-").Replace("日", ""); var discs = Regex.Matches(html, @"(?<=<ul class=""playlist)[\s\S]+?(?=</ul>)"); for (int i = 0; i < discs.Count; i++) { match = Regex.Match(discs[i].Value, @"(?<=rel=""" + song.SongId + @"""[\s\S]+?list_index"">)\d+(?=[\s\S]+?id=" + song.SongId + ")"); if (!string.IsNullOrEmpty(match.Value)) { song.TrackNum = match.Value; song.Disc = (i + 1).ToString(); } } }
private ArtistResult SearchArtist(string id,int page) { var result = new ArtistResult { ErrorCode = 200, ErrorMsg = "OK", ArtistLink = "http://www.xiami.com/artist/"+id, Page = page, Songs = new List<SongResult>() }; var html = CommonHelper.PostData("http://www.xiami.com/app/xiating/artist-song", new Dictionary<string, string> { {"id", id}, {"uid", "0"}, {"callback", "xiami"}, {"page", page.ToString()}, }); if (string.IsNullOrEmpty(html)) { result.ErrorCode = 300; result.ErrorMsg = "获取热门歌曲信息失败"; return result; } try { var json = JObject.Parse(html); var data = json["data"]; foreach (var j in data) { try { if (j["song_status"].ToString() != "0") { continue; //滤除下架歌曲 } var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["name"].ToString(), SongSubName = j["sub_title"]?.ToString(), SongLink = "http://www.xiami.com/song/" + j["song_id"], ArtistId = j["artist_id"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = j["artist_sub_title"]?.ToString(), AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"]?.ToString(), AlbumSubName = j["album_sub_title"]?.ToString(), AlbumArtist = j["artist_name"].ToString(), Length = j["songtime"].ToString(), Size = "", BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), PicUrl = ("http://img.xiami.net/" + j["album_logo"]).Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = j["cd_serial"]?.ToString(), TrackNum = j["track"]?.ToString(), Type = "xm" }; if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } result.Songs.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex); } } } catch (Exception) { result.ErrorCode = 500; result.ErrorMsg = "解析歌曲时发生错误"; } html = CommonHelper.GetHtmlContent( "http://api.xiami.com/web?id=" + id + "&r=artist%2Fdetail&app_key=09bef203bfa02bfbe3f1cfd7073cb0f3", 1, new Dictionary<string, string> { {"Referer", "http://m.xiami.com/"} }); if (string.IsNullOrEmpty(html)) { return result; } try { var json = JObject.Parse(html); result.AlbumSize = json["data"]["albums_count"].Value<int>(); result.SongSize = -1; result.ArtistLogo = json["data"]["logo"].ToString().Replace("_1.", "_4."); result.TransName = json["data"]["english_name"]?.ToString(); result.ArtistInfo = string.Format("性别:{0};地区:{1};唱片公司:{3}", json["data"]["gender"].ToString() == "F" ? "女" : "男", json["data"]["area"].ToString(), json["data"]["company"].ToString()); } catch (Exception ex) { CommonHelper.AddLog(ex); } return result; }
/// <summary> /// 通过Ids获取搜索结果 /// </summary> /// <param name="ids">歌曲Id的组合</param> /// <param name="type">类型 0-song 1-album 2-artist 3-collect</param> /// <returns>歌曲结果</returns> private static List<SongResult> GetResultsByIds(string ids, int type) { var albumUrl = "http://www.xiami.com/song/playlist/id/" + ids + "/type/"+type+"/cat/json"; var html = CommonHelper.GetHtmlContent(albumUrl); if (string.IsNullOrEmpty(html)) { return null; } var jobject = new JObject(); try { jobject = (JObject)JsonConvert.DeserializeObject(html); } catch (Exception ex) { Console.Write(ex.ToString()); } var dataList = jobject["data"]["trackList"]; if (string.IsNullOrEmpty(dataList.ToString())) { return null; } var match = Regex.Match("",""); var pageHtml = ""; if (type == 1) { var albumPage = "http://www.xiami.com/album/" + ids.Trim(); pageHtml = CommonHelper.GetHtmlContent(albumPage); match = Regex.Match(pageHtml, @"(?<=艺人[\s\S]+?artist/\d+[^>]+>)([^<]+)(?:<[\s\S]+?语种[\s\S]+?valign=""top"">)([^<]+)(?:[\s\S]+?唱片公司[\s\S]+?target=""_blank"">)([^<]+)(?:[\s\S]+?发行时间:[\s\S]+?valign=""top"">)([^<]+)"); } InitXiamiVip(); var list = new List<SongResult>(); foreach (JToken data in dataList) { var sr = new SongResult { Album = CheckIsInValidate(System.Web.HttpUtility.HtmlDecode(data["album_name"].ToString())), AlbumId = data["album_id"].ToString(), Artist = CheckIsInValidate(System.Web.HttpUtility.HtmlDecode(data["artist"].ToString())), SongId = data["song_id"].ToString(), Name = CheckIsInValidate(System.Web.HttpUtility.HtmlDecode(data["title"].ToString())), LqUrl = Jurl(data["location"].ToString()), LrcUrl = data["lyric_url"].ToString(), PicUrl = data["album_pic"].ToString(), Time = CommonHelper.NumToTime(data["length"].ToString()), Type = "Xiami" }; if (type != 1) { var albumPage = "http://www.xiami.com/album/" + sr.AlbumId.Trim(); pageHtml = CommonHelper.GetHtmlContent(albumPage); match = Regex.Match(pageHtml, @"(?<=艺人[\s\S]+?artist/\d+[^>]+>)([^<]+)(?:<[\s\S]+?语种[\s\S]+?valign=""top"">)([^<]+)(?:[\s\S]+?唱片公司[\s\S]+?target=""_blank"">)([^<]+)(?:[\s\S]+?发行时间:[\s\S]+?valign=""top"">)([^<]+)"); } var trackM = Regex.Match(pageHtml, @"(?<=trackid"">)(\d+)(?=</td>\s*<td class=""song_name"">\s*<a\s*href=""/song/"+sr.SongId+ ")"); sr.AlbumArtist = CheckIsInValidate(match.Groups[1].Value); sr.Language = match.Groups[2].Value; sr.Company = match.Groups[3].Value; sr.Year = match.Groups[4].Value; sr.TrackNum = trackM.Groups[1].Value.Trim().PadLeft(2, '0'); if (string.IsNullOrEmpty(sr.AlbumArtist)) { sr.AlbumArtist = sr.Artist.Contains(";") ? sr.Artist.Split(';')[0].Trim() : sr.Artist; } sr.HqUrl = GetHqUrl(sr.SongId); if (string.IsNullOrEmpty(sr.HqUrl)) { sr.BitRate = "128K"; sr.ExtHqUrl = sr.HqUrl = sr.LqUrl; } else { sr.BitRate = !sr.HqUrl.Contains("m5") ? "320K" : "128K"; sr.ExtHqUrl = sr.HqUrl; } sr.CopyUrl = "http://www.musicuu.com/songurl/xm^320^" + sr.SongId + ".mp3"; if (sr.BitRate == "128K") { sr.ExtHqUrl = sr.HqUrl = sr.LqUrl = sr.CopyUrl; } sr.Artist = System.Web.HttpUtility.HtmlDecode(sr.Artist); sr.Name = System.Web.HttpUtility.HtmlDecode(sr.Name); sr.AlbumArtist = System.Web.HttpUtility.HtmlDecode(sr.AlbumArtist); sr.Album = System.Web.HttpUtility.HtmlDecode(sr.Album); list.Add(sr); } return list; }
public static string GetAlbumInfo(SongResult srResult) { var albumPage = "http://www.xiami.com/web/album/id/" + srResult.AlbumId.Trim(); var pageHtml = System.Web.HttpUtility.HtmlDecode(CommonHelper.GetHtml(albumPage, _cookieContainer)); if (string.IsNullOrEmpty(pageHtml)) { return ""; } var match = Regex.Match(pageHtml, @"(?<=演唱者[\s\S]+?>)([\s\S]+?)(?:</a></li>\s*<li>语种:)(.+)(?:</li>\s*<li>唱片公司:)([\s\S]+?)(?:</li>\s*<li>发行时间:)(.+)(?=</li>)"); var sb = new StringBuilder(); sb.AppendLine(string.Format("==={0}===", srResult.Album)); sb.AppendLine(""); sb.AppendLine(string.Format("演唱者:{0}", match.Groups[1].Value)); sb.AppendLine(string.Format("语种:{0}", match.Groups[2].Value)); sb.AppendLine(string.Format("唱片公司:{0}", match.Groups[3].Value)); sb.AppendLine(string.Format("发行时间:{0}", string.IsNullOrEmpty(srResult.Year) ? match.Groups[4].Value : srResult.Year)); sb.AppendLine(""); sb.AppendLine("专辑介绍"); sb.AppendLine(""); sb.AppendLine("===歌曲列表==="); sb.AppendLine(""); var cds = Regex.Matches(pageHtml, @"(?<=strong>)CD[\S\s]+?(?=</strong>)"); var a = 0; foreach (Match cd in cds) { a++; sb.AppendLine(string.Format("==={0}===", cd.Value)); if (cds.Count > 1) { string regStr; if (a == cds.Count) { regStr = "CD" + a + @"[\s\S]+"; } else { regStr = "CD" + a + @"[\s\S]+?" + "CD" + (a+1); } var myText = Regex.Match(pageHtml, regStr).Value; var matches = Regex.Matches(myText, @"(?<=web/song/id/\d+"">)[\S\s]+?(?=</a></li>)"); foreach (Match match1 in matches) { sb.AppendLine(match1.Value); } } else { var matches = Regex.Matches(pageHtml, @"(?<=web/song/id/\d+"">)[\S\s]+?(?=</a></li>)"); foreach (Match match1 in matches) { sb.AppendLine(match1.Value); } } sb.AppendLine(""); } return sb.ToString(); }
private static List <SongResult> GetListByJson(JToken songs, bool isArtist = false) { if (songs == null) { return(null); } var list = new List <SongResult>(); foreach (JToken token in songs) { var j = isArtist ? token["musicData"] : token; var ar = j["singer"].Aggregate("", (current, fJToken) => current + fJToken["name"].ToString() + ";") .TrimEnd(';'); var song = new SongResult { SongId = j["songid"].ToString(), SongName = j["songname"].ToString(), SongSubName = "", SongLink = "http://y.qq.com/#type=song&mid=" + j["songmid"], ArtistId = j["singer"].First?["id"]?.ToString(), ArtistName = ar, ArtistSubName = "", AlbumId = j["albummid"].ToString(), AlbumName = j["albumname"].ToString(), AlbumSubName = "", AlbumArtist = j["singer"].First?["name"].ToString(), Length = CommonHelper.NumToTime(j["interval"].ToString()), Size = "", BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = "", LrcUrl = CommonHelper.GetSongUrl("qq", "128", j["songid"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["vid"].ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = j["pubtime"] == null ? "" : CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(j["pubtime"].ToString())).ToString("yyyy-MM-dd"), Disc = "1", TrackNum = j["belongCD"]?.ToString(), Type = "qq" }; var mid = j["strMediaMid"]?.ToString() ?? j["songmid"].ToString(); if (j["size128"].ToString() != "0") { song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("qq", "128", mid, "mp3"); } if (j["sizeogg"].ToString() != "0") { song.BitRate = "192K"; song.HqUrl = "http://stream.qqmusic.tc.qq.com/" + (Convert.ToInt32(song.SongId) + 40000000) + ".ogg"; } if (j["size320"].ToString() != "0") { song.BitRate = "320K"; song.SqUrl = CommonHelper.GetSongUrl("qq", "320", mid, "mp3"); } if (j["sizeape"].ToString() != "0") { song.BitRate = "无损"; song.ApeUrl = "http://stream.qqmusic.tc.qq.com/A000" + mid + ".ape"; } if (j["sizeflac"].ToString() != "0") { song.BitRate = "无损"; song.FlacUrl = "http://stream.qqmusic.tc.qq.com/F000" + mid + ".flac"; } song.CopyUrl = CommonHelper.GetSongUrl("qq", "320", mid, "mp3"); if (!string.IsNullOrEmpty(song.MvId)) { song.MvHdUrl = CommonHelper.GetSongUrl("qq", "hd", song.MvId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("qq", "ld", song.MvId, "mp4"); } song.PicUrl = "http://i.gtimg.cn/music/photo/mid_album_500/" + song.AlbumId[song.AlbumId.Length - 2] + "/" + song.AlbumId[song.AlbumId.Length - 1] + "/" + song.AlbumId + ".jpg"; list.Add(song); } return(list); }
private static List <SongResult> Search(string key, int page, int size) { key = key.Replace("\"", ""); var text = "keyword=" + key + "&" + "pageNo=" + (page - 1) + "&" + "pageSize=" + size + "&" + "type=TRACK"; var url = "http://api.sonyselect.com.cn/es/search/v1/android/?sign=" + GetDes3EncryptedText(text); var data = "{\"content\":{\"type\":\"TRACK\",\"pageSize\":\"" + size + "\",\"pageNo\":\"" + (page - 1) + "\",\"keyword\":\"" + key + "\"},\"header\":{\"sdkNo\":\"4.2.2\",\"model\":\"X9Plus\",\"manufacturer\":\"vivo\",\"imei\":\"133524532901500\"}}"; var html = CommonHelper.PostData(url, new Dictionary <string, string> { { "JSON", data } }, 1); if (string.IsNullOrEmpty(html)) { return(null); } var json = JObject.Parse(html); if (json["content"]["trackPage"]["totalElements"].Value <int>() <= 0) { return(null); } var datas = json["content"]["trackPage"]["content"]; var list = new List <SongResult>(); foreach (JToken j in datas) { try { var song = new SongResult { SongId = j["id"].ToString(), SongName = j["name"].ToString(), SongSubName = "", SongLink = "", ArtistId = j["albums"]?.First?["artistId"].ToString() ?? "", ArtistName = j["albums"]?.First?["aritst"].ToString() ?? "", ArtistSubName = "", AlbumId = j["albums"]?.First?["id"].ToString() ?? "0", AlbumName = j["albums"]?.First?["name"].ToString() ?? "", AlbumSubName = "", AlbumArtist = j["albums"]?.First?["aritst"].ToString() ?? "", Length = CommonHelper.TimeToNum(j["duration"].ToString()), BitRate = "无损", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", SmallPic = j["albums"]?.First?["smallIcon"].ToString() ?? "", PicUrl = j["albums"]?.First?["largeIcon"].ToString() ?? "", LrcUrl = "", TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = j["createTime"]?.ToString(), Disc = 1, TrackNum = 0, Type = "sn" }; if (j["auditionUrl"] != null) { var link = j["auditionUrl"].ToString(); song.LqUrl = song.HqUrl = song.SqUrl = song.CopyUrl = link; song.FlacUrl = CommonHelper.GetSongUrl("sn", CommonHelper.EncodeBase64(Encoding.UTF8, j["downloadUrl"].ToString()), song.SongId, "flac"); // link = link.Replace("/Audition/", "/Audio/").Replace(".mp3", ""); // if (j["downloadUrl"] != null) // { // if (j["downloadUrl"].ToString().StartsWith("http")) // { // link = j["downloadUrl"] + "/44100/001.flac"; // } // } // if (link.Contains(".flac")) // { // song.FlacUrl = link; // } // else if (link.Contains(".ape")) // { // song.ApeUrl = link; // } // else // { // song.WavUrl = link; // } } list.Add(song); } catch (Exception e) { CommonHelper.AddLog(j.ToString()); CommonHelper.AddLog(e.ToString()); } } return(list); }
public static List<SongResult> GetBResultById(string id) { var url = "http://v.xue.taobao.com/learn.htm?courseId=" + id; var html = CommonHelper.GetGbkHtml(url); if (string.IsNullOrEmpty(html)) { return null; } var jsonStr = Regex.Match(html, @"(?<=tx_learn_config\s*=\s*)({[\s\S]+?}})(?=;)").Value; if (string.IsNullOrEmpty(jsonStr)) { return null; } var json = (JObject) JsonConvert.DeserializeObject(jsonStr); var lessons = json["outline"]["chapters"].First["sections"]; var album = json["course"]["title"].ToString(); var artist = json["course"]["shopName"].ToString(); var list = new List<SongResult>(); var index = 1; foreach (JToken lesson in lessons) { var song = new SongResult { SongId = lesson["resources"].First["link"].ToString(), Name = lesson["resources"].First["title"].ToString(), AlbumId = lesson["courseId"].ToString(), Time = lesson["lessonLengthStr"].ToString(), Album = album, AlbumArtist = artist, Artist = artist, TrackNum = index.ToString(), Type = "TB" }; index++; var video = CommonHelper.GetHtmlContent("http://cloud.video.taobao.com/videoapi/info.php?vid=" + song.SongId); var matches = Regex.Matches(video, @"(?<=video_url>)([^<]+)(?:</video_url><type>)(\w+)(?:</type>[\s\S]+?<bitrate>)(\d+)(?:</bitrate><length>)(\d+)"); foreach (Match match in matches) { switch (match.Groups[2].Value) { case "hd": song.ExtHqUrl = match.Groups[1].Value + "$" + match.Groups[4].Value; if (string.IsNullOrEmpty(song.BitRate)) { song.BitRate = match.Groups[3].Value + "K"; } else { if (Convert.ToInt32(song.BitRate.Replace("K", "")) < Convert.ToInt32(match.Groups[3].Value)) { song.BitRate = match.Groups[3].Value + "K"; } } break; case "ud": song.CopyUrl = match.Groups[1].Value + "$" + match.Groups[4].Value; if (string.IsNullOrEmpty(song.BitRate)) { song.BitRate = match.Groups[3].Value + "K"; } break; case "sd": song.HqUrl = match.Groups[1].Value + "$" + match.Groups[4].Value; if (string.IsNullOrEmpty(song.BitRate)) { song.BitRate = match.Groups[3].Value + "K"; } else { if (Convert.ToInt32(song.BitRate.Replace("K","")) < Convert.ToInt32(match.Groups[3].Value)) { song.BitRate = match.Groups[3].Value + "K"; } } break; case "ld": song.LqUrl = match.Groups[1].Value + "$" + match.Groups[4].Value; if (string.IsNullOrEmpty(song.BitRate)) { song.BitRate = match.Groups[3].Value + "K"; } break; } } list.Add(song); } return list; }
public static List <SongResult> Search(string key, int page) { var url = "http://www.xiami.com/app/xiating/search-song2?key=" + key + "&uid=0&callback=xiami&page=" + page; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html) || html == "null" || html.Contains("无法在虾米资料库中得到结果")) { return(null); } try { var json = JObject.Parse(html); var data = json["data"]; var list = new List <SongResult>(); foreach (var j in data) { try { var song = new SongResult { SongId = j["songId"].ToString(), SongName = j["songName"].ToString(), SongSubName = j["subName"]?.ToString(), SongLink = "http://www.xiami.com/song/" + j["songId"], ArtistId = j["artist"]["artistId"].ToString(), ArtistName = j["artist"]["artistName"].ToString(), ArtistSubName = j["artist"]["alias"]?.ToString(), AlbumId = j["album"]["albumId"]?.ToString() ?? "0", AlbumName = j["album"]["albumName"]?.ToString() ?? "", AlbumSubName = j["album"]["subTitle"]?.ToString() ?? "", AlbumArtist = j["album"]["artist"]?["artistName"].ToString() ?? j["artist"]["artistName"].ToString(), Length = Convert.ToInt32(Convert.ToDouble(j["length"].ToString())), BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["songId"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["songId"].ToString(), "mp3"), LqUrl = CommonHelper.GetSongUrl("xm", "128", j["songId"].ToString(), "mp3"), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["songId"].ToString(), "mp3"), SmallPic = ("http://img.xiami.net/" + j["album_logo"]), PicUrl = ("http://img.xiami.net/" + j["album_logo"]).Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "128", j["songId"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mvId"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = j["album"]["language"]?.ToString() ?? "", Company = j["album"]["company"]?.ToString() ?? "", Year = string.IsNullOrEmpty(j["demoCreateTime"].ToString())?"" : CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(string.IsNullOrEmpty(j["demoCreateTime"].ToString()) ? "0" : j["demoCreateTime"].ToString()) / 1000).ToString("yyyy-MM-dd"), Disc = 1, TrackNum = 0, Type = "xm" }; int disc; if (Int32.TryParse(j["cdSerial"].ToString(), out disc)) { song.Disc = disc; } if (Int32.TryParse(j["track"].ToString(), out disc)) { song.TrackNum = disc; } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } foreach (JToken jToken in j["audios"]) { switch (jToken["audioQualityEnum"].ToString()) { case "LOW": song.LqUrl = jToken["filePath"].ToString(); break; case "LOSSLESS": if (jToken["format"].ToString() == "flac") { song.FlacUrl = jToken["filePath"].ToString(); } else if (jToken["format"].ToString() == "wav") { song.WavUrl = jToken["filePath"].ToString(); } else { song.ApeUrl = jToken["filePath"].ToString(); } song.BitRate = "无损"; break; case "HIGH": song.HqUrl = song.SqUrl = jToken["filePath"].ToString(); break; } } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); } } return(list); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); return(null); } }
private static List <SongResult> GetListByJson(JToken datas) { var list = new List <SongResult>(); foreach (JToken j in datas) { var song = new SongResult { SongId = j["hash"].ToString(), SongName = j["filename"].ToString(), SongSubName = j["alias"]?.ToString(), SongLink = "", ArtistId = "", ArtistName = (j["singername"]?.ToString() ?? "").Replace("+", ";"), ArtistSubName = "", AlbumId = j["album_id"]?.ToString() ?? "", AlbumName = j["album_name"]?.ToString() ?? "", AlbumSubName = "", AlbumArtist = (j["singername"]?.ToString() ?? "").Replace("+", ";"), Length = CommonHelper.NumToTime(j["duration"].ToString()), Size = "", BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = CommonHelper.GetSongUrl("kg", "320", j["hash"].ToString(), "jpg"), LrcUrl = CommonHelper.GetSongUrl("kg", "320", j["hash"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = "1", TrackNum = "", Type = "kg" }; if (!string.IsNullOrEmpty(song.AlbumId)) { song.PicUrl = CommonHelper.GetSongUrl("kg", "320", song.AlbumId, "jpg"); } if (string.IsNullOrEmpty(song.ArtistName)) { if (song.SongName.Contains("-")) { song.ArtistName = song.SongName.Substring(0, song.SongName.IndexOf('-')).Trim(); song.SongName = song.SongName.Substring(song.SongName.IndexOf('-') + 1).Trim(); } } else { var name = song.SongName.Substring(0, song.SongName.IndexOf('-')).Trim(); if (song.ArtistName.Trim() == name) { song.SongName = song.SongName.Substring(song.SongName.IndexOf('-') + 1).Trim(); } } if (!string.IsNullOrEmpty(j["mvhash"].ToString())) { song.MvHdUrl = CommonHelper.GetSongUrl("kg", "hd", j["mvhash"].ToString(), "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("kg", "ld", j["mvhash"].ToString(), "mp4"); } if (!string.IsNullOrEmpty(j["hash"].ToString())) { song.BitRate = "128K"; song.CopyUrl = song.LqUrl = CommonHelper.GetSongUrl("kg", "128", j["hash"].ToString(), "mp3"); } if (!string.IsNullOrEmpty(j["320hash"].ToString())) { song.BitRate = "320K"; song.CopyUrl = song.SqUrl = CommonHelper.GetSongUrl("kg", "320", j["320hash"].ToString(), "mp3"); } if (!string.IsNullOrEmpty(j["sqhash"].ToString())) { song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("kg", "1000", j["sqhash"].ToString(), "flac"); } list.Add(song); } return(list); }
private static List <SongResult> GetLostAlbum(string id) { var url = "http://api.xiami.com/web?id=" + id + "&r=album%2Fdetail&app_key=09bef203bfa02bfbe3f1cfd7073cb0f3"; var html = CommonHelper.GetHtmlContent(url, 1, new Dictionary <string, string> { { "Referer", "http://m.xiami.com/" } }); if (string.IsNullOrEmpty(html)) { return(null); } var json = JObject.Parse(html); var datas = json["data"]["songs"]; var list = new List <SongResult>(); var index = 0; foreach (JToken j in datas) { index++; var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["song_name"].ToString(), SongSubName = "", ArtistId = j["artist_id"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = "", AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = "", AlbumArtist = json["data"]["artist_name"].ToString(), Length = string.IsNullOrEmpty(j["songtime"]?.ToString()) ? 0 : Convert.ToInt32(j["songtime"].ToString()), BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), SmallPic = j["album_logo"].ToString(), PicUrl = j["album_logo"].ToString().Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(json["data"]["gmt_publish"].ToString())).ToString("yyyy-MM-dd"), Disc = 1, TrackNum = index, Type = "xm" }; if (j["purview_roles"] != null) { foreach (JToken jToken in j["purview_roles"]) { switch (jToken["quality"].ToString()) { case "l": song.LqUrl = CommonHelper.GetSongUrl("xm", "128", song.SongId, "mp3"); break; case "h": song.HqUrl = song.SqUrl = CommonHelper.GetSongUrl("xm", "320", song.SongId, "mp3"); break; case "s": song.FlacUrl = CommonHelper.GetSongUrl("xm", "999", song.SongId, "flac"); song.BitRate = "无损"; break; } } } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } list.Add(song); } return(list); }
private static List<SongResult> GetResultsByIds(string ids, int type) { var albumUrl = "http://www.xiami.com/song/playlist/id/" + ids + "/type/" + type + "/cat/json"; var html = CommonHelper.GetHtmlContent(albumUrl); if (string.IsNullOrEmpty(html) || html.Contains("应版权方要求,没有歌曲可以播放")) { return null; } var list = new List<SongResult>(); try { var json = JObject.Parse(html); var data = json["data"]["trackList"]; if (string.IsNullOrEmpty(data.ToString())) { return null; } foreach (var j in data) { try { var song = new SongResult { SongId = j["songId"].ToString(), SongName = j["songName"].ToString(), SongSubName = j["subName"]?.ToString(), SongLink = "http://www.xiami.com/song/" + j["song_id"], ArtistId = j["artistId"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = j["artist_sub_title"]?.ToString(), AlbumId = j["albumId"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = j["album_sub_title"]?.ToString(), AlbumArtist = j["artist"].ToString(), Length = CommonHelper.NumToTime(j["length"].ToString()), Size = "", BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = Jurl(j["location"].ToString()), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), PicUrl = ("http://img.xiami.net/" + j["album_logo"]).Replace("_1.", "_4."), LrcUrl = j["lyric"].ToString(), TrcUrl = "", KrcUrl = j["lyric_karaok"]?.ToString(), MvId = j["mvUrl"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = j["cd_serial"].ToString(), TrackNum = j["track"].ToString(), Type = "xm" }; if (j["purview"] != null) { song.SqUrl = song.HqUrl = j["purview"]["filePath"]?.ToString(); } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex); } } return list; } catch (Exception ex) { CommonHelper.AddLog(ex); return null; } }
private List <SongResult> SearchArtist(string id, int page) { var text = "id=" + id + "&uid=0&callback=xiami&page=" + page; var html = CommonHelper.GetHtmlContent("http://www.xiami.com/app/xiating/artist-song?" + text); if (string.IsNullOrEmpty(html)) { html = CommonHelper.GetHtmlContent("http://www.xiami.com/app/xiating/artist-song?" + text); if (string.IsNullOrEmpty(html)) { html = CommonHelper.GetHtmlContent("http://www.xiami.com/app/xiating/artist-song?" + text); if (string.IsNullOrEmpty(html)) { return(null); } } } var json = JObject.Parse(html); var data = json["data"]; var list = new List <SongResult>(); foreach (var j in data) { try { var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["name"].ToString(), SongSubName = j["singers"]?.ToString(), SongLink = "http://www.xiami.com/song/" + j["song_id"], ArtistId = j["artist_id"].ToString(), ArtistName = j["artist_name"].ToString(), ArtistSubName = j["artist_sub_title"]?.ToString(), AlbumId = j["album_id"]?.ToString() ?? "0", AlbumName = j["album_name"]?.ToString() ?? "", AlbumSubName = j["album_sub_title"]?.ToString(), AlbumArtist = j["artist_name"].ToString(), Length = CommonHelper.TimeToNum(j["songtime"].ToString()), BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), SmallPic = "http://img.xiami.net/" + j["album_logo"], PicUrl = ("http://img.xiami.net/" + j["album_logo"]).Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = string.IsNullOrEmpty(j["cd_serial"]?.ToString()) ? 1 : Convert.ToInt32(j["cd_serial"].ToString()), TrackNum = string.IsNullOrEmpty(j["track"]?.ToString()) ? 0 : Convert.ToInt32(j["track"].ToString()), Type = "xm" }; if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); } } return(list); }
private static SongResult GetLostSong(string songId) { var html = CommonHelper.GetHtmlContent("http://api.xiami.com/web?v=2.0&app_key=1&id=" + songId + "&r=song/detail", 1, new Dictionary<string, string> { {"Referer", "http://m.xiami.com/"} }); if (string.IsNullOrEmpty(html)) { return null; } var json = JObject.Parse(html); var j = json["data"]["song"]; if (j["song_id"].ToString() == "0") { return null; } var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["song_name"].ToString(), SongSubName = "", ArtistId = j["artist_id"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = "", AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = "", AlbumArtist = j["artist_name"].ToString(), Length = "", Size = "", BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = j["listen_file"].ToString(), CopyUrl = "", PicUrl = j["logo"].ToString().Replace("_1.", "_4."), LrcUrl = j["lyric"].ToString(), TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = "1", TrackNum = "", Type = "xm" }; return song; }
private static List <SongResult> GetSongsByToken(JToken datas) { var list = new List <SongResult>(); foreach (JToken j in datas) { var song = new SongResult { SongId = j["id"].ToString(), SongName = j["name"].ToString(), SongSubName = "", SongLink = "", ArtistId = j["artistid"]?.ToString() ?? "", ArtistName = (j["artist"]?.ToString() ?? "").Replace("&", ";"), ArtistSubName = "", AlbumId = j["albumid"]?.ToString() ?? "", AlbumName = j["album"]?.ToString() ?? "", AlbumSubName = "", AlbumArtist = (j["artist"]?.ToString() ?? "").Replace("+", ";"), Length = CommonHelper.NumToTime(j["duration"]?.ToString() ?? "0"), Size = "", BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = "", LrcUrl = "", TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = "1", TrackNum = "", Type = "kw" }; song.PicUrl = CommonHelper.GetSongUrl("kw", "320", song.SongId, "jpg"); song.LrcUrl = CommonHelper.GetSongUrl("kw", "320", song.SongId, "lrc"); var format = j["FORMATS"]?.ToString() ?? j["formats"].ToString(); if (format.Contains("MP3128")) { song.BitRate = "128K"; song.CopyUrl = song.LqUrl = CommonHelper.GetSongUrl("kw", "128", song.SongId, "mp3"); } if (format.Contains("MP3192")) { song.BitRate = "192K"; song.CopyUrl = song.HqUrl = CommonHelper.GetSongUrl("kw", "192", song.SongId, "mp3"); } if (format.Contains("MP3H")) { song.BitRate = "320K"; song.CopyUrl = song.SqUrl = CommonHelper.GetSongUrl("kw", "320", song.SongId, "mp3"); } if (format.Contains("AL")) { song.BitRate = "无损"; song.ApeUrl = CommonHelper.GetSongUrl("kw", "1000", song.SongId, "ape"); } if (format.Contains("MP4")) { song.MvHdUrl = song.MvLdUrl = CommonHelper.GetSongUrl("kw", "1000", song.SongId, "mp4"); } if (format.Contains("MV")) { song.MvLdUrl = CommonHelper.GetSongUrl("kw", "1000", song.SongId, "mkv"); } list.Add(song); } return(list); }
//该API包含的歌曲信息十分全面,但是无法获取搜索结果总数目以及无法指定单页数量 //附带另一个搜索API:http://api.xiami.com/web?v=2.0&app_key=1&key=hello&page=1&limit=30&r=search/songs //该API需要指定Refer:http://m.xiami.com/ //否则提示非法请求 public static SearchResult Search(string key, int page) { var url = "http://www.xiami.com/app/xiating/search-song2?key=" + key + "&uid=0&callback=xiami&page=" + page; var html = CommonHelper.GetHtmlContent(url); var result = new SearchResult { ErrorCode = 200, ErrorMsg = "OK", KeyWord = key, PageNum = page, TotalSize = -1, //-1表示未知 Songs = new List<SongResult>() }; if (string.IsNullOrEmpty(html) || html == "null" || html.Contains("无法在虾米资料库中得到结果")) { result.ErrorCode = 404; result.ErrorMsg = "没有找到符合要求的歌曲"; return result; } try { var json = JObject.Parse(html); var data = json["data"]; foreach (var j in data) { try { if (j["song_status"].ToString() != "0") { continue; //滤除下架歌曲 } var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["song_name"].ToString(), SongSubName = j["sub_title"]?.ToString(), SongLink = "http://www.xiami.com/song/" + j["song_id"], ArtistId = j["artist_id"].ToString(), ArtistName = j["singer"].ToString(), ArtistSubName = j["artist_sub_title"]?.ToString(), AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = j["album_sub_title"]?.ToString(), AlbumArtist = j["artist_name"].ToString(), Length = j["songtime"].ToString(), Size = "", BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), PicUrl = ("http://img.xiami.net/" + j["album_logo"]).Replace("_1.", "_4."), LrcUrl = j["lyric"].ToString(), TrcUrl = "", KrcUrl = j["lyric_karaok"]?.ToString(), MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(string.IsNullOrEmpty(j["gmt_publish"].ToString()) ? "0" : j["gmt_publish"].ToString())).ToString("yyyy-MM-dd"), Disc = j["cd_serial"].ToString(), TrackNum = j["track"].ToString(), Type = "xm" }; if (!string.IsNullOrEmpty(song.LrcUrl)) { if (song.LrcUrl.EndsWith("txt")) { song.LrcUrl = CommonHelper.GetSongUrl("xm", "128", song.SongId, "lrc"); } } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } result.Songs.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex); } } return result; } catch (Exception) { result.ErrorCode = 500; result.ErrorMsg = "解析歌曲时发生错误"; return result; } }
private static List<SongResult> GetListByJson(JToken datas) { var list = new List<SongResult>(); foreach (var j in datas) { try { var song = new SongResult { SongId = j["songId"].ToString(), SongName = j["name"].ToString(), SongSubName = j["alias"]?.ToString(), SongLink = "http://h.dongting.com/yule/app/music_player_page.html?id="+ j["songId"], ArtistId = j["singerId"].ToString(), ArtistName = j["singerName"].ToString(), ArtistSubName = "", AlbumId = j["albumId"].ToString(), AlbumName = j["albumName"].ToString(), AlbumSubName = "", AlbumArtist = j["singerName"].ToString(), Length = "", Size = "", BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = j["picUrl"].ToString(), LrcUrl = CommonHelper.GetSongUrl("tt", "320", j["songId"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = "1", TrackNum = "", Type = "tt" }; if (j["mvList"].First != null && j["mvList"].First.HasValues) { var mvs = j["mvList"]; var max = 0; foreach (JToken mv in mvs) { song.MvId = mv["videoId"].ToString(); if (max == 0) { song.MvHdUrl = mv["url"].ToString(); song.MvLdUrl = mv["url"].ToString(); max = mv["bitRate"].Value<int>(); } else { if (mv["bitRate"].Value<int>() > max) { song.MvHdUrl = mv["url"].ToString(); } else { song.MvLdUrl = mv["url"].ToString(); } } } } var links = j["urlList"]; if (links.ToString() == "[]" || j["urlList"].First == null) { continue; } foreach (JToken link in links) { switch (link["bitRate"].ToString()) { case "128": song.LqUrl = link["url"].ToString(); song.BitRate = "128K"; break; case "192": song.HqUrl = link["url"].ToString(); song.BitRate = "192K"; break; case "320": if (string.IsNullOrEmpty(song.HqUrl)) { song.HqUrl = link["url"].ToString(); } song.SqUrl = link["url"].ToString(); song.BitRate = "320K"; break; } song.Length = link["duration"].ToString().Contains(":") ? link["duration"].ToString() : CommonHelper.NumToTime((link["duration"].Value<int>() / 1000).ToString()); } if (j["llList"] != null && j["llList"].ToString() != "null" && j["llList"].ToString() != "[]") { foreach (JToken wsJToken in j["llList"]) { song.BitRate = "无损"; switch (wsJToken["suffix"].ToString()) { case "wav": song.WavUrl = wsJToken["url"].ToString(); break; case "ape": song.ApeUrl = wsJToken["url"].ToString(); break; case "flac": song.FlacUrl = wsJToken["url"].ToString(); break; default: song.FlacUrl = wsJToken["url"].ToString(); break; } } } song.CopyUrl = CommonHelper.GetSongUrl("tt", "320", song.SongId, "mp3"); list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex); } } return list; }
private static List<SongResult> GetLostAlbum(string id) { var url = "http://api.xiami.com/web?id=" + id + "&r=album%2Fdetail&app_key=09bef203bfa02bfbe3f1cfd7073cb0f3"; var html = CommonHelper.GetHtmlContent(url, 1, new Dictionary<string, string> { {"Referer", "http://m.xiami.com/"} }); if (string.IsNullOrEmpty(html)) { return null; } var json = JObject.Parse(html); var datas = json["data"]["songs"]; var list = new List<SongResult>(); var index = 0; foreach (JToken j in datas) { index++; var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["song_name"].ToString(), SongSubName = "", ArtistId = j["artist_id"].ToString(), ArtistName = j["singers"].ToString(), ArtistSubName = "", AlbumId = j["album_id"].ToString(), AlbumName = j["album_name"].ToString(), AlbumSubName = "", AlbumArtist = json["data"]["artist_name"].ToString(), Length = j["songtime"]?.ToString(), Size = "", BitRate = "320K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), HqUrl = CommonHelper.GetSongUrl("xm", "192", j["song_id"].ToString(), "mp3"), LqUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "mp3"), CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["song_id"].ToString(), "mp3"), PicUrl = j["album_logo"].ToString().Replace("_1.", "_4."), LrcUrl = CommonHelper.GetSongUrl("xm", "128", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mv_id"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(json["data"]["gmt_publish"].ToString())).ToString("yyyy-MM-dd"), Disc = "1", TrackNum = index.ToString(), Type = "xm" }; if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("xm", "hd", song.SongId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("xm", "ld", song.SongId, "mp4"); } } list.Add(song); } return list; }
private static List <SongResult> GetListByJToken(JObject json, bool isPlayList = false) { var datas = isPlayList ? json["playlist"]["tracks"] : json["songs"]; var list = new List <SongResult>(); var index = -1; foreach (var j in datas) { try { index++; //if (json["privileges"][index]["st"].ToString() == "-200") //{ // continue; //} var ar = j["ar"].Aggregate("", (current, jToken) => current + (jToken["name"].ToString() + ";")); var song = new SongResult { SongId = j["id"].ToString(), SongName = j["name"].ToString(), SongSubName = j["alia"].First?.ToString(), SongLink = "http://music.163.com/#/song?id=" + j["id"], ArtistId = j["ar"].First["id"].ToString(), ArtistName = ar.TrimEnd(';'), ArtistSubName = "", AlbumId = j["al"]["id"].ToString(), AlbumName = j["al"]["name"].ToString(), AlbumSubName = j["al"]["alia"]?.First?.ToString(), AlbumArtist = j["ar"].First["name"].ToString(), Length = Convert.ToInt32(j["dt"].ToString()) / 1000, BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", SmallPic = GetPicById(j["al"]["pic"].ToString(), 100), PicUrl = GetPicById(j["al"]["pic"].ToString()), LrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "lrc"), TrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "trc"), KrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "krc"), MvId = j["mv"].ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = string.IsNullOrEmpty(j["cd"]?.ToString()) ? 1 : Convert.ToInt32(j["cd"].ToString().Split('/')[0]), TrackNum = string.IsNullOrEmpty(j["no"]?.ToString()) ? 1 : Convert.ToInt32(j["no"].ToString()), Type = "wy" }; if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("wy", "hd", song.MvId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("wy", "ld", song.MvId, "mp4"); } } var maxBr = json["privileges"][index]["maxbr"].ToString(); if (maxBr == "999000") { song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("wy", "999", song.SongId, "flac"); song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; } else if (maxBr == "320000") { song.BitRate = "320K"; song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; } else if (maxBr == "160000") { song.BitRate = "192K"; song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.HqUrl; } else { song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.LqUrl; } //if (j["fee"].ToString() == "4" || json["privileges"][index]["st"].ToString() != "0") //{ // if (song.BitRate == "无损") // { // song.BitRate = "320K"; // song.FlacUrl = ""; // } //} list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(j.ToString()); CommonHelper.AddLog(ex.ToString()); } } return(list); }
private static List <SongResult> GetListByToken(JToken data) { var list = new List <SongResult>(); foreach (var j in data) { try { var song = new SongResult { SongId = j["songId"].ToString(), SongName = j["songName"].ToString(), SongSubName = j["subName"]?.ToString() ?? "", SongLink = "http://www.xiami.com/song/" + j["songId"], ArtistId = j["singerVOs"]?.First?["artistId"].ToString() ?? "", ArtistName = j["singers"]?.ToString() ?? "", ArtistSubName = j["singerVOs"]?.First?["alias"].ToString() ?? "", AlbumId = j["albumId"]?.ToString() ?? "0", AlbumName = j["albumName"]?.ToString() ?? "", AlbumSubName = j["albumSubName"]?.ToString() ?? "", AlbumArtist = j["artistName"]?.ToString() ?? "", Length = j["length"]?.Value <int>() / 1000 ?? 0, BitRate = "", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = CommonHelper.GetSongUrl("xm", "320", j["songId"].ToString(), "mp3"), SmallPic = j["albumLogo"].ToString().Replace(".jpg", "_1.jpg"), PicUrl = j["albumLogo"].ToString(), LrcUrl = CommonHelper.GetSongUrl("xm", "128", j["songId"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["mvId"]?.ToString() ?? "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = j["gmtCreate"] == null ? "" : CommonHelper.UnixTimestampToDateTime(j["gmtCreate"].Value <long>() / 1000).ToString("yyyy-MM-dd"), Disc = j["cdSerial"].Value <int>(), TrackNum = j["track"].Value <int>(), Type = "xm" }; if (j["lyricInfo"] != null) { song.LrcUrl = j["lyricInfo"]["lyricFile"].ToString(); if (song.LrcUrl.Contains(".trc")) { song.TrcUrl = song.LrcUrl; } } if (j["lyric"] != null) { song.LrcUrl = j["lyric"].ToString(); if (song.LrcUrl.Contains(".trc")) { song.TrcUrl = song.LrcUrl; } } if (j["listenFiles"] != null) { foreach (var jToken in j["listenFiles"]) { var songLink = jToken["listenFile"]?.ToString() ?? jToken["url"].ToString(); switch (jToken["quality"].ToString()) { case "l": if (string.IsNullOrEmpty(song.BitRate)) { song.BitRate = "128K"; } song.LqUrl = songLink; break; case "h": if (song.BitRate != "无损") { song.BitRate = "320K"; } song.HqUrl = song.SqUrl = songLink; break; case "s": song.BitRate = "无损"; switch (jToken["format"].ToString()) { case "flac": song.FlacUrl = songLink; break; case "ape": song.ApeUrl = songLink; break; default: song.WavUrl = songLink; break; } break; } } } else { foreach (var item in j["purviewRoleVOs"]) { if (!item["isExist"].Value <bool>()) { continue; } switch (item["quality"].ToString()) { case "l": if (string.IsNullOrEmpty(song.BitRate)) { song.BitRate = "128K"; } song.LqUrl = CommonHelper.GetSongUrl("xm", "128", song.SongId, "mp3"); break; case "h": if (song.BitRate != "无损") { song.BitRate = "320K"; } song.HqUrl = song.SqUrl = CommonHelper.GetSongUrl("xm", "320", song.SongId, "mp3"); break; case "s": song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("xm", "999", song.SongId, "flac"); break; } } } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog("JsonData:" + JsonConvert.SerializeObject(j)); CommonHelper.AddLog(ex.ToString()); } } return(list); }
private static List <SongResult> GetListByJson(JToken jsons) { if (jsons == null) { return(null); } var list = new List <SongResult>(); foreach (var j in jsons) { try { //if (j["privilege"]["st"].ToString() == "-200") //{ // continue; //} var ar = j["ar"].Aggregate("", (current, jToken) => current + jToken["name"].ToString() + ";"); var song = new SongResult { SongId = j["id"].ToString(), SongName = j["name"].ToString(), SongSubName = j["alia"].First?.ToString(), SongLink = "http://music.163.com/#/song?id=" + j["id"], ArtistId = j["ar"].First["id"].ToString(), ArtistName = ar.TrimEnd(';'), ArtistSubName = "", AlbumId = j["al"]["id"].ToString(), AlbumName = j["al"]["name"].ToString(), AlbumSubName = j["al"]["alia"]?.First?.ToString(), AlbumArtist = j["ar"].First["name"].ToString(), Length = string.IsNullOrEmpty(j["dt"]?.ToString()) ? 0 : Convert.ToInt32(j["dt"].ToString()) / 1000, BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", SmallPic = GetPicById(j["al"]["pic"].ToString(), 100), PicUrl = GetPicById(j["al"]["pic"].ToString()), LrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "lrc"), TrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "trc"), KrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "krc"), MvId = j["mv"].ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = string.IsNullOrEmpty(j["cd"]?.ToString()) ? 1 : Convert.ToInt32(j["cd"].ToString().Split('/')[0]), TrackNum = string.IsNullOrEmpty(j["no"]?.ToString()) ? 1 : Convert.ToInt32(j["no"].ToString()), Type = "wy" }; if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("wy", "hd", song.MvId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("wy", "ld", song.MvId, "mp4"); } } if (j["privilege"] != null) { var maxBr = j["privilege"]["maxbr"].ToString(); switch (maxBr) { case "999000": song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("wy", "999", song.SongId, "flac"); song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; break; case "320000": case "192000": case "190000": song.BitRate = "320K"; song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; break; case "160000": song.BitRate = "192K"; song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.HqUrl; break; default: song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.LqUrl; break; } //if (j["fee"].ToString() == "4" || j["privilege"]["st"].ToString() != "0") //{ // if (song.BitRate == "无损") // { // song.BitRate = "320K"; // song.FlacUrl = ""; // } //} } else { if (j["l"] != null & j["l"].ToString().Contains("fid")) { song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.LqUrl; } if (j["m"] != null & j["m"].ToString().Contains("fid")) { song.BitRate = j["m"]["br"].Value <int>() / 1000 + "K"; song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.HqUrl; } if (j["h"] != null & j["h"].ToString().Contains("fid")) { song.BitRate = j["h"]["br"].Value <int>() / 1000 + "K"; song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; } } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex.ToString()); } } return(list); }
// ★获取歌词 //http://music.qq.com/miniportal/static/lyric/歌曲id求余100/歌曲id.xml // ★获取专辑插图 //http://imgcache.qq.com/music/photo/album/专辑id求余100/albumpic_专辑id_0.jpg //http://vsrcmusic.tc.qq.com/5036372.mp3 //http://vsrc.music.tc.qq.com/A00***.ape //http://vsrc.music.tc.qq.com/F00***.flac //http://vsrc.music.tc.qq.com/M80***.mp3 //http://tsmusic128.tc.qq.com/{$SongId+30000000}.mp3 public static List<SongResult> GetSearchResult(string key, int page) { var url = "http://soso.music.qq.com/fcgi-bin/music_search_new_platform?t=0&n=20&g_tk=157256710&loginUin=584586119&hostUin=0&format=jsonp&inCharset=GB2312&outCharset=utf-8¬ice=0&platform=newframe&jsonpCallback=jsnp_callback&needNewCode=0&w=" + key + "&p=" + page + "&catZhida=1&remoteplace=sizer.newclient.song_all&searchid=11040987310239770213&clallback=jsnp_callback&lossless=0"; var html = CommonHelper.GetHtmlContent(url).Replace("jsnp_callback", "").Trim('(', ')'); if (string.IsNullOrEmpty(html)) { return null; } var jobject = (JObject) JsonConvert.DeserializeObject(html.Replace("&", "&")); if (!jobject.HasValues) return null; if (jobject["data"]["song"]["totalnum"].ToString() == "0") return null; var songs = jobject["data"]["song"]["list"]; var list = new List<SongResult>(); foreach (var song in songs) { if (song["isweiyun"].ToString()=="1") { continue; } var f = song["f"].ToString(); var single = new SongResult(); if (f.Contains("@@")) { var contents = f.Split(new []{"@@"}, StringSplitOptions.RemoveEmptyEntries); single.SongId = System.Web.HttpUtility.HtmlDecode(contents[0].Trim()); single.Name = System.Web.HttpUtility.HtmlDecode(contents[1].Trim()); single.Album = System.Web.HttpUtility.HtmlDecode(contents[2].Trim()); single.AlbumArtist = single.Artist = System.Web.HttpUtility.HtmlDecode(single.Artist = contents[3].Trim()); single.HqUrl = single.LqUrl = single.ExtHqUrl = contents[contents.Length - 4].Trim(); single.BitRate = "128K"; } else { var contents = f.Split(new []{'|'}, StringSplitOptions.RemoveEmptyEntries); single.SongId = contents[0]; single.Name = System.Web.HttpUtility.HtmlDecode(contents[1]); single.Album = System.Web.HttpUtility.HtmlDecode(contents[5]); single.AlbumArtist = single.Artist = System.Web.HttpUtility.HtmlDecode( contents[3]); single.LqUrl = "http://tsmusic128.tc.qq.com/"+(Convert.ToInt32(single.SongId)+ 30000000) +".mp3"; var mid = contents[contents.Length-5]; if (f.Contains("320000|0|")) { single.BitRate = "320K"; single.HqUrl = "http://vsrc.music.tc.qq.com/M800" + mid + ".mp3"; if (!f.Contains("320000|0|0|")) { single.BitRate = "无损"; single.ExtHqUrl = "http://vsrc.music.tc.qq.com/F000" + mid + ".flac"; } } else { single.BitRate = "128K"; single.HqUrl = single.ExtHqUrl = single.LqUrl; } var aid = Convert.ToInt32(contents[4]); single.AlbumId = aid.ToString(); single.PicUrl = "http://imgcache.qq.com/music/photo/album/" + aid % 100 + "/albumpic_" + aid + "_0.jpg"; } single.CopyUrl = single.HqUrl; single.Type = "qq"; list.Add(single); } return list; }
private static List <SongResult> SearchAlbum(string id) { var text = "albumId=" + id; var url = "http://api.sonyselect.com.cn/albumDetail/v1/android/?sign=" + GetDes3EncryptedText(text); var data = "{\"content\":{\"albumId\":\"" + id + "\"},\"header\":{\"sdkNo\":\"4.2.2\",\"model\":\"X9Plus\",\"manufacturer\":\"vivo\",\"imei\":\"133524532901500\"}}"; var html = CommonHelper.PostData(url, new Dictionary <string, string> { { "JSON", data } }, 1); if (string.IsNullOrEmpty(html)) { return(null); } var json = JObject.Parse(html); if (json["content"]["album"]["musicNum"].Value <int>() <= 0) { return(null); } var datas = json["content"]["album"]["tracks"]; var list = new List <SongResult>(); var ar = json["content"]["album"]["aritst"].ToString(); var arId = json["content"]["album"]["artistId"].ToString(); var an = json["content"]["album"]["name"].ToString(); var sm = json["content"]["album"]["smallIcon"].ToString(); var lg = json["content"]["album"]["largeIcon"].ToString(); var index = 0; foreach (JToken j in datas) { index++; var song = new SongResult { SongId = j["id"].ToString(), SongName = j["name"].ToString(), SongSubName = "", SongLink = "", ArtistId = arId, ArtistName = ar, ArtistSubName = "", AlbumId = id, AlbumName = an, AlbumSubName = "", AlbumArtist = ar, Length = CommonHelper.TimeToNum(j["duration"].ToString()), BitRate = "无损", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", SmallPic = sm, PicUrl = lg, LrcUrl = "", TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = j["createTime"]?.ToString(), Disc = 1, TrackNum = index, Type = "sn" }; if (j["auditionUrl"] != null) { var link = j["auditionUrl"].ToString(); song.LqUrl = song.HqUrl = song.SqUrl = song.CopyUrl = link; song.FlacUrl = CommonHelper.GetSongUrl("sn", "1000", song.SongId, "flac"); // link = link.Replace("/Audition/", "/Audio/").Replace(".mp3", ""); // if (j["downloadUrl"] != null) // { // if (j["downloadUrl"].ToString().StartsWith("http")) // { // link = j["downloadUrl"].ToString(); // } // } // if (link.Contains(".flac")) // { // song.FlacUrl = link; // } // else if (link.Contains(".ape")) // { // song.ApeUrl = link; // } // else // { // song.WavUrl = link; // } } list.Add(song); } return(list); }
public static List<SongResult> GetResultsByKey(string key, int page) { var url = "http://mobilecdn.kugou.com/api/v3/search/song?format=jsonp&keyword="+key+"&page="+page+"&pagesize=20&showtype=1"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var json = (JObject)JsonConvert.DeserializeObject(html.Trim('(', ')')); if (Convert.ToInt32(json["data"]["total"]) <= 0) { return null; } var list = new List<SongResult>(); var songs = json["data"]["info"]; foreach (JToken song in songs) { var single = new SongResult {Artist = song["singername"].ToString(), Name = song["filename"].ToString(),Type = "KG"}; if (string.IsNullOrEmpty(single.Artist)) { if (single.Name.Contains("-")) { single.Artist = single.Name.Substring(0, single.Name.IndexOf('-')).Trim(); single.Name = single.Name.Substring(single.Name.IndexOf('-')+1).Trim(); } } else { var name = single.Name.Substring(0, single.Name.IndexOf('-')).Trim(); if (single.Artist.Trim() == name) { single.Name = single.Name.Substring(single.Name.IndexOf('-')+1).Trim(); } } single.AlbumArtist = single.Artist; single.AlbumId = "19930119"; if (!string.IsNullOrEmpty(song["hash"].ToString())) { single.LqUrl = song["hash"].ToString(); single.BitRate = song["bitrate"] + "K"; } if (!string.IsNullOrEmpty(song["mvhash"].ToString())) { single.MvUrl = song["mvhash"].ToString(); } if (!string.IsNullOrEmpty(song["320hash"].ToString())) { single.HqUrl = song["320hash"].ToString(); single.BitRate = "320K"; } if (!string.IsNullOrEmpty(song["sqhash"].ToString())) { single.ExtHqUrl = song["sqhash"].ToString(); single.BitRate = "无损"; } single.CopyUrl = "http://www.musicuu.com/songurl/kg^320^" + single.SongId + ".mp3"; list.Add(single); } return list; }
private static List <SongResult> GetListByJson(JToken songs, bool isArtist = false) { if (songs == null) { return(null); } var list = new List <SongResult>(); foreach (JToken token in songs) { var j = isArtist ? token["musicData"] : token; var ar = j["singer"].Aggregate("", (current, fJToken) => current + fJToken["name"].ToString() + ";") .TrimEnd(';'); var song = new SongResult { SongId = j["songid"].ToString(), SongName = j["songname"]?.ToString().HtmlDecode(), SongSubName = "", SongLink = "http://y.qq.com/portal/song/" + (j["songmid"]?.ToString() ?? j["songid"]) + ".html", ArtistId = j["singer"].First?["id"]?.ToString(), ArtistName = ar.HtmlDecode(), ArtistSubName = "", AlbumId = j["albummid"]?.ToString() ?? "", AlbumName = j["albumname"]?.ToString().HtmlDecode(), AlbumSubName = "", AlbumArtist = j["singer"].First?["name"].ToString().HtmlDecode(), Length = j["interval"].Value <int>(), BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", SmallPic = "", PicUrl = "", LrcUrl = CommonHelper.GetSongUrl("qq", "128", j["songid"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = j["vid"]?.ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = j["pubtime"] == null ? "" : CommonHelper.UnixTimestampToDateTime(Convert.ToInt64(j["pubtime"].ToString())).ToString("yyyy-MM-dd"), Disc = 1, TrackNum = string.IsNullOrEmpty(j["belongCD"]?.ToString()) ? 0 : Convert.ToInt32(j["belongCD"].ToString()), Type = "qq" }; var mid = j["strMediaMid"]?.ToString() ?? (j["media_mid"]?.ToString() ?? j["songmid"]?.ToString()); if (string.IsNullOrEmpty(mid)) { song.BitRate = "320K"; song.LqUrl = song.HqUrl = song.SqUrl = j["songurl"].ToString(); song.CopyUrl = CommonHelper.GetSongUrl("qq", "320", song.SongId, "mp3"); } else { if (j["size128"].ToString() != "0") { song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("qq", "128", mid, "mp3"); } if (j["sizeogg"].ToString() != "0") { song.BitRate = "192K"; song.HqUrl = CommonHelper.GetSongUrl("qq", "192", mid, "ogg"); } if (j["size320"].ToString() != "0") { song.BitRate = "320K"; song.SqUrl = CommonHelper.GetSongUrl("qq", "320", mid, "mp3"); } if (j["sizeape"].ToString() != "0") { song.BitRate = "无损"; song.ApeUrl = CommonHelper.GetSongUrl("qq", "999", mid, "ape"); } if (j["sizeflac"].ToString() != "0") { song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("qq", "999", mid, "flac"); } song.CopyUrl = CommonHelper.GetSongUrl("qq", "320", mid, "mp3"); } if (!string.IsNullOrEmpty(song.MvId)) { song.MvHdUrl = CommonHelper.GetSongUrl("qq", "hd", song.MvId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("qq", "ld", song.MvId, "mp4"); } if (string.IsNullOrEmpty(song.AlbumId)) { song.SmallPic = "http://yyfm.oss-cn-qingdao.aliyuncs.com/anylisten/2311.jpg"; song.PicUrl = "http://yyfm.oss-cn-qingdao.aliyuncs.com/anylisten/23.jpg"; } else { song.SmallPic = "http://i.gtimg.cn/music/photo/mid_album_150/" + song.AlbumId[song.AlbumId.Length - 2] + "/" + song.AlbumId[song.AlbumId.Length - 1] + "/" + song.AlbumId + ".jpg"; song.PicUrl = "http://i.gtimg.cn/music/photo/mid_album_500/" + song.AlbumId[song.AlbumId.Length - 2] + "/" + song.AlbumId[song.AlbumId.Length - 1] + "/" + song.AlbumId + ".jpg"; } list.Add(song); } return(list); }
private static List <SongResult> GetListByJson(JToken jsons) { var list = new List <SongResult>(); foreach (var j in jsons) { try { var ar = j["ar"].Aggregate("", (current, jToken) => current + (jToken["name"].ToString() + ";")); var song = new SongResult { SongId = j["id"].ToString(), SongName = WebUtility.HtmlDecode(j["name"].ToString()), SongSubName = WebUtility.HtmlDecode(j["alia"].First?.ToString()), SongLink = "http://music.163.com/#/song?id=" + j["id"], ArtistId = j["ar"].First["id"].ToString(), ArtistName = WebUtility.HtmlDecode(ar).TrimEnd(';'), ArtistSubName = "", AlbumId = j["al"]["id"].ToString(), AlbumName = WebUtility.HtmlDecode(j["al"]["name"].ToString()), AlbumSubName = WebUtility.HtmlDecode(j["al"]["alia"]?.First?.ToString()), AlbumArtist = WebUtility.HtmlDecode(j["ar"].First["name"].ToString()), Length = CommonHelper.NumToTime((Convert.ToInt32(j["dt"].ToString()) / 1000).ToString()), Size = "", BitRate = "128K", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "jpg"), LrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "lrc"), TrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "trc"), KrcUrl = CommonHelper.GetSongUrl("wy", "320", j["id"].ToString(), "krc"), MvId = j["mv"].ToString(), MvHdUrl = "", MvLdUrl = "", Language = "", Company = "", Year = "", Disc = j["cd"].ToString(), TrackNum = j["no"].ToString(), Type = "wy" }; if (string.IsNullOrEmpty(song.Disc)) { song.Disc = "1"; } if (!string.IsNullOrEmpty(song.MvId)) { if (song.MvId != "0") { song.MvHdUrl = CommonHelper.GetSongUrl("wy", "hd", song.MvId, "mp4"); song.MvLdUrl = CommonHelper.GetSongUrl("wy", "ld", song.MvId, "mp4"); } } var maxBr = j["privilege"]["maxbr"].ToString(); if (maxBr == "999000") { song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("wy", "999", song.SongId, "flac"); song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; } else if (maxBr == "320000") { song.BitRate = "320K"; song.SqUrl = CommonHelper.GetSongUrl("wy", "320", song.SongId, "mp3"); song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.SqUrl; } else if (maxBr == "160000") { song.BitRate = "192K"; song.HqUrl = CommonHelper.GetSongUrl("wy", "160", song.SongId, "mp3"); song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.HqUrl; } else { song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("wy", "128", song.SongId, "mp3"); song.CopyUrl = song.LqUrl; } if (j["fee"].ToString() == "4" || j["privilege"]["st"].ToString() != "0") { if (song.BitRate == "无损") { song.BitRate = "320K"; song.FlacUrl = ""; } } list.Add(song); } catch (Exception ex) { CommonHelper.AddLog(ex); } } return(list); }
private static List <SongResult> GetListByJson(JToken songs) { if (songs == null) { return(null); } var list = new List <SongResult>(); foreach (JToken j in songs) { var song = new SongResult { SongId = j["song_id"].ToString(), SongName = j["title"].ToString(), SongSubName = j["info"]?.ToString(), SongLink = "http://music.baidu.com/song/" + j["song_id"], ArtistId = j["ting_uid"].ToString(), ArtistName = j["author"].ToString(), ArtistSubName = "", AlbumId = j["album_id"].ToString(), AlbumName = j["album_title"].ToString(), AlbumSubName = "", AlbumArtist = j["author"].ToString(), Length = j["file_duration"] == null ? "" : CommonHelper.NumToTime(j["file_duration"].ToString()), Size = "", BitRate = "", FlacUrl = "", ApeUrl = "", WavUrl = "", SqUrl = "", HqUrl = "", LqUrl = "", CopyUrl = "", PicUrl = "", LrcUrl = j["lrclink"]?.ToString() ?? CommonHelper.GetSongUrl("bd", "128", j["song_id"].ToString(), "lrc"), TrcUrl = "", KrcUrl = "", MvId = "", MvHdUrl = "", MvLdUrl = "", Language = j["language"]?.ToString(), Company = "", Year = j["publishtime"]?.ToString(), Disc = "1", TrackNum = j["album_no"]?.ToString(), Type = "bd" }; if (song.ArtistId.Contains(",")) { song.ArtistId = song.ArtistId.Split(',')[0].Trim(); } if (song.AlbumArtist.Contains(",")) { song.AlbumArtist = song.AlbumArtist.Split(',')[0].Trim(); } var rate = j["all_rate"].ToString(); song.BitRate = "128K"; song.LqUrl = CommonHelper.GetSongUrl("bd", "128", song.SongId, "mp3"); if (rate.Contains("192")) { song.BitRate = "192K"; song.HqUrl = CommonHelper.GetSongUrl("bd", "192", song.SongId, "mp3"); } if (rate.Contains("256")) { song.BitRate = "256K"; song.HqUrl = CommonHelper.GetSongUrl("bd", "256", song.SongId, "mp3"); } if (rate.Contains("320")) { song.BitRate = "320K"; song.SqUrl = CommonHelper.GetSongUrl("bd", "320", song.SongId, "mp3"); } if (rate.Contains("flac")) { song.BitRate = "无损"; song.FlacUrl = CommonHelper.GetSongUrl("bd", "2000", song.SongId, "flac"); } song.CopyUrl = CommonHelper.GetSongUrl("bd", "320", song.SongId, "mp3"); if (j["has_mv"].ToString() == "1") { song.MvHdUrl = CommonHelper.GetSongUrl("bd", "hd", song.SongId, "flv"); song.MvLdUrl = CommonHelper.GetSongUrl("bd", "ld", song.SongId, "flv"); } song.PicUrl = CommonHelper.GetSongUrl("bd", "hd", song.SongId, "jpg"); list.Add(song); } return(list); }
public static List<SongResult> GetResultsByKey(string key, int page) { var url = "http://search.kuwo.cn/r.s?all=" + key + "&ft=music&itemset=web_2013&client=kt&pn=" + (page - 1) + "&rn=20&rformat=json&encoding=utf8"; var html = CommonHelper.GetHtmlContent(url); if (string.IsNullOrEmpty(html)) { return null; } var json = (JObject)JsonConvert.DeserializeObject(html.Trim('(', ')')); if (Convert.ToInt32(json["TOTAL"]) <= 0) { return null; } var list = new List<SongResult>(); var songs = json["abslist"]; foreach (JToken song in songs) { var single = new SongResult { SongId = song["MUSICRID"].ToString(), Name = song["SONGNAME"].ToString(), Artist = song["ARTIST"].ToString(), AlbumArtist = song["ARTIST"].ToString(), Album = song["ALBUM"].ToString(), AlbumId = song["ALBUMID"].ToString() }; if (string.IsNullOrEmpty(single.AlbumId)) { single.AlbumId = "5211314"; } var format = song["FORMATS"].ToString(); if (format.Contains("MP3128")) { single.LqUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&br=128kmp3&format=mp3&rid=" + single.SongId; single.BitRate = "128K"; } if (format.Contains("MP3192")) { single.HqUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&br=192kmp3&format=mp3&rid=" + single.SongId; single.BitRate = "192K"; } if (format.Contains("MP3H")) { single.HqUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&br=320kmp3&format=mp3&rid=" + single.SongId; single.LqUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&br=192kmp3&format=mp3&rid=" + single.SongId; single.BitRate = "320K"; } if (format.Contains("AL")) { single.ExtHqUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&br=2000kflac&format=ape&rid=" + single.SongId; single.BitRate = "无损"; } if (format.Contains("MP4")) { single.MvUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&format=mp4&rid=" + single.SongId; } if (format.Contains("MV")) { single.MvUrl = "http://antiserver.kuwo.cn/anti.s?response=url&type=convert_url&format=mkv&rid=" + single.SongId; } single.CopyUrl = "http://www.musicuu.com/songurl/kw^320^" + single.SongId + ".mp3"; single.Type = "KW"; list.Add(single); } return list; }