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

【开发动机】

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

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

【开发实现】

实现的过程也非常简单。

一、新建一个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    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

posted @ 2012-07-17 16:25  Tony Zhao  阅读(1512)  评论(16编辑  收藏  举报