@@ -57,20 +57,7 @@ public List<Song> SearchSongs(string keyword, int page, int pageSize)
5757
5858 public string getDownloadUrl ( Song song )
5959 {
60- var guid = new Random ( ) . Next ( 1000000000 , 2000000000 ) ;
61-
62- var key = JsonParser . Deserialize ( HttpHelper . GET ( string . Format ( "http://base.music.qq.com/fcgi-bin/fcg_musicexpress.fcg?guid={0}&format=json&json=3" , guid ) , DEFAULT_CONFIG ) ) . key ;
63- foreach ( var prefix in prefixes )
64- {
65-
66- var musicUrl = string . Format ( "http://dl.stream.qqmusic.qq.com/{0}{1}.mp3?vkey={2}&guid={3}&fromtag=1" , prefix , song . id , key , guid ) ;
67- if ( HttpHelper . GetUrlContentLength ( musicUrl ) > 0 )
68- {
69- return musicUrl ;
70- }
71- }
72-
73- return null ;
60+ return getMusicUrl ( song . id , "320" ) ;
7461
7562 }
7663
@@ -248,5 +235,74 @@ public string getDownloadUrl(string id, string rate)
248235 {
249236 return HttpHelper . DetectLocationUrl ( "https://v1.itooi.cn/tencent/url?id=" + id + "&quality=" + rate , DEFAULT_CONFIG ) ;
250237 }
238+
239+ private string GetOggVkey ( string songmid )
240+ {
241+ string param = "{\" comm\" :{\" ct\" :\" 19\" ,\" cv\" :\" 1724\" ,\" patch\" :\" 118\" ,\" uin\" :\" 0\" ,\" wid\" :\" 0\" },\" queryvkey\" :{\" method\" :\" CgiGetEVkey\" ,\" module\" :\" vkey.GetEVkeyServer\" ,\" param\" :{\" checklimit\" :0,\" ctx\" :1,\" downloadfrom\" :0,\" filename\" :[\" O6M0003uw9dp2HcDl2.mgg\" ,\" O6M0" + songmid + ".mgg\" ],\" guid\" :\" CD2594E1E7AD35046B95E7E1482E074B\" ,\" musicfile\" :[\" O6M0003uw9dp2HcDl2.mgg\" ,\" O6M0" + songmid + ".mgg\" ],\" nettype\" :\" \" ,\" referer\" :\" y.qq.com\" ,\" scene\" :0,\" songmid\" :[\" 003uw9dp2HcDl2\" ,\" " + songmid + "\" ],\" songtype\" :[1,1],\" uin\" :\" 1719982754\" }}}" ;
242+ string result = HttpHelper . POST ( "https://u.y.qq.com/cgi-bin/musicu.fcg" , param , DEFAULT_CONFIG ) ;
243+ return ( string ) JObject . Parse ( result ) [ "queryvkey" ] [ "data" ] [ "midurlinfo" ] [ 1 ] [ "purl" ] ;
244+ }
245+
246+ double getGuid ( )
247+ {
248+ return new Random ( ) . Next ( 1000000000 , 2000000000 ) ;
249+ }
250+
251+ string getPurl ( string songmid )
252+ {
253+ string paramStr = "{\" req\" :{\" module\" :\" CDN.SrfCdnDispatchServer\" ,\" method\" :\" GetCdnDispatch\" ,\" param\" :{\" guid\" :\" " + getGuid ( ) + "\" ,\" calltype\" :0,\" userip\" :\" \" }},\" req_0\" :{\" module\" :\" vkey.GetVkeyServer\" ,\" method\" :\" CgiGetVkey\" ,\" param\" :{\" guid\" :\" " + getGuid ( ) + "\" ,\" songmid\" :[\" " + songmid + "\" ],\" songtype\" :[0],\" uin\" :\" 2461958018\" ,\" loginflag\" :1,\" platform\" :\" 20\" }},\" comm\" :{\" uin\" :2461958018,\" format\" :\" json\" ,\" ct\" :24,\" cv\" :0}}" ;
254+ string url = "https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8&data=" + paramStr ;
255+ var response = HttpHelper . GET ( url , DEFAULT_CONFIG ) ;
256+
257+ JObject result = JObject . Parse ( response ) ;
258+ string vkey = ( string ) result [ "req_0" ] [ "data" ] [ "midurlinfo" ] [ 0 ] [ "purl" ] ;
259+ if ( vkey . Length == 0 )
260+ {
261+ return null ;
262+ }
263+
264+ return ( string ) result [ "req_0" ] [ "data" ] [ "sip" ] [ 0 ] + vkey ;
265+ }
266+
267+ public string getMusicUrl ( string songmid , string size )
268+ {
269+
270+ return getPurl ( songmid ) ;
271+
272+ //string vkey = GetOggVkey(songmid);
273+
274+ //if(vkey.Length == 0)
275+ //{
276+ // size = "128";
277+ //}
278+
279+
280+ //string[] prefix = {
281+ //"http://124.89.197.14/amobile.music.tc.qq.com/",
282+ //"http://124.89.197.15/amobile.music.tc.qq.com/",
283+ //"http://isure.stream.qqmusic.qq.com/",
284+ //"http://ws.stream.qqmusic.qq.com/",
285+ //"http://183.240.120.28/amobile.music.tc.qq.com"
286+ //};
287+
288+ //// 选择不同音质
289+ //switch (size)
290+ //{
291+ // case "flac":
292+ // return string.Format("{0}F000{1}.flac?guid=CD2594E1E7AD35046B95E7E1482E074B&vkey={2}&uin=0&fromtag=53", prefix[1], songmid, vkey);
293+ // case "ape":
294+ // return string.Format("{0}A000{1}.ape?guid=CD2594E1E7AD35046B95E7E1482E074B&vkey={2}&uin=0&fromtag=8", prefix[1], songmid, vkey);
295+ // case "320":
296+ // return string.Format("{0}M800{1}.mp3?guid=CD2594E1E7AD35046B95E7E1482E074B&vkey={2}&uin=0&fromtag=30", prefix[1], songmid, vkey);
297+ // case "mgg":
298+ // return string.Format("{0}O6M0{1}.mgg?guid=CD2594E1E7AD35046B95E7E1482E074B&vkey={2}&uin=0&fromtag=77", prefix[1], songmid, vkey);
299+ // case "128":
300+ // {
301+
302+ // }
303+ // default:
304+ // return string.Format("{0}{1}", prefix[3], getPurl(songmid));
305+ //}
306+ }
251307 }
252308}
0 commit comments