public bool Down(string filePath,ref byte[] lrcData,int iThread)
        {
            System.Net.ServicePointManager.DefaultConnectionLimit = iThread;
            string RequestURL = "http://www.cnlyric.com/search.php?k=";
            string ResponseURL = "http://www.cnlyric.com/";
            var m_tools = new NetUtils();
            var m_info = new MusicInfo(filePath, 0);

            string getURL = RequestURL + m_tools.URL_Encoding(m_info.Title, Encoding.GetEncoding("gb2312")) + "&t=s";
            string lrcHtml = m_tools.Http_Get(getURL, Encoding.GetEncoding("gb2312"));

            if (lrcHtml.Equals("")) return false;

            Regex reg = new Regex(@"LrcDown/\d*/\d*.lrc");
            try
            {
                string result = reg.Match(lrcHtml).ToString();
                if (result.Equals("")) return false;

                byte[] gb2312Bytes = new WebClient().DownloadData(ResponseURL + result);
                // 编码统一转换为UTF-8
                lrcData = Encoding.Convert(Encoding.GetEncoding("gb2312"), Encoding.UTF8, gb2312Bytes);
                return true;
            }
            catch (Exception exp)
            {
                return false;
            }
        }
        public bool Down(string filePath, ref byte[] lrcData,int iThread)
        {
            System.Net.ServicePointManager.DefaultConnectionLimit = iThread;
            string RequestURL = "http://music.163.com/api/search/get/web?csrf_token=";
            string ResponseURL = "http://music.163.com/api/song/lyric?os=osx&id=";
            var m_tools = new NetUtils();
            var m_info = new MusicInfo(filePath);

            try
            {
                string postStr = "&s=" + m_tools.URL_Encoding(m_info.Title, Encoding.UTF8) + "&type=1&offset=0&total=true&limit=5";
                string resultJson = m_tools.Http_Post(RequestURL, postStr);

                if (resultJson.Equals("")) return false;

                // 获得歌曲ID
                JObject jsonSID = JObject.Parse(resultJson);
                JArray jsonArraySID = (JArray)jsonSID["result"]["songs"];
                string sid = null;

                // 二级匹配
                bool flag = false;
                foreach (var item in jsonArraySID)
                {
                    if (item["artists"][0]["name"].ToString() == m_info.Singer)
                    {
                        sid = item["id"].ToString();
                        flag = true;
                    }
                }
                if(!flag) sid = jsonArraySID[0]["id"].ToString();

                string lrcUrl = ResponseURL + sid + "&lv=-1&kv=-1&tv=-1";
                string lrcString = m_tools.Http_Get(lrcUrl, Encoding.UTF8, true);

                // 从Json当中分析歌词信息
                JObject lrcObject = JObject.Parse(lrcString);
                string lrcDataString = lrcObject["lrc"]["lyric"].ToString();
                if (lrcDataString.Equals("")) return false;
                // 去掉网易时间轴后一位
                Regex reg = new Regex(@"\[\d+:\d+.\d+\]");
                string deal_ok = reg.Replace(lrcDataString, new MatchEvaluator((Match machs)=>
                {
                    string time = machs.ToString();
                    return time.Remove(time.Length - 2, 1);
                }));

                // 将字符串转换为字节流进行存储
                lrcData = Encoding.UTF8.GetBytes(deal_ok);
                return true;

            }
            catch (Exception)
            {
                return false;
            }
        }
Beispiel #3
0
        public bool Down(string filePath, ref byte[] lrcData, int iThread)
        {
            ServicePointManager.DefaultConnectionLimit = iThread;
            string mainDomain = @"http://www.lrcgc.com/";
            var m_tools = new NetUtils();

            try
            {
                // 获得歌词网页列表
                string getPageLink = mainDomain + "so/?q=" + m_tools.URL_Encoding(new MusicInfo(filePath,0).Title, Encoding.UTF8);
                string lrcHtml = m_tools.Http_Get(getPageLink, Encoding.UTF8);

                // 获得第一个歌词页面
                if (lrcHtml.Equals("")) return false;
                Regex reg = new Regex(@"lyric-\d+-\d+.html");
                string page = reg.Match(lrcHtml).ToString();
                if (page.Equals("")) return false;
                // 筛选ID
                Regex regId = new Regex(@"\d+-\d+");
                string id = regId.Match(page).ToString();
                if (id.Equals("")) return false;

                // 获得歌词具体下载地址
                string getPage = m_tools.Http_Get(mainDomain + page, Encoding.UTF8);
                Regex reg2 = new Regex(@"lrc-" + id + @"/.*.lrc\"">");
                string lrcURL = reg2.Match(getPage).ToString();

                // 下载歌词
                if (lrcURL.Equals("")) return false;
                lrcData = new WebClient().DownloadData(mainDomain + lrcURL.Remove(lrcURL.Length - 2, 2));
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        private bool tmpConvert(string filePath)
        {
            try
            {
                FileStream _rdfs = new FileStream(filePath, FileMode.Open);
                StreamReader _rdsr = new StreamReader(_rdfs);

                string _lrcData = _rdsr.ReadToEnd();
                JObject _jsonLrc = JObject.Parse(_lrcData);
                List<string> _lrcItem = new List<string>();

                // 判断是否有翻译歌词
                if (!_jsonLrc["translateLyric"].ToString().Equals(""))
                {
                    string _orglrc = _jsonLrc["lyric"].ToString();
                    Regex _orgReg = new Regex(@"\[\d+:\d+.\d+\].+");
                    var _orgResult = _orgReg.Matches(_orglrc);
                    foreach (var item in _orgResult)
                    {
                        _lrcItem.Add(item.ToString());
                    }
                    // 获得翻译歌词
                    string _transLrc = _jsonLrc["translateLyric"].ToString();
                    Regex _transReg = new Regex(@"\[\d+:\d+.\d+\].+");
                    var _transResult = _transReg.Matches(_transLrc);
                    // 分割并且并入英文歌词当中
                    int _count = 0;
                    foreach (var item in _transResult)
                    {
                        var _tmp = item.ToString();
                        string[] _lrcItemArray = _tmp.Split(']');
                        _lrcItem[_count] = string.Format("{0} {1}", _lrcItem[_count], _lrcItemArray[1]);
                        _count++;
                    }
                }
                else
                {
                    string _orglrc = _jsonLrc["lyric"].ToString();
                    Regex _orgReg = new Regex(@"\[\d+:\d+.\d+\].+");
                    var _orgResult = _orgReg.Matches(_orglrc);
                    foreach (var item in _orgResult)
                    {
                        _lrcItem.Add(item.ToString());
                    }
                }
                // 获得歌手信息与歌曲名称
                NetUtils nt = new NetUtils();
                string lrcresult = nt.Http_Get(string.Format("http://music.163.com/api/song/detail/?id={0}&ids=%5B{0}%5D", _jsonLrc["musicId"].ToString()), Encoding.UTF8, true);
                JObject _jsonMusic = JObject.Parse(lrcresult);
                JArray _jsonSongs = (JArray)_jsonMusic["songs"];
                JArray _jsonArtists = (JArray)_jsonSongs[0]["artists"];
                string _artist = _jsonArtists[0]["name"].ToString();
                string _title = _jsonSongs[0]["name"].ToString();
                // 构建文件名
                string _fileName = string.Format("{0} - {1}", _artist, _title);

                // 关闭文件流
                _rdsr.Close();
                _rdfs.Close();

                //构造歌词数据
                StringBuilder _sb = new StringBuilder();
                foreach (var item in _lrcItem)
                {
                    _sb.Append(item + "\n");
                }
                // 输出到文件
                string path = Path.GetDirectoryName(filePath) + @"\" + _fileName + ".lrc";
                FileStream _wrfs = new FileStream(path, FileMode.Create);
                byte[] _lrcbyte = Encoding.UTF8.GetBytes(_sb.ToString());
                _wrfs.Write(_lrcbyte, 0, _lrcbyte.Length);
                _wrfs.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }