基本信息
源码名称:通过api获取网易云音乐歌曲信息(获取mp3地址以及在线播放)
源码大小:0.06M
文件格式:.zip
开发语言:C#
更新时间:2018-09-15
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 2 元 
   源码介绍


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();
        }
    }
}