C#网易云音乐中需付费歌曲的下载助手。
? ? ? ? ? ?網(wǎng)易云音樂要收費了,部分歌曲只能聽不能下載,還是很遺憾的。閑來無事,寫了個收費歌曲的下載助手。
下載鏈接:鏈接:http://pan.baidu.com/s/1ge5stgB 密碼:f9qo
使用方法:
1、安裝.net framework 4.0 (若沒裝的話,下載地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17718)
2、安裝網(wǎng)易云音樂客戶端
3、打開“下載助手”,設置好下載保存地址,如下圖:
4、選中所需下載的音樂,點右鍵,點復制鏈接,如下圖:
5、下載就開始了。。。。。就這么簡單。。。。。
(只要復制歌曲鏈接,就能自動添加到下載助手里面喲,然后自動下載。)
6、可以一個勁復制很多鏈接(重復4操作)。
7、退出軟件,點“”沒用的。。會退到后臺。必須在狀態(tài)欄找到以下圖標,點右鍵,點退出
? ??? ? ? ? ??
8、若覺得對您有幫助,可以發(fā)個微信紅包打賞哦
(微信號:li1239019842)
缺點:
下載的音樂不是高品質(zhì)的。。。
---------------------------------------------------分割線---------------------------------------------------------
原理:通過網(wǎng)易云音樂客戶端復制的音樂鏈接中獲取音樂ID(紅色),
“http://music.163.com/#/m/song?id=27804029&userid=98810162”
將歌曲id替換以下鏈接中“XXXXXX”
http://music.163.com/api/song/detail/?id=XXXXXX&ids=%5BXXXXXX%5D&csrf_token=
網(wǎng)址輸入瀏覽器中返回json語句,其中“mp3Url”即為歌曲鏈接,如下:
http://m2.music.126.net/MEYfrcH-XivohQ01yOsoCw==/3288639278734103.mp3
這就是音樂的下載地址。。。。
-------------------------------------------------源碼--------------------------------------------------------------
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.IO;namespace NeteaseCouldMusicDownload {public partial class Form1 : Form{[System.Runtime.InteropServices.DllImport("user32")]private static extern IntPtr SetClipboardViewer(IntPtr hwnd);[System.Runtime.InteropServices.DllImport("user32")]private static extern IntPtr ChangeClipboardChain(IntPtr hwnd, IntPtr hWndNext);[System.Runtime.InteropServices.DllImport("user32")]private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);const int WM_DRAWCLIPBOARD = 0x308;const int WM_CHANGECBCHAIN = 0x30D;IntPtr NextClipHwnd;private static StreamWriter sw;int id;int finished;Thread t;public Form1(){InitializeComponent();id = 0;}private void btnSelectPath_Click(object sender, EventArgs e){FolderBrowserDialog fbDialog = new FolderBrowserDialog();fbDialog.Description = "請選擇文件保存路徑";if(fbDialog.ShowDialog() == DialogResult.OK){txtPath.Text = fbDialog.SelectedPath;string iniPathName = Environment.CurrentDirectory + "\\Default.ini";OperateIniFile.WriteIniData("Dictionary", "key", txtPath.Text, iniPathName);}}private void AddDownload(string url){url = TransfromUrl(url);if (string.IsNullOrEmpty(url)){return;}if (url != "error"){Song song = DownloadHelper.GetMusicUrl(DownloadHelper.GetWebContent(url));if (song == null){return;}if (File.Exists(txtPath + "\\" + song.songName + "." + song.extension)){File.Delete(txtPath + "\\" + song.songName + "." + song.extension);}DataGridViewRow dr = new DataGridViewRow();dr.CreateCells(dataGridView1);dr.Cells[0].Value = id + 1;dr.Cells[1].Value = song.songName + "." + song.extension;dr.Cells[2].Value = song.singer;dr.Cells[3].Value = (Convert.ToDouble(song.songSize) / 1024 / 1024).ToString("0.00M");dr.Cells[4].Value = "0%";dr.Cells[5].Value = song.songUrl;dataGridView1.Rows.Add(dr);txtUrl.Text = "";id++;t.Resume(); //恢復線程}}private void btnDownload_Click(object sender, EventArgs e){string url = TransfromUrl(txtUrl.Text);if (string.IsNullOrEmpty(url)){MessageBox.Show("請輸入歌曲鏈接!");return;}if (url != "error"){Song song = DownloadHelper.GetMusicUrl(DownloadHelper.GetWebContent(url));if (song == null){MessageBox.Show("找不到歌曲!");return;}if (File.Exists(txtPath + "\\" + song.songName + "." + song.extension)){File.Delete(txtPath + "\\" + song.songName + "." + song.extension);}DataGridViewRow dr = new DataGridViewRow();dr.CreateCells(dataGridView1);dr.Cells[0].Value = id+1;dr.Cells[1].Value = song.songName+"."+song.extension;dr.Cells[2].Value = song.singer;dr.Cells[3].Value = (Convert.ToDouble(song.songSize)/1024/1024).ToString("0.00M");dr.Cells[4].Value = "0%";dr.Cells[5].Value = song.songUrl;dataGridView1.Rows.Add(dr);txtUrl.Text = "";Thread.Sleep(100);id++;t.Resume(); //恢復線程}else{MessageBox.Show("歌曲鏈接錯誤!");}}private string TransfromUrl(string url){if (string.IsNullOrEmpty(url)){return "";}string[] tmp = url.Split(new char[]{'?','=','&'});if (tmp.Length>1 && tmp[1] == "id"){return "http://music.163.com/api/song/detail/?id=" + tmp[2] + "&ids=%5B" + tmp[2] + "%5D&csrf_token=";}elsereturn "error";}private void Form1_Load(object sender, EventArgs e){NextClipHwnd = SetClipboardViewer(this.Handle);string iniPathName = Environment.CurrentDirectory + "\\Default.ini";OperateIniFile.Checkini(iniPathName);string songPath = OperateIniFile.ReadIniData("Dictionary", "key", "Empty", iniPathName);if (System.IO.Directory.Exists(songPath)){txtPath.Text = songPath;}else{txtPath.Text = Environment.CurrentDirectory;OperateIniFile.WriteIniData("Dictionary", "key", txtPath.Text, iniPathName);}t = new Thread(new ThreadStart(DownloadProc));id = 0; //添加下載的數(shù)目finished = 0; //已下載數(shù)t.Start(); //啟動下載線程}private void DownloadProc(){while (true){if (finished < id){DownloadHelper.DownloadFile(ref dataGridView1, txtPath.Text, finished, null);finished++;}else{Thread.Sleep(1000);t.Suspend(); //掛起線程}}}protected override void WndProc(ref System.Windows.Forms.Message m){switch (m.Msg){case WM_DRAWCLIPBOARD://將WM_DRAWCLIPBOARD消息傳遞到下一個觀察鏈中的窗口SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);IDataObject iData = Clipboard.GetDataObject();//檢測文本if (iData.GetDataPresent(DataFormats.Text) | iData.GetDataPresent(DataFormats.OemText)){if (iData != null && System.IO.Directory.Exists(txtPath.Text)){ string url = (String)iData.GetData(DataFormats.Text);AddDownload(url);}}break;default:base.WndProc(ref m);break;}}private void ToolMenuShow_Click(object sender, EventArgs e){this.Show();this.WindowState = FormWindowState.Normal;this.Activate(); //激活窗體給予焦點}private void ToolMenuClose_Click(object sender, EventArgs e){DialogResult dr = MessageBox.Show("確定要退出程序?", "安全提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);if (dr == DialogResult.Yes){notifyIcon1.Visible = false;this.Close();this.Dispose();t.Resume();t.Abort();Application.Exit();}}private void notifyIcon1_MouseClick(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){this.Visible = true;this.WindowState = FormWindowState.Normal;this.notifyIcon1.Visible = true;}}private void Form1_FormClosing(object sender, FormClosingEventArgs e){if (e.CloseReason == CloseReason.UserClosing){e.Cancel = true; //取消關閉操作,表現(xiàn)為不關閉窗體this.Hide(); //隱藏窗體}}} }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Windows.Forms; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Runtime.InteropServices;namespace NeteaseCouldMusicDownload {class Song{public string songUrl { get; set; }public string songName { get; set; }public string singer { get; set; }public string songSize { get; set; }public string extension { get; set; }}class DownloadHelper{/// <summary>/// 獲得Json字符串/// </summary>/// <param name="Url">網(wǎng)址</param>/// <returns></returns>public static string GetWebContent(string Url){string strResult = "";try{HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);//聲明一個HttpWebRequest請求request.Timeout = 30000;//設置連接超時時間request.Headers.Set("Pragma", "no-cache");HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream streamReceive = response.GetResponseStream();StreamReader streamReader = new StreamReader(streamReceive, Encoding.GetEncoding("UTF-8"));strResult = streamReader.ReadToEnd();}catch(Exception e){MessageBox.Show(e.ToString()+":"+e.Message);}return strResult;}/// <summary>/// 解析Json語句,得到音樂信息/// </summary>/// <param name="jsonStr"></param>/// <returns></returns>public static Song GetMusicUrl(string jsonStr){Song song = new Song();JObject jsonobj = JObject.Parse(jsonStr);JArray jar = JArray.Parse(jsonobj["songs"].ToString());if (jar.Count == 0)return null;JObject songobj = JObject.Parse(jar[0].ToString());song.songUrl = songobj["mp3Url"].ToString();song.songName = songobj["name"].ToString();song.singer = JObject.Parse(JArray.Parse(songobj["artists"].ToString())[0].ToString())["name"].ToString();song.songSize = JObject.Parse(songobj["bMusic"].ToString())["size"].ToString();song.extension = JObject.Parse(songobj["bMusic"].ToString())["extension"].ToString();return song;}/// <summary>/// 通過url下載文件/// </summary>/// <param name="URL">網(wǎng)址鏈接</param>/// <param name="filename">保存路徑</param>/// <param name="prog"></param>/// <param name="label1"></param>public static void DownloadFile(ref DataGridView grid,string path,int row,ProgressBar prog){string URL = grid.Rows[row].Cells[5].Value.ToString();string filename = path + "\\" + grid.Rows[row].Cells[1].Value.ToString();float percent = 0;try{System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL);System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse();long totalBytes = myrp.ContentLength;if (prog != null){prog.Maximum = (int)totalBytes;}System.IO.Stream st = myrp.GetResponseStream();System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create);long totalDownloadedByte = 0;byte[] by = new byte[102400];int osize = st.Read(by, 0, (int)by.Length);while (osize > 0){totalDownloadedByte = osize + totalDownloadedByte;System.Windows.Forms.Application.DoEvents();so.Write(by, 0, osize);if (prog != null){prog.Value = (int)totalDownloadedByte;}osize = st.Read(by, 0, (int)by.Length);percent = (float)totalDownloadedByte / (float)totalBytes * 100;grid.Rows[row].Cells[4].Value = percent.ToString("0.0") + "%";System.Windows.Forms.Application.DoEvents(); //必須加注這句代碼,否則label1將因為循環(huán)執(zhí)行太快而來不及顯示信息}so.Close();st.Close();}catch (System.Exception){throw;}}}public class OperateIniFile{#region API函數(shù)聲明[DllImport("kernel32")]//返回0表示失敗,非0為成功private static extern long WritePrivateProfileString(string section, string key,string val, string filePath);[DllImport("kernel32")]//返回取得字符串緩沖區(qū)的長度private static extern long GetPrivateProfileString(string section, string key,string def, StringBuilder retVal, int size, string filePath);#endregion#region 讀Ini文件public static string ReadIniData(string Section, string Key, string NoText, string iniFilePath){if (File.Exists(iniFilePath)){StringBuilder temp = new StringBuilder(1024);GetPrivateProfileString(Section, Key, NoText, temp, 1024, iniFilePath);return temp.ToString();}else{return String.Empty;}}#endregion#region 寫Ini文件public static bool WriteIniData(string Section, string Key, string Value, string iniFilePath){if (File.Exists(iniFilePath)){long OpStation = WritePrivateProfileString(Section, Key, Value, iniFilePath);if (OpStation == 0){return false;}else{return true;}}else{return false;}}#endregionpublic static bool Checkini(string pathName){if (!File.Exists(pathName)){File.Create(pathName).Close();}return true;}} }
總結(jié)
以上是生活随笔為你收集整理的C#网易云音乐中需付费歌曲的下载助手。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东总冠军
- 下一篇: 我敢说,这是最全的常用设计模式汇总