博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#在线获取歌词(转)
阅读量:5081 次
发布时间:2019-06-13

本文共 2103 字,大约阅读时间需要 7 分钟。

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

转载于:https://www.cnblogs.com/wainiwann/archive/2011/12/08/2280606.html

你可能感兴趣的文章
Spring MVC 入门(二)
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
BZOJ 1047 HAOI2007 理想的正方形 单调队列
查看>>
各种语言推断是否是手机设备
查看>>
这个看起来有点简单!--------实验吧
查看>>
PHP count down
查看>>
JVM参数调优:Eclipse启动实践
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
strlen函数
查看>>
python的列表与shell的数组
查看>>
关于TFS2010使用常见问题
查看>>
软件工程团队作业3
查看>>
python标准库——queue模块 的queue类(单向队列)
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>