实例介绍
【实例简介】
【实例截图】
【核心代码】
using Microsoft.Win32;
using System;
using System.Net;
using System.Windows;
using System.Windows.Input;
using NeteaseCloudMusicTool.DataClass;
using System.Windows.Controls;
using System.Windows.Media;
namespace NeteaseCloudMusicTool
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
String jsonDetail = String.Empty;
String jsonUrl = String.Empty;
String id = String.Empty;
String br = "320000";
//String sId = String.Empty;
String sUrl = String.Empty;
String sBr = String.Empty;
String sName = String.Empty;
//String sBitrate = String.Empty;
String sArtist = String.Empty;
String sAlbum = String.Empty;
String sDuration = String.Empty;
String directory = String.Empty;
MediaPlayer player = new MediaPlayer();
public MainWindow()
{
InitializeComponent();
}
private async void btnGetInfo_Click(object sender, RoutedEventArgs e)
{
if (txtId.Text == String.Empty)
{
MessageBox.Show("请输入ID", "网易云音乐工具");
return;
}
if (txtId.Text.Trim().StartsWith("http") || txtId.Text.Trim().StartsWith("https"))
{
try
{
id = GetIdFromLink(txtId.Text);
}
catch (Exception ee) when (String.Equals(ee.Message, "Wrong Url"))
{
MessageBox.Show("歌曲链接格式错误,无法解析出歌曲id");
return;
}
}
else
{
id = txtId.Text;
}
// 获取歌曲详情
try
{
jsonDetail = await MusicApi.GetDetialAsync(id);
// jsonDetial = MusicApi.GetDetial(id);
}
catch (WebException ee) when (String.Equals(ee.Message, "No Internet Exception"))
{
MessageBox.Show("无法连接到网络", "网易云音乐工具");
return;
}
// 歌曲不存在
if (jsonDetail == "{\"songs\":[],\"equalizers\":{},\"code\":200}")
{
MessageBox.Show("没有找到对应歌曲", "网易云音乐工具");
return;
}
else if (jsonDetail == "{\"code\":400}")
{
MessageBox.Show("没有找到对应歌曲", "网易云音乐工具");
return;
}
// 获取歌曲链接
try {
jsonUrl = await MusicApi.GetUrlAsync(id, br);
// jsonUrl = MusicApi.GetUrl(id, br);
}
catch (WebException ee) when (String.Equals(ee.Message, "No Internet Exception"))
{
MessageBox.Show("无法连接到网络", "网易云音乐工具");
return;
}
catch (Exception ee) when (String.Equals(ee.Message, "Error No Response"))
{
MessageBox.Show("向服务器请求数据失败,请重试", "网易云音乐工具");
return;
}
// 解析歌曲信息
SongDetail sdetail = JsonPrase.Prase<SongDetail>(jsonDetail);
sName = sdetail.songs[0].name;
sArtist = String.Empty;
foreach (var artist in sdetail.songs[0].artists) { sArtist = artist.name ","; }
sArtist = sArtist.Substring(0,sArtist.Length-1);
sAlbum = sdetail.songs[0].album.name;
sDuration = sdetail.songs[0].duration;
// 解析歌曲链接
SongUrl surl = JsonPrase.Prase<SongUrl>(jsonUrl);
sUrl = surl.data[0].url;
sBr = surl.data[0].br;
// 更新界面数据
txbName.Text = sName;
txbBitRate.Text = sBr;
txbArtist.Text = sArtist;
txbAlbum.Text = sAlbum;
txbDuration.Text = sDuration;
progressBar.Value = 0;
if (String.Equals(sUrl, null)) { txbUrl.Text = "无法获取下载地址,歌曲可能受版权保护"; }
else { txbUrl.Text = sUrl; }
if (sUrl != null)
{
btnPlay.IsEnabled = true;
btnPlay.Content = " 播放 ";
player.Open(new Uri(sUrl));
btnDownload.IsEnabled = true;
}
}
private String GetIdFromLink(String text)
{
String start1 = "song?id=";
String end1 = "&userid";
String start2 = "song/";
String end2 = "/?userid";
String result = String.Empty;
if (text.IndexOf(start1) >= 0)
{
var indexs = text.IndexOf(start1);
var indexe = text.IndexOf(end1);
result = text.Substring(indexs start1.Length, indexe - (indexs start1.Length)).Trim();
}
else if (text.IndexOf(start2) >= 0)
{
var indexs = text.IndexOf(start2);
var indexe = text.IndexOf(end2);
result = text.Substring(indexs start2.Length, indexe - (indexs start2.Length)).Trim();
}
else
{
throw new Exception("Wrong Url");
}
return result;
}
private void btnDownload_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "mp3文件|*.mp3|wav文件|*.wav|m4a文件|*.m4a|所有文件|*.*";
sfd.FileName = sArtist " - " sName;
if (sfd.ShowDialog() == true)
{
directory = sfd.FileName;
DownloadProgress();
}
}
private void DownloadProgress()
{
try
{
using (WebClient client = new WebClient())
{
// 进度条取消隐藏
progressBar.Visibility = Visibility.Visible;
// 进度条控制
client.DownloadProgressChanged =
delegate (object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
txbProgress.Text = "已下载" progressBar.Value "%";
};
// 下载完成事件
client.DownloadFileCompleted =
delegate (object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (e.Error == null) { txbProgress.Text = "下载完成"; }
else { txbProgress.Text = "下载失败"; }
//MessageBox.Show("下载完成", "网易云音乐工具");
};
// 异步下载文件
client.DownloadFileAsync(new Uri(sUrl), directory);
}
}
catch (WebException)
{
MessageBox.Show("网络错误", "网易云音乐工具");
return;
}
catch (Exception e)
{
MessageBox.Show(e.Message, "网易云音乐工具");
return;
}
}
private void btnPlay_Click(object sender, RoutedEventArgs e)
{
if ((String)((Button)sender).Content == " 暂停 ")
{
((Button)sender).Content = " 播放 ";
if (player.CanPause)
{
player.Pause();
}
}
else if((String)((Button)sender).Content == " 播放 ")
{
((Button)sender).Content = " 暂停 ";
player.Open(new Uri(sUrl));
player.Play();
}
}
private void btnAbout_Click(object sender, RoutedEventArgs e)
{
AboutWindow aw = new AboutWindow();
aw.ShowDialog();
//new AboutWindow().ShowDialog();
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论