热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

献给开发者的大礼--打造CSDN论坛专用阅读器(电脑报2006年11月6日第44期)

CSDN.NET是中国著名的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台。每天,大量的开发者都会到论坛上看帖和回帖,但是在使用过程

 

        

        CSDN.NET是中国著名的IT技术社区,为IT专业技术人员提供最全面的信息传播和服务平台。每天,大量的开发者都会到论坛上看帖和回帖,但是在使用过程中,我感觉有些不方便,主要表现在以下几点:

    •  帖子数量多,还没看到就已经沉下去;
    •  回帖速度快,无法及时获得帖子状态;
    •  广告比较多,看帖速度慢;

        所以,我根据自己的使用习惯,用C#编写了一个CSDN论坛阅读器--Csdn Reader。程序运行界面如图所示。

 

   下面,我就来介绍一下它是如何编写的。

一、 读取帖子列表

  由于不可能获得网站后台数据,我只能通过分析网页的源代码来得到需要的数据。为了获得最新的帖子列表,我使用了以下方法。

1. HttpWebRequest/ HttpWebResponse

  System.Net.HttpWebRequest和System.Net.HttpWebResponse类负责发送以及接收请求,使用户能够直接与使用 HTTP 的服务器交互。

  例如,要获得“.NET技术 ”

(http://community.csdn.net/Expert/ForumsList.asp?typenum=1&roomid=52)的源代码,

  首先,根据指定的网页地址创建HttpWebRequest对象

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);

  然后,创建HttpWebResponse对象接收服务器要返回的信息,也就是源代码,

HttpWebResponse respOnse= (HttpWebResponse)request.GetResponse();

  最后,将获取的信息读取出来即可。

// encoding是网页使用的编码,不设置则为默认值:UTF-8

System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), encoding);

//读取内容到字符串

string Html = sr.ReadToEnd();

2. 正则表达式

分析帖子列表的html源代码,可以发现显示帖子的html格式如下:

帖子标题

用户

分数

回复

时间

这样,就可以建立如下的正则表达式:

string strRegex =

@"[^<]*)""[^<]*target[^<]*>(?[^<]*)[^<]*[^<]*]*>(?[^<]*)[^<]*]*>(?[^<]*)[^<]*]*>(?[^<]*)[^<]*]*>(?[^<]*)";

小知识:什么是正则表达式?

  正则表达式,就是用某种模式去匹配一类字符串的一个公式。正则表达式提供了功能强大、灵活而又高效的方法来处理文本。正则表达式的全面模式匹配表示法可以快速分析大量文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。

     然后,通过Match对象就很容易得到帖子的相关信息。代码如下:

Regex r;

MatchCollection m;

r = new Regex(strRegex, RegexOptions.IgnoreCase);

m = r.Matches(strHTML);

for (int i = 0; i

{

Topic t = new Topic(m[i].Groups["ID"].Value

, m[i].Groups["topic"].Value

, m[i].Groups["user"].Value

, m[i].Groups["Points"].Value

, m[i].Groups["Replies"].Value

, m[i].Groups["ReplayTime"].Value);i

}

    这里,我建了一个Topic类去保存帖子的各项属性,以方便对帖子列表显示进行控制。比如对于新贴子用一个特别的图标表示:

if (int.Parse(t.Replies) == 0)

item1.ImageKey = "NewTopic";

二、 看帖

    打开任一帖子的html代码,可以发现它实际上是一个XML文件,这时就需要使用XSLT。

小知识:什么是XSLT

XSLT的英文标准名称为eXtensible Stylesheet Language Transformation(可扩展样式表语言转换)。XSLT可以将源 XML 文档的内容转换为另一个格式或结构不同的文档。

    由于篇幅有限,这里我就不具体介绍XSLT,其相关信息读者可以查看MSDN。另外, VS.NET2005编辑器支持调试XSLT,可以随时查看转换效果。

    调用XSL的代码如下:

XmlDocument xml = new XmlDocument();

//加载帖子的XML源代码

xml.LoadXml(strHTML);

XslCompiledTransform xslt = new XslCompiledTransform();

//加载XSLT

xslt.Load(Application.StartupPath.Replace(@"\", @"\\") + @"\\csdn.xsl");

//转换后输出到字符串

System.IO.StringWriter writer = new System.IO.StringWriter();

xslt.Transform(xml, null, writer);

strHtml = writer.ToString();

//最后将转换后的HTML显示到WebBrowser控件,IE为控件名

this.IE.Document.Write(strHtml);

三、 回帖

    看贴一定要回帖。同样要使用HttpWebRequest/ HttpWebResponse类,但是这时是向服务器发送数据,需要在使用GetResponse创建HttpWebResponse对象之前先向HttpWebRequest对象写入需要发送的数据,代码如下:

//设置请求为Post

request.COntentType= "application/x-www-form-urlencoded";

request.Method = "POST";

//将发送的数据转换成byte数组

byte[] b = encoding.GetBytes(PostData);

//将数据写入到HttpWebRequest对象

request.COntentLength= b.Length;

System.IO.Stream sw =request.GetRequestStream();

sw.Write(b, 0, b.Length);

sw.Close();

小结

这里介绍的只是CSDN Reader的基本功能。读者可以到http://feiyun0112.cnblogs.com/下载最新的源代码。我会不断的完善和更新,希望大家多提宝贵的意见和建议。

刊登于 电脑报2006年11月6日  第44期


推荐阅读
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 本文详细介绍了如何在Android 4.4及以上版本中配置WebView以实现内容的自动高度调整和屏幕适配,确保中文显示正常,并提供代码示例。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文详细介绍了在使用 SmartUpload 组件进行文件上传时,如何正确配置和查找文件保存路径。通过具体的代码示例和步骤说明,帮助开发者快速解决上传路径配置的问题。 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
author-avatar
风流小姑-娘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有