Btspread Search Assistant的开发过程
2016-01-29 23:28
513 查看
-————————————————2016年3月1日更新————————————————
现在btspread已经不能用了,哥准备换掉神器里面的btspread搜索方法,换上btdigg和torrentkitty的搜索函数,大家敬请期待.
————————————————2016年1月30日更新————————————————
其实这货有个bug.
文件名File Name没办法显示中文字符,有时候还提取不到.真是日了狗了.
大家有空的话可以到github上面follow一下不,帮我解决掉这个bug.
————————————————2016年1月30日更新————————————————
上次我不是在我的博客里面弄了发布了一个用C#写的搜片神器么,说起这货的诞生,我还得感谢我那巨懒得老爸。
皇上曰:我要看片!
于是有了片。(略过途中各种艰难的手动搜片过程)
怎么可以这么麻烦啊,于是我就写了个软件,专门为搜片而生。
————————————————我是萌萌哒的分割线————————————————
其实上面只是一个开头,大家不要认为我写个文章就是专门来吐槽父皇大人的。
放代码才是最关键的事情好不。
————————————————我是萌萌哒的分割线————————————————
先上设计流程:
1.从搜索框得到搜索关键字
|
2.得到btspread的链接数组
|
3.分析此数组所指向的各个网页的源代码,得到包含磁链链接的那个网页
|
4.分析这些网页,得到磁力链啊接
|
5.么么哒
————————————————我是萌萌哒的分割线————————————————
这个案例的核心就在于获取网页源代码,以及获取网页源代码之后用正则表达式匹配得到所需的磁力链接.
重点一,提取网页链接列表:
我们先看看怎么获取上图步骤二的链接:
我们在这个网站下面就可以搜索片源:
我以搜007幽灵党为例,我们能在网页源代码里面找到以下语句:
这里
那我们可以用正则表达式:
@"(?<=hash/).*?(?="")"
来得到hash嘛,之后就把:
加在前面就可以了.所有的搜索链接都提取到一个字符数组里面,方便提取下一步的网页源代码
的语句.这就是我们所要提取的磁力链接.
那么,我们就可以用正则表达式匹配
正则表达式:
@"(?<=readonly>).*?(?=</textarea>)"
把提取到某一个字符数组里面放好.
同理:
用@"(?<=Content Size:</div><div class=""col-md-10 col-sm-9 value"">).*?(?=</div>)"得到File Size
用@"(?<=</div> <h3>).*?(?=</h3>)"得到File Name
之后就是显示了,这就不在赘述.
————————————————我是萌萌哒的分割线————————————————
参考资料,感谢以下资料的原作者
正则表达式学习网址:
http://www.cnblogs.com/youring2/archive/2009/11/07/1597786.html
获取源代码的三种方法:
http://www.cnblogs.com/zjfree/archive/2011/03/10/1980325.html
————————————————我是萌萌哒的分割线————————————————
面的大家又要上Github,又要开VS,我就在这里上代码了:
Github地址:https://github.com/K9A2/BtSpread_Assistant
现在btspread已经不能用了,哥准备换掉神器里面的btspread搜索方法,换上btdigg和torrentkitty的搜索函数,大家敬请期待.
————————————————2016年1月30日更新————————————————
其实这货有个bug.
文件名File Name没办法显示中文字符,有时候还提取不到.真是日了狗了.
大家有空的话可以到github上面follow一下不,帮我解决掉这个bug.
————————————————2016年1月30日更新————————————————
上次我不是在我的博客里面弄了发布了一个用C#写的搜片神器么,说起这货的诞生,我还得感谢我那巨懒得老爸。
皇上曰:我要看片!
于是有了片。(略过途中各种艰难的手动搜片过程)
怎么可以这么麻烦啊,于是我就写了个软件,专门为搜片而生。
————————————————我是萌萌哒的分割线————————————————
其实上面只是一个开头,大家不要认为我写个文章就是专门来吐槽父皇大人的。
放代码才是最关键的事情好不。
————————————————我是萌萌哒的分割线————————————————
先上设计流程:
1.从搜索框得到搜索关键字
|
2.得到btspread的链接数组
|
3.分析此数组所指向的各个网页的源代码,得到包含磁链链接的那个网页
|
4.分析这些网页,得到磁力链啊接
|
5.么么哒
————————————————我是萌萌哒的分割线————————————————
这个案例的核心就在于获取网页源代码,以及获取网页源代码之后用正则表达式匹配得到所需的磁力链接.
重点一,提取网页链接列表:
我们先看看怎么获取上图步骤二的链接:我们在这个网站下面就可以搜索片源:
http://www.bt2mag.com/search/(不要告诉我你这个都不知道怎么找到的)
我以搜007幽灵党为例,我们能在网页源代码里面找到以下语句:
<a href="http://www.bt2mag.com/magnet/detail/hash/568901DB746FA104341C76908DBD5A733C8732A2" title="[www.hdmayi.com][007:幽灵党][1080P.BD-RMVB][中英文字幕]">
这里
<a href="到"之间的内容就是我们要提取的第一个网址
那我们可以用正则表达式:
@"(?<=hash/).*?(?="")"
来得到hash嘛,之后就把:
http://www.bt2mag.com/magnet/detail/hash/
加在前面就可以了.所有的搜索链接都提取到一个字符数组里面,方便提取下一步的网页源代码
重点二,提取列表里面每一个网页所包含的磁力链接:
我们分析一下所有的网页源代码,都可以发现一段类似于:<a id="magnetDownload" href="magnet:?xt=urn:btih:568901DB746FA104341C76908DBD5A733C8732A2&dn=%5Bwww.hdmayi.com%5D%5B007%EF%BC%9A%E5%B9%BD%E7%81%B5%E5%85%9A%5D%5B1080P.BD-RMVB%5D%5B%E4%B8%AD%E8%8B%B1%E6%96%87%E5%AD%97%E5%B9%95%5D"
的语句.这就是我们所要提取的磁力链接.
那么,我们就可以用正则表达式匹配
<a id="magnetDownload" href="magnet:?xt=urn:btih:到"之间的内容
正则表达式:
@"(?<=readonly>).*?(?=</textarea>)"
把提取到某一个字符数组里面放好.
同理:
用@"(?<=Content Size:</div><div class=""col-md-10 col-sm-9 value"">).*?(?=</div>)"得到File Size
用@"(?<=</div> <h3>).*?(?=</h3>)"得到File Name
之后就是显示了,这就不在赘述.
————————————————我是萌萌哒的分割线————————————————
参考资料,感谢以下资料的原作者
正则表达式学习网址:
http://www.cnblogs.com/youring2/archive/2009/11/07/1597786.html
获取源代码的三种方法:
http://www.cnblogs.com/zjfree/archive/2011/03/10/1980325.html
————————————————我是萌萌哒的分割线————————————————
面的大家又要上Github,又要开VS,我就在这里上代码了:
Github地址:https://github.com/K9A2/BtSpread_Assistant
using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; namespace 疯狗的神器 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static string BTS_Link = "http://www.bt2mag.com/search/"; //btspread的搜索地址 public static string BTS_Hash_Reg = @"(?<=hash/).*?(?="")"; //求hash的正则表达式 public static string BTS_Hash_Link = "http://www.bt2mag.com/magnet/detail/hash/"; //包含磁力链接的网页的开头 public static string BTS_Mag_Reg = @"(?<=readonly>).*?(?=</textarea>)"; //求mag的正则表达式 public static string BTS_Get_File_Size = @"(?<=Content Size:</div><div class=""col-md-10 col-sm-9 value"">).*?(?=</div>)"; //求文件大小 public static string BTS_Get_File_Name = @"(?<=</div> <h3>).*?(?=</h3>)"; //求文件名 private void button1_Click(object sender, EventArgs e) { textBox2.Clear(); //清除结果框里面的所有搜索结果 string key = textBox1.Text.ToString(); //获取搜索关键字 string searchlink = BTS_Link + key; //获取搜索链接 string[] links = getLinksList(searchlink); //获取网页链接列表 string[] maglinks = getFinalLinks(links); 4000 //获取磁力链接列表 for (int i = 0; i < maglinks.Length; i++) //输出磁力链接列表 { textBox2.AppendText(maglinks[i] + Environment.NewLine + Environment.NewLine); } } public static string[] getFinalLinks(string[] linklist) { //用于在指定的页面获取磁力链接 //获取网页源代码 string[] finallinks = new string[linklist.Length]; string strHtml = ""; for (int i = 0; i < linklist.Length; i++) { //得到网页源代码 strHtml = getHtmlCode(linklist[i]); //正则表达式匹配,得到文件名 Match name = Regex.Match(strHtml, BTS_Get_File_Name); finallinks[i] = finallinks[i] + "----File Name:" + Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(name.ToString())) + "----"; //正则表达式匹配.得到文件大小 Match size = Regex.Match(strHtml, BTS_Get_File_Size); finallinks[i] = finallinks[i] + "File Size:" + size.ToString() + "----" + Environment.NewLine; //正则表达式匹配,得到磁力链接 Match link = Regex.Match(strHtml, BTS_Mag_Reg); finallinks[i] = finallinks[i] + link.ToString(); } return finallinks; } public static string[] getLinksList(string link) { //用于在搜索页面获取包含磁力链接的所有网页链接列表 //获得网页源代码 string strHTML = getHtmlCode(link); //正则表达式匹配hash,获得此资源所有磁力链接页面 MatchCollection mc = Regex.Matches(strHTML, BTS_Hash_Reg); //获得对应的网页数组 string[] linklist = new string[mc.Count]; for (int i = 0; i < mc.Count; i++) { linklist[i] = BTS_Hash_Link + mc[i]; } return linklist; } public static string getHtmlCode(string link) { //获取指定页面的源代码,并返回包含此页面源代码的一个字符串 string strHTML; Uri uri = new Uri(link); HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(uri); myReq.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"; myReq.Accept = "*/*"; myReq.KeepAlive = true; myReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5"); HttpWebResponse result = (HttpWebResponse)myReq.GetResponse(); Stream receviceStream = result.GetResponseStream(); StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("gb2312")); strHTML = readerOfStream.ReadToEnd(); readerOfStream.Close(); receviceStream.Close(); result.Close(); //返回网页源代码 return strHTML; } } }
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程