百度有一个公开的歌词下载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");

posted on 2011-12-08 13:21  瓦楞球  阅读(2716)  评论(1编辑  收藏  举报