在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 通过api获取网易云音乐歌曲信息(获取mp3地址以及在线播放)

通过api获取网易云音乐歌曲信息(获取mp3地址以及在线播放)

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.06M
  • 下载次数:67
  • 浏览次数:4970
  • 发布时间:2018-09-15
  • 实例类别:C#语言基础
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: API Mp3 音乐 播放 在线

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】


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


标签: API Mp3 音乐 播放 在线

实例下载地址

通过api获取网易云音乐歌曲信息(获取mp3地址以及在线播放)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警