热门标签 | 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期


推荐阅读
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 本文介绍如何使用Java中的正则表达式来提取字符串中的特定值。通过示例代码和详细解释,帮助开发者掌握正则表达式的使用方法,尤其是如何匹配和提取复杂模式中的数据。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文详细介绍了Java Web应用程序中的过滤器(Filter)功能,包括其作用、实现方式及配置方法。过滤器可以在请求到达目标资源之前对其进行预处理,并在响应返回给客户端之前进行后处理。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
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社区 版权所有