111,092
社区成员




namespace CMusicSearch.BaiduMusic
{
using CMusicSearch.ISearch;
using CMusicSearch.MusicCommon;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
public class MainSearch : IMusicSearch, IEncoding
{
/// <summary>
/// 获得TR块中每个TD块信息(歌曲地址、歌曲名、歌手名)
/// </summary>
private readonly string BAIDU_MUSIC_INFO_PATTERN = "<td class=tdn>.*?</td><td class=d><a href=\"(?<LinkUrl>.*?)\"\\s+target=.*?>(?<MusicName>.*?)\\s*</a></td><td>(<a.*?>(?<Singer1>.*?)</a>.*?)?(<a.*?>(?<Singer2>.*?)</a>.*?)?(<a.*?>(?<Singer3>.*?)</a>.*?)?(<a.*?>.*?</a>.*?).*?</td>";
/// <summary>
/// 获得TR块中每个TD块信息(专辑名)
/// </summary>
private readonly string BAIDU_MUSIC_INFO_PATTERN_2 = "<td class=al>(<a.*?>(?<Album>.*?)</a>)?.*?</td>";
/// <summary>
/// 获得Baidu网页中所有歌曲信息的TR块的正则表达式
/// </summary>
private readonly string BAIDU_TR_PATTERN = @"<tr>\s*<td class=tdn>.*?</tr>";
/// <summary>
/// 创建音乐获取URL
/// </summary>
/// <param name="info">音乐搜索信息</param>
/// <returns>URL</returns>
public string CreateMusicUrl(SearchMusicInfo info)
{
try
{
string format = "http://mp3.baidu.com/m?f=ms&rf=idx&tn=baidump3&ct=134217728&lf=&rn=&word={0}&lm={1}";
return string.Format(format, new object[] { info.MusicName + CommonSymbol.SYMBOL_SPACE + info.SingerName, info.MusicFormat.ToString("D") });
}
catch
{
return string.Empty;
}
}
/// <summary>
/// 分析返回的DIV快内的歌曲信息
/// </summary>
/// <param name="tr">歌曲tr块的HTML信息</param>
/// <returns>TR块中歌曲信息列表</returns>
private List<MusicInfo> MusicInfoBuild(string tr)
{
List<MusicInfo> list = new List<MusicInfo>();
tr = tr.Replace("\n", string.Empty);
GroupCollection groups = RegexHelper.GetRegexGroup(tr, this.BAIDU_MUSIC_INFO_PATTERN, RegexOptions.IgnoreCase);
if (groups != null)
{
MusicInfo info = new MusicInfo {
MusicSource = "百度音乐",
MusicName = EncodeConverter.HtmlDecode(groups["MusicName"].Value),
Album = EncodeConverter.HtmlDecode(RegexHelper.GetRegexGroupItem(tr, this.BAIDU_MUSIC_INFO_PATTERN_2, "Album", RegexOptions.IgnoreCase)),
SingerName = groups["Singer1"].Value + " " + groups["Singer2"].Value + " " + groups["Singer3"].Value
};
string str = groups["LinkUrl"].Value;
if (string.IsNullOrEmpty(str))
{
return list;
}
List<string> musicUrlList = MusicOperator.GetMusicUrlList(str);
if ((musicUrlList == null) || (musicUrlList.Count == 0))
{
return null;
}
List<string> list3 = musicUrlList;
foreach (string str2 in list3)
{
if (MusicOperator.urlIsValid(str2))
{
MusicInfo item = info.Clone() as MusicInfo;
item.MusicUrl = str2;
item.MusicFormat = MusicOperator.GetMusicFormat(str2);
list.Add(item);
}
}
}
return list;
}
public List<MusicInfo> PageAnalysis(string PageContent)
{
List<MusicInfo> list = new List<MusicInfo>();
try
{
List<string> list2 = RegexHelper.GetRegexStringList(PageContent, this.BAIDU_TR_PATTERN, RegexOptions.Singleline | RegexOptions.IgnoreCase);
if (list2 == null)
{
return list;
}
foreach (string str in list2)
{
list.AddRange(this.MusicInfoBuild(str));
}
}
catch
{
}
return list;
}
/// <summary>
/// 指定当前页面编码方式
/// </summary>
/// <returns></returns>
public Encoding PageEncode()
{
return Encoding.GetEncoding("GB2312");
}
}
}
Type type = a.GetType("BaiduMusic.CMusicSearch.BaiduMusic.MainSearch ", false);