Example #1
0
 /// <summary>
 /// 获取单个音乐的播放链接
 /// </summary>
 /// <param name="api"></param>
 /// <param name="id"></param>
 /// <param name="strMediaMid"></param>
 /// <returns></returns>
 public string GetMusicUrl(int api, string id, string strMediaMid = "")
 {
     if (api == 1)
     {
         string           u    = NeteaseApiUrl + "song/url?id=" + id + "&br=320000";
         Json.GetUrl.Root urls = JsonConvert.DeserializeObject <Json.GetUrl.Root>(GetHTML(u));
         if (urls.data[0].url == null)
         {
             u    = NeteaseApiUrl + "song/url?id=" + id + "&br=128000";
             urls = JsonConvert.DeserializeObject <Json.GetUrl.Root>(GetHTML(u));
         }
         return(urls.data[0].url);
     }
     if (api == 2)
     {
         string         url  = QQApiUrl + "song/url?id=" + id + "&type=320&mediaId=" + strMediaMid;
         QQmusicdetails json = JsonConvert.DeserializeObject <QQmusicdetails>(GetHTML(url));
         if (json.data == null)
         {
             url  = QQApiUrl + "song/url?id=" + id + "&type=128&mediaId=" + strMediaMid;
             json = JsonConvert.DeserializeObject <QQmusicdetails>(GetHTML(url));
         }
         return(json.data);
     }
     return("");
 }
Example #2
0
        /// <summary>
        /// 解析网易云音乐歌单的内部方法
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        private List <MusicInfo> _GetNeteaseMusicList(string ids)
        {
            List <Json.MusicInfo> ret = new List <Json.MusicInfo>();
            string _u = NeteaseApiUrl + "song/detail?ids=" + ids;
            string j  = GetHTML(_u);

            Json.NeteaseMusicDetails.Root mdr = JsonConvert.DeserializeObject <Json.NeteaseMusicDetails.Root>(j);
            string u = NeteaseApiUrl + "song/url?id=" + ids + "&br=" + setting.DownloadQuality;

            Json.GetUrl.Root urls = JsonConvert.DeserializeObject <Json.GetUrl.Root>(GetHTML(u));
            for (int i = 0; i < mdr.songs.Count; i++)
            {
                string        singer   = "";
                List <string> singerid = new List <string>();
                string        _url     = "";

                for (int x = 0; x < mdr.songs[i].ar.Count; x++)
                {
                    singer += mdr.songs[i].ar[x].name + "、";
                    singerid.Add(mdr.songs[i].ar[x].id.ToString());
                }

                for (int x = 0; x < urls.data.Count; x++)
                {
                    if (urls.data[x].id == mdr.songs[i].id)
                    {
                        _url = urls.data[x].url;
                    }
                }

                MusicInfo mi = new MusicInfo()
                {
                    Album  = mdr.songs[i].al.name,
                    Id     = mdr.songs[i].id.ToString(),
                    LrcUrl = NeteaseApiUrl + "lyric?id=" + mdr.songs[i].id.ToString(),
                    PicUrl = mdr.songs[i].al.picUrl + "?param=300y300",
                    Singer = singer.Substring(0, singer.Length - 1),
                    Title  = mdr.songs[i].name,
                    Api    = 1
                };
                ret.Add(mi);
            }
            return(ret);
        }
Example #3
0
        /// <summary>
        /// 下载方法
        /// </summary>
        /// <param name="dl"></param>
        public void Download(List <DownloadList> dl, int api)
        {
            string ids = "";

            if (api == 1)
            {
                int times     = dl.Count / 500;
                int remainder = dl.Count % 500;
                if (remainder == 0)
                {
                    remainder = 500;
                }
                if (times == 0)
                {
                    times = 1;
                }
                for (int i = 0; i < times; i++)
                {
                    if (i == times - 1 && times >= 1)
                    {
                        ids = "";
                        for (int x = 0; x < remainder; x++)
                        {
                            ids += dl[i * 500 + x].Id + ",";
                        }
                        ids = ids.Substring(0, ids.Length - 1);
                        string           u    = NeteaseApiUrl + "song/url?id=" + ids + "&br=" + dl[0].Quality;
                        Json.GetUrl.Root urls = JsonConvert.DeserializeObject <Json.GetUrl.Root>(GetHTML(u));
                        for (int x = 0; x < remainder; x++)
                        {
                            for (int y = 0; y < dl.Count; y++)
                            {
                                if (urls.data[x].id.ToString() == dl[y].Id)
                                {
                                    dl[y].Url   = urls.data[x].url;
                                    dl[y].State = "准备下载";
                                }
                            }
                        }
                    }
                    else
                    {
                        ids = "";
                        for (int x = 0; x < 500; x++)
                        {
                            ids += dl[i * 500 + x].Id + ",";
                        }
                        ids = ids.Substring(0, ids.Length - 1);
                        string           u    = NeteaseApiUrl + "song/url?id=" + ids + "&br=" + dl[0].Quality;
                        Json.GetUrl.Root urls = JsonConvert.DeserializeObject <Json.GetUrl.Root>(GetHTML(u));
                        for (int x = 0; x < 100; x++)
                        {
                            for (int y = 0; y < dl.Count; y++)
                            {
                                if (urls.data[x].id.ToString() == dl[y].Id)
                                {
                                    dl[y].Url   = urls.data[x].url;
                                    dl[y].State = "准备下载";
                                }
                            }
                        }
                    }
                }
            }
            else if (api == 2)
            {
                for (int i = 0; i < dl.Count; i++)
                {
                    string url = QQApiUrl + "song/url?id=" + dl[i].Id + "&type=" + dl[i].Quality.Replace("128000", "128").Replace("320000", "320").Replace("999000", "flac") + "&mediaId=" + dl[i].strMediaMid;
                    using (WebClientPro wc = new WebClientPro())
                    {
                        StreamReader   sr       = new StreamReader(wc.OpenRead(url));
                        string         httpjson = sr.ReadToEnd();
                        QQmusicdetails json     = JsonConvert.DeserializeObject <QQmusicdetails>(httpjson);
                        if (json.result != 100)
                        {
                            url      = url.Replace("flac", "320").Replace("128", "320");
                            sr       = new StreamReader(wc.OpenRead(url));
                            httpjson = sr.ReadToEnd();
                            json     = JsonConvert.DeserializeObject <QQmusicdetails>(httpjson);
                            if (url.IndexOf("flac") != -1 && json.result == 100)
                            {
                                dl[i].Quality = "320000";
                            }
                        }
                        dl[i].Url   = json.data;
                        dl[i].State = "准备下载";
                    }
                }
            }
            downloadlist.AddRange(dl);
            UpdateDownloadPage();
            if (th_Download == null || th_Download?.ThreadState == ThreadState.Stopped)
            {
                th_Download = new Thread(_Download);
                th_Download.Start();
            }
        }