您的位置:首页 > 其它

【原】得心应手小工具开发——初步统计博客园首页博文的回复率

2012-07-17 16:25 495 查看


【开发动机】

经常会习惯性的打开博客园的首页,看一些精彩的技术文章,这里的技术氛围非常不错,大家写博文的热情也一直感染着我。

今天中午时突然有一个想法,统计一下博客园首页的这些博文的回复率吧,顺便练练手。由于是中午休息一个来小时的东西,所以只是作了一个大体的功能实现,没有作太多修饰和输入验证等内容。

【开发实现】

实现的过程也非常简单。

一、新建一个winform项目,画一个简单的窗体,拖几个控件上来。



“统计多少个分页”的意思是想要统计的博客园首页的分页数。

二、实现思路:

1、构造一个list存入欲统计的分页URL

2、对每个URL分别获取HTML源代码,然后通过字符串的检索、定位、剥离再检索的方式取到评论数和阅读数,作为键值对存入Dictionary<>.

3、对Dictionary<>中的数据进行统计,拼接字符串 并显示到TextBox.

三、代码部分

Dictionary<int, int> commentAndRead = new Dictionary<int, int>();
private int totalcomment;
private int totalread;
private void tongji_Click(object sender, EventArgs e)
{
//有多少个分页就构造出多少个url
int pagecount = Convert.ToInt32(this.txtpage.Text);
List<string> pageurls = new List<string>();

for(int i=1;i<=pagecount;i++)
{
if(i==1)
{
string url = @"http://www.cnblogs.com/index.html";
pageurls.Add(url);
}
else
{
string url = @"http://www.cnblogs.com/" + "p" + i;
pageurls.Add(url);
}

}
//按url去读取HTML代码

foreach(var url in pageurls)
{
string strHTML = "";

WebClient wc = new WebClient();
#region 由于公司里访问外网要通过代理,所以要先简单配置一下代理服务器,直接上网的话可以注掉这段
System.Net.WebProxy oWebProxy = new System.Net.WebProxy("172.16.154.100", 8080);
oWebProxy.UseDefaultCredentials = true;
wc.Proxy = oWebProxy;
#endregion

wc.Encoding = Encoding.UTF8; //字符编码
strHTML = wc.DownloadString(url);

//检索HTML中评论与阅读的量
htmldispose(strHTML);

}

//统计,拼接字符串,输出
foreach(var c in commentAndRead)
{
totalread += c.Key;
totalcomment += c.Value;
}

StringBuilder sb = new StringBuilder();
sb.AppendFormat("共检索{0}页,共{1}篇博文 \r\n ",this.txtpage.Text,commentAndRead.Count.ToString());
sb.AppendLine("阅读量:"+totalread);
sb.AppendLine("评论量:" + totalcomment);
sb.AppendLine("回复率:" + ((Convert.ToDouble(totalcomment) / Convert.ToDouble(totalread))*100).ToString("0.00") + "%");
this.textBox2.Text = sb.ToString();

}
private void htmldispose(string html)
{

int commentstart = html.IndexOf("评论(<span id=");
if(commentstart!=-1)
{
int commentend = html.IndexOf("</span>)</a></span> <span class=");
int comment = Convert.ToInt32(html.Substring(commentstart + 37, commentend - commentstart - 37));

string htmlCut = html.Substring(commentend);

int readstart = htmlCut.IndexOf("阅读(<span id=");
int readend = htmlCut.IndexOf("</span>)</a></span></div>");
int read = Convert.ToInt32(htmlCut.Substring(readstart + 32, readend - readstart - 32));

try
{
commentAndRead.Add(read, comment);
}
catch
{
// 有相同数量的阅读量的博文存在,跳过

}

string htmlretain = htmlCut.Substring(readend);
htmldispose(htmlretain);
}
else
{
return;
}

}


【工具演示】



【总结】

通过统计,博客园首页的博文的回复率大约为千分之五左右,个人认为不是很高,希望大家还是多多回复啊,你的回复就是博主推出更多原创的动力啊!

作者:Tony zhao 欢迎访问:找与淘网

本文出处:http://www.cnblogs.com/ytaozhao 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: