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


推荐阅读
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文介绍如何使用Java中的正则表达式来提取字符串中的特定值。通过示例代码和详细解释,帮助开发者掌握正则表达式的使用方法,尤其是如何匹配和提取复杂模式中的数据。 ... [详细]
  • 5G至4G空闲态移动TAU流程解析
    本文详细解析了用户从5G网络移动到4G网络时,在空闲态下触发的跟踪区更新(TAU)流程。通过N26接口实现无缝迁移,确保用户体验不受影响。 ... [详细]
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社区 版权所有