zoukankan      html  css  js  c++  java
  • C#在线获取歌词(转)

    百度有一个公开的歌词下载API,具体介绍可以去看看这位帅哥的日志http://blog.163.com/fengedkail/blog/static/586507602008101575730334/

    using System;
    using System.IO;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Net;

      /// <summary>
      /// 歌词下载类
      /// </summary>
      class DownLoadGeCi
      {
      string urlSongInfor = "http://box.zhangmen.baidu.com/x?op=12&count=1&title={0}$${1}$$$$";//获取歌曲信息的地址
      string urlGeCi = "http://box.zhangmen.baidu.com/bdlrc/";//下载歌词的不完全地址
      /// <summary>
      /// 获取歌词
      /// <param name="songName">歌曲名称</param>
      /// <param name="singerName">演唱人</param>
      /// </summary>
      public string getSongWord(string songName,string singerName)
      {
      urlSongInfor = String.Format(urlSongInfor,songName,singerName);//url地址
      string content = getWebContent(urlSongInfor);//获取歌曲信息
      string matchCount = @"<count>(?<count>\d+)</count>";//匹配找到歌词个数的正则表达式
      string matchLrcid = @"<lrcid>(?<id>\d+)</lrcid>";//匹配歌词加密文件名的正则表达式
      int songCount = 0;//找到歌词个数
      int lrcid = 0;//歌词加密文件名
      Regex regex = new Regex(matchCount);
      Match songInfo= regex.Match(content);
      songCount=Convert.ToInt32(songInfo.Groups["count"].Value);
      if (songCount == 0)
      {
      return "没有找到歌词";//搜索到的歌词数为0
      }
      regex = new Regex(matchLrcid);  
      MatchCollection matchResult=regex.Matches(content);
      foreach (Match temp in matchResult)
      {
      lrcid = Convert.ToInt32(temp.Groups["id"].ToString());
      break;
      }
      int fileID = lrcid/ 100;//计算出加密后的歌词文件名
      urlGeCi += fileID + "/" + lrcid + ".lrc";
      return getWebContent(urlGeCi);
      }
      /// <summary>
      /// 获取远程网页内容
      /// </summary>
      /// <param name="url">url地址</param>
      /// <returns></returns>
      private string getWebContent(string url)
      {
      try
      {
      StringBuilder sb = new StringBuilder("");
      WebRequest request = WebRequest.Create(url);
      request.Timeout = 10000;//10秒请求超时
      StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.GetEncoding("GB2312"));
      while (sr.Peek() >= 0)
      {
      sb.Append(sr.ReadLine());
      }  
      return sb.ToString();
      }
      catch (WebException ex)
      {
      return ex.Message;
      }
        
      }
      }

    示例调用:

    DownLoadGeCi download = new DownLoadGeCi();
    richTxtContent.Text= download.getSongWord("遇","aimini");

  • 相关阅读:
    灾备架构图
    Dashboard有什么用
    第一次使用Docker的完整过程
    网页端的消息接收方式
    我理解中的应用架构
    数字化转型模型
    工业4.0的下一个十年
    一文读懂华为全屋智能一文读懂华为全屋智能
    支付总架构解析
    spring boot:shardingsphere+druid整合seata分布式事务(spring boot 2.3.3)
  • 原文地址:https://www.cnblogs.com/wainiwann/p/2280606.html
Copyright © 2011-2022 走看看