发现blog是很费资源的东西,也是一个督促自己学习的东西。今天想写又不知道写什么好,另外自己研究的一些代码也没完成,所以还真不知道写什么好。想起昨天自己还使用的baidump3下载程序,就放出来给大家吧,我没经过优化,也没用多线程下载,更没判断文件大小,就是把baidu top500一口气下载下来,下完在听好不好听,不好听就删除。
基本上就使用了webclient + 正则 ,比较简单,具体大家可以看看,然后自己修改了。运行的话,需要一个RichTextBox 控件和按钮,大家自己拉咯。d:/new目录自己建吧,程序没判断,毕竟就自己用的一个小工具,没那么多讲究了,有服务器的还是运行到服务器吧,比较快。原来测试过10M的带宽,3-4个小时可以把500首歌拉完。
代码如下
WebClient webdown
=
new
WebClient();
string url = " http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2 " ;
string tmp = webdown.DownloadString(url);
// RTBInfo.Text = tmp;
string scanStr = @" (?<urlstr>http://mp3.baidu.com/m[?]tn=baidump3&ct=(d+)(S+))(s*)(S+)>(?<songName>S+)< " ; // &(W<urlstr>+) target=_blank>(W<songName>+)</a>";
Regex regScan = new Regex(scanStr, RegexOptions.IgnoreCase | RegexOptions.Compiled);
MatchCollection matchCol_F = regScan.Matches(tmp);
MatchCollection matchCol;
MatchCollection matchCol_S;
foreach (Match mat in matchCol_F)
... {
string songName = mat.Groups["songName"].ToString();
string songUrl = mat.Groups["urlstr"].ToString();
songUrl = songUrl.Remove(songUrl.Length - 1, 1);
if (songName == ")")
...{
continue;
}
RTBInfo.AppendText("下载歌曲:" + songName + " ");
try
...{
tmp = webdown.DownloadString(songUrl);
}
catch
...{
continue;
}
// http://220.181.38.82/m?ct=134217728&tn=baidusg,牛仔很忙 &word=mp3,http://jayhome.pengpeng.com/down/mp3/Y2Jja6OfrLKSm6Wpo5WBmap6oqGaZHqmMQ$$.mp3,,[%C5%A3%D7%D0%BA%DC%C3%A6+%D6%DC%BD%DC%C2%D7]&si=%C5%A3%D7%D0%BA%DC%C3%A6;;%D6%DC%BD%DC%C2%D7;;218633;;218633&lm=16777216
scanStr = @"(?<urlstr>http://(S+)(d+)(D+)" + songName + @"(s*)(D+)mp3(S+)&lm=(d+))";
regScan = new Regex(scanStr, RegexOptions.IgnoreCase | RegexOptions.Compiled);
matchCol = regScan.Matches(tmp);
if (matchCol.Count > 0)
songUrl = matchCol[0].Groups["urlstr"].ToString();
else
continue;
//RTBInfo.AppendText("下载地址2:" + songUrl + " ");
try
...{
tmp = webdown.DownloadString(songUrl);
}
catch
...{
continue;
}
scanStr = @"(?<urlstr>http://(S+)mp3)";
regScan = new Regex(scanStr, RegexOptions.IgnoreCase | RegexOptions.Compiled);
matchCol_S = regScan.Matches(tmp);
foreach (Match mat_S in matchCol_S)
...{
songUrl = mat_S.Groups["urlstr"].ToString();
// RTBInfo.AppendText("下载地址3:" + songUrl + " ");
RTBInfo.AppendText("下载中....");
try
...{
if (File.Exists("d:/new/" + songName + ".mp3")) break;
webdown.DownloadFile(songUrl, "d:/new/" + songName + ".mp3");
}
catch(Exception ex)
...{
RTBInfo.AppendText("下载失败 ");
continue;
}
RTBInfo.AppendText("下载成功 ");
break;
}
}
RTBInfo.AppendText( " 下载结束 " );
string url = " http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2 " ;
string tmp = webdown.DownloadString(url);
// RTBInfo.Text = tmp;
string scanStr = @" (?<urlstr>http://mp3.baidu.com/m[?]tn=baidump3&ct=(d+)(S+))(s*)(S+)>(?<songName>S+)< " ; // &(W<urlstr>+) target=_blank>(W<songName>+)</a>";
Regex regScan = new Regex(scanStr, RegexOptions.IgnoreCase | RegexOptions.Compiled);
MatchCollection matchCol_F = regScan.Matches(tmp);
MatchCollection matchCol;
MatchCollection matchCol_S;
foreach (Match mat in matchCol_F)
... {
string songName = mat.Groups["songName"].ToString();
string songUrl = mat.Groups["urlstr"].ToString();
songUrl = songUrl.Remove(songUrl.Length - 1, 1);
if (songName == ")")
...{
continue;
}
RTBInfo.AppendText("下载歌曲:" + songName + " ");
try
...{
tmp = webdown.DownloadString(songUrl);
}
catch
...{
continue;
}
// http://220.181.38.82/m?ct=134217728&tn=baidusg,牛仔很忙 &word=mp3,http://jayhome.pengpeng.com/down/mp3/Y2Jja6OfrLKSm6Wpo5WBmap6oqGaZHqmMQ$$.mp3,,[%C5%A3%D7%D0%BA%DC%C3%A6+%D6%DC%BD%DC%C2%D7]&si=%C5%A3%D7%D0%BA%DC%C3%A6;;%D6%DC%BD%DC%C2%D7;;218633;;218633&lm=16777216
scanStr = @"(?<urlstr>http://(S+)(d+)(D+)" + songName + @"(s*)(D+)mp3(S+)&lm=(d+))";
regScan = new Regex(scanStr, RegexOptions.IgnoreCase | RegexOptions.Compiled);
matchCol = regScan.Matches(tmp);
if (matchCol.Count > 0)
songUrl = matchCol[0].Groups["urlstr"].ToString();
else
continue;
//RTBInfo.AppendText("下载地址2:" + songUrl + " ");
try
...{
tmp = webdown.DownloadString(songUrl);
}
catch
...{
continue;
}
scanStr = @"(?<urlstr>http://(S+)mp3)";
regScan = new Regex(scanStr, RegexOptions.IgnoreCase | RegexOptions.Compiled);
matchCol_S = regScan.Matches(tmp);
foreach (Match mat_S in matchCol_S)
...{
songUrl = mat_S.Groups["urlstr"].ToString();
// RTBInfo.AppendText("下载地址3:" + songUrl + " ");
RTBInfo.AppendText("下载中....");
try
...{
if (File.Exists("d:/new/" + songName + ".mp3")) break;
webdown.DownloadFile(songUrl, "d:/new/" + songName + ".mp3");
}
catch(Exception ex)
...{
RTBInfo.AppendText("下载失败 ");
continue;
}
RTBInfo.AppendText("下载成功 ");
break;
}
}
RTBInfo.AppendText( " 下载结束 " );