网易云音乐要收费了,部分歌曲只能听不能下载,还是很遗憾的。闲来无事,写了个收费歌曲的下载助手。

下载链接:链接:http://pan.baidu.com/s/1ge5stgB 密码:f9qo

使用方法:

1、安装.net framework 4.0 (若没装的话,下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17718)

2、安装网易云音乐客户端

3、打开“下载助手”,设置好下载保存地址,如下图:

4、选中所需下载的音乐,点右键,点复制链接,如下图:

5、下载就开始了。。。。。就这么简单。。。。。

(只要复制歌曲链接,就能自动添加到下载助手里面哟,然后自动下载。)

6、可以一个劲复制很多链接(重复4操作)。

7、退出软件,点“”没用的。。会退到后台。必须在状态栏找到以下图标,点右键,点退出

              
8、若觉得对您有帮助,可以发个微信红包打赏哦

(微信号:li1239019842)

缺点:

下载的音乐不是高品质的。。。

---------------------------------------------------分割线---------------------------------------------------------

原理:通过网易云音乐客户端复制的音乐链接中获取音乐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=

网址输入浏览器中返回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;        //添加下载的数目finished = 0;  //已下载数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;  //取消关闭操作,表现为不关闭窗体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">网址</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">网址链接</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将因为循环执行太快而来不及显示信息}so.Close();st.Close();}catch (System.Exception){throw;}}}public class OperateIniFile{#region API函数声明[DllImport("kernel32")]//返回0表示失败,非0为成功private static extern long WritePrivateProfileString(string section, string key,string val, string filePath);[DllImport("kernel32")]//返回取得字符串缓冲区的长度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;}}
}

C#网易云音乐中需付费歌曲的下载助手。相关推荐

  1. Windows解锁网易云音乐客户端变灰歌曲

    变灰歌曲不再有 Windows解锁网易云音乐客户端变灰歌曲 在开启前 我们先打开网易云音乐windows版配置代理服务器 然后返回下载github的项目的地址 解压 在根目录 打开cmd终端命令窗口 ...

  2. 解锁网易云音乐客户端变灰歌曲

    解锁网易云音乐客户端变灰歌曲 最近周杰伦出新歌了,可是最喜欢的网易云木有版权?为了听歌不得不安装多个音乐播放器?喜欢的歌还要收费开会员?这里安利一个超好用的方法,以上问题通通搞定!在分享之前首先分享原 ...

  3. python爬虫爬取网易云音乐歌曲_如何用爬虫获取网易云音乐歌单中的歌曲?

    --------------------------------- 泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题. 喜欢用Github的可以直接看我的项目源码,代码简单.具 ...

  4. python爬网易云_如何用爬虫获取网易云音乐歌单中的歌曲?

    --------------------------------- 泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题. 喜欢用Github的可以直接看我的项目源码,代码简单.具 ...

  5. 网易云音乐中你见过最扎心的热评是什么

    网易云音乐中你见过最扎心的热评是什么? 1.是啊,你wifi在线了,应该是起床了.你4G,应该是出去了.你2G,应该是回乡下了.你又4G了,从乡下回来了,正在和朋友玩.晚上4G 了,害怕和你出去的是男 ...

  6. 一行命令​解锁网易云音乐客户端变灰歌曲

    逛Github发现一个UnblockNeteaseMusic项目,来看看他的介绍: 解锁网易云音乐客户端变灰歌曲 项目地址: https://github.com/nondanee/UnblockNe ...

  7. 从网易云音乐中找出音乐外链制作背景音乐

    从网易云音乐中找出音乐外链 最近想把做的网页放上点背景音乐,因为要放到github page上不想下载,一直想要找网上的链接,无意中Network找到了.ヾ(≧O≦)"嗷~ 先上案例: 步骤 ...

  8. python爬虫网易云音乐评论最多的歌_Python网易云音乐评论爬虫,歌曲的全部评论...

    用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...

  9. 使用Selenium爬取网易云音乐的所有排行榜歌曲

    项目目标: 获取到一些简单的信息,排名,歌曲名称,时长,歌手,并且将歌曲下载下来 抓取分析: 在开始爬取之前需要确保已经安装好selenium,requests,lxml库,通过页面分析得到排行榜榜单 ...

  10. Python3---站在大佬肩膀写爬虫-爬取网易云音乐热歌榜歌曲热评(精彩评论)

    和我一起加入CSDN----程序猿和攻城狮的社区 网易云音乐是我比较喜欢的一个音乐平台,对于特别热爱听歌的人来说,网易云音乐精准的音乐定位和独特歌曲推荐,让人使用起来很舒服.所谓:自古评论出人才,精彩 ...

最新文章

  1. Webpack 的简单介绍
  2. SLAM的前世今生 终于有人说清楚了
  3. 关于计算机网络的好坏处的英语作文,网购的好处和坏处英语作文带翻译
  4. JZOJ 3596. 【CQOI2014】和谐矩阵
  5. sqlserver 2012 查询时提示“目录名称无效”
  6. python3 scarpy
  7. [html] iOS下页面如何启动加载时显示画面图片?如何设置大小?它有什么好处?
  8. SQL数据库不用SQL语句能显示全表的内容_详解mysql数据库sql优化技巧总结
  9. matlab中牛顿迭代程序,牛顿迭代法的MATLAB程序
  10. 微商怎么做推广加好友?教你几招,让你天天涨粉
  11. 微信小程序input输入框屏蔽非法字符
  12. 什么是Windows安全模式?Windows安全模式详解
  13. 愚人节里的巧合与必然:BAT等亮出的AI招牌故事
  14. 安卓-LBS地图显示
  15. vs点击方法跳不到对于的地方_田宫四驱车 狂牛 配VS底盘改装制作全攻略
  16. Poi导入excel(合并单元格)
  17. systemd service unit
  18. 沭阳学爬虫10高效存储MongoDB
  19. moveit双臂机器人程序
  20. 数据库定义语言(DDL)

热门文章

  1. python怎么做一个动态烟花_简单烟花效果.py python firework demo
  2. Android 开机底层优化
  3. WebService的知识总结(一)
  4. 如何下载矢量建筑轮廓
  5. MySQL数据库基础
  6. Python 人脸表情识别
  7. PHP 导出excel合并相同数据单元格
  8. 计算机科学创新大赛,“互联网+”大学生创新创业大赛
  9. 计算判断两条线是否垂直,平行,相交,求相交点坐标
  10. idea创建类时自动添加注释