Network News Transport Protocol 应用实例---NNTP客户端

NNTP,全称是网络新闻传输协议(Network News Transport Protocol),是一个主要用来阅读和张贴新闻文章到Usenet上的网络传输协议。同时负责新闻在服务器之间的传送。这里介绍一个基于Python库nntplib的客户端实现。


 一. 任务描述:从指定服务器上下载最新的一篇文章,并尽量少包含空行,展示帖子前20行有意义的内容,此处有意义是指不包括空行,如果原帖子的内容中有多个空行,则合并为一个空行显示。代码如下:



 二. 解释一下:

1.整个代码主体由两个try-except模块和一个处理文本显示格式的成员函数块构成;

2.第一个try-except模块建立NNTP连接,在连接成功时汇报成功;失败时汇报失败以及失败原因;

3.第二个try-except模块尝试load指定的新闻组(此处默认为服务器上该新闻组中最新的一篇帖子),并在load失败时抛出异常,这里需要强调的是,由于此时客户端和服务器已经成功连接了,(代码执行到此处说明第一个try-except模块没有抛出异常),因此若本次请求无法load指定帖子的数据,则在抛出异常后,应该quit掉本次连接,也即28,33两行代码的用意;

4.函数disPlayFirst20的设计相对巧妙,简单解释几点:

(1)count变量用来维护向客户端展示的有意义的行数;

(2)采用生成器表达式来提取data中的数据(第55行);

(3)lastBlank表示“当前行的上一行是否为空行”,值为TRUE表示上一行是空行;

(4)为了展示帖子的原生内容,过滤掉所有的引用内容,此处将引用定义为以“>”,或‘|’,或‘in article:’开头,或以“write”、‘wrote’结尾的行;(60-65行中的if条件);

(5)59行将所有的单词转换为小写,因为这里不关心大小写在帖子里面的表意区别,统一转换能减少代码量(upper能将字母全部转换为大写);

(6)67-68两行的意思是:只有在 上一行不空(本行空或不空都行),或者上一行为空时,本行必须不空  这样的条件下,才向屏幕打印当前行的内容;


 

posted @ 2017-09-12 23:07  Ping的博客  阅读(331)  评论(0编辑  收藏  举报