nntplib

源代码: Lib / nntplib.py

该模块定义了NNTP实现NNTP协议客户端的类。它可以用来实现新闻阅读器或海报,或自动新闻处理器。有关NNTP(网络新闻传输协议)的更多信息,请参阅Internet RFC 977

以下是如何使用它的两个小例子。列出关于新闻组的一些统计信息并打印最近10篇文章的主题:

>>> s = NNTP('news.gmane.org')
>>> resp, count, first, last, name = s.group('gmane.comp.python.committers')
>>> print 'Group', name, 'has', count, 'articles, range', first, 'to', last
Group gmane.comp.python.committers has 1071 articles, range 1 to 1071
>>> resp, subs = s.xhdr('subject', first + '-' + last)
>>> for id, sub in subs[-10:]: print id, sub
...
1062 Re: Mercurial Status?
1063 Re: [python-committers]  (Windows) buildbots on 3.x
1064 Re: Mercurial Status?
1065 Re: Mercurial Status?
1066 Python 2.6.6 status
1067 Commit Privileges for Ask Solem
1068 Re: Commit Privileges for Ask Solem
1069 Re: Commit Privileges for Ask Solem
1070 Re: Commit Privileges for Ask Solem
1071 2.6.6 rc 2
>>> s.quit()
'205 Bye!'

要从文件发布文章(这里假定文章有有效的标题,并且您有权在特定的新闻组上发布文章):

>>> s = NNTP('news.gmane.org')
>>> f = open('articlefile')
>>> s.post(f)
'240 Article posted successfully.'
>>> s.quit()
'205 Bye!'

模块本身定义了以下项目:

class nntplib.NNTP(host[, port [, user[, password [, readermode] [, usenetrc]]]])

返回类的新实例NNTP,表示与主机主机上运行的NNTP服务器的连接,并在端口端口侦听。默认端口是119.如果提供了可选的用户密码,或者如果存在合适的凭证/.netrc并且可选标记usenetrc为true(默认值),则使用AUTHINFO USERand AUTHINFO PASS命令来标识和验证服务器的用户。如果可选标志readermode为true,那么amode reader命令在执行认证之前发送。如果您连接到本地计算机上的NNTP服务器并且打算调用特定于阅读器的命令(例如,),则有时需要阅读器模式group。如果你意想不到NNTPPermanentError的话,你可能需要设置readermodereadermode默认为Noneusenetrc默认为True

在版本2.4中更改:添加了usenetrc参数。

exception nntplib.NNTPError

从标准异常派生Exception,这是nntplib模块引发的所有异常的基类。

exception nntplib.NNTPReplyError

从服务器收到意外回复时引发异常。为了向后兼容,异常error_reply相当于这个类。

exception nntplib.NNTPTemporaryError

收到400-499范围内的错误代码时引发异常。为了向后兼容,异常error_temp相当于这个类。

exception nntplib.NNTPPermanentError

当收到500-599范围内的错误代码时引发异常。为了向后兼容,异常error_perm相当于这个类。

exception nntplib.NNTPProtocolError

从服务器收到的回复不是以范围1-5中的数字开头时引发的异常。为了向后兼容,异常error_proto相当于这个类。

exception nntplib.NNTPDataError

响应数据中出现错误时引发异常。为了向后兼容,异常error_data相当于这个类。

1. NNTP对象

NNTP实例具有以下方法。该响应被返回的几乎所有方法的返回元组的第一项是服务器的响应:一个字符串开头的三位数代码。如果服务器的响应表明有错误,则该方法引发上述例外之一。

NNTP.getwelcome()

返回服务器发送的回复初始连接的欢迎消息。(此消息有时包含可能与用户有关的免责声明或帮助信息。)

NNTP.set_debuglevel(level)

设置实例的调试级别。这将控制打印的调试输出量。缺省值,0不会产生调试输出。值1会产生适量的调试输出,通常每个请求或响应只有一行。值2或更高值会产生最大数量的调试输出,记录连接上发送和接收的每条线路(包括消息文本)。

NNTP.newgroups(date, time[, file])

发送一个NEWGROUPS命令。该日期参数应该是以下形式的字符串'yymmdd'指示日期和时间的格式应的字符串'hhmmss'表示的时间。返回组合对(response, groups),其中是自给定日期和时间以来新增的组名列表。如果提供了文件参数,则NEWGROUPS命令的输出将存储在文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果file是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回列表是一个空列表。

NNTP.newnews(group, date, time[, file])

发送一个NEWNEWS命令。在这里,是一个组名,或者'*'日期时间的含义与此相同newgroups()。返回一对邮件(response, articles),其中articles是邮件ID列表。如果提供了文件参数,则NEWNEWS命令的输出将存储在文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果file是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回的列表是一个空列表。

NNTP.list([file])

发送一个LIST命令。返回一对(response, list),其中列表是元组列表。每个元组的形式(group, last, first, flag),其中是一组名,最后第一是最后和第一篇文章的数字(如字符串),和标志'y',如果帖子是允许的,'n'如果不是,'m'如果新闻组主持。(注意排序:最后第一个)。如果提供了文件参数,那么LIST命令的输出存储在一个文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果文件是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回的列表是一个空列表。

NNTP.descriptions(grouppattern)

发送LIST NEWSGROUPS命令,其中grouppattern是RFC2980中指定的wildmat字符串(它基本上与DOS或UNIX shell通配符字符串相同)。返回一个pair (response, list),其中list是包含的元组列表(name, title)

2.4版本中的新功能。

NNTP.description(group)

获取一个组的描述。如果多个组匹配(如果“组”是真正的自变量字符串),则返回第一个匹配。如果没有组匹配,则返回一个空字符串。

这消除了来自服务器的响应代码。如果需要回应代码,请使用descriptions()

2.4版本中的新功能。

NNTP.group(name)

发送一个GROUP命令,其中name是组名称。返回一个元组(response, count, first, last, name),其中count是组中的(估计)数量的文章,首先是组中的第一个文章编号,last是组中的最后一个文章编号,name是组名称。数字以字符串形式返回。

NNTP.help([file])

发送一个HELP命令。返回一对(response, list),其中列表是帮助字符串的列表。如果提供了文件参数,则HELP命令的输出将存储在文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果file是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回的列表是一个空列表。

NNTP.stat(id)

发送一个STAT命令,其中id是消息ID(用'<'and 括起来'>')或商品编号(作为字符串)。返回一个triple (response, number, id),其中number是商品编号(作为字符串),id是消息ID(用'<'和括起来'>')。

NNTP.next()

发送一个NEXT命令。返回stat()

NNTP.last()

发送一个LAST命令。返回stat()

NNTP.head(id)

发送一个HEAD命令,其中id的含义与以前相同stat()。返回一个元组(response, number, id, list),其中前三个元素与for相同stat()list是文章标题列表(一个没有解释的行列表,没有尾随换行符)。

NNTP.body(id[, file])

发送一个BODY命令,其中id的含义与以前相同stat()。如果提供了文件参数,则主体存储在文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果文件是一个文件对象,那么它将开始调用write()它来存储正文的行。返回head()。如果提供了文件,则返回的列表是一个空列表。

NNTP.article(id)

发送一个ARTICLE命令,其中id的含义与以前相同stat()。返回head()

NNTP.slave()

发送一个SLAVE命令。返回服务器的响应

NNTP.xhdr(header, string[, file])

发送XHDR命令。该命令没有在RFC中定义,但是是一个常见的扩展。的报头参数是一个报头的关键字,例如'subject'。该字符串参数应具有的形式'first-last',其中第一最后一个是第一个和最后的文章编号,以搜索。返回一对(response, list),其中list是对的列表(id, text),其中id是商品编号(作为字符串),text是该文章请求的标题的文本。如果提供了文件参数,则XHDR命令的输出将存储在文件中。如果文件是一个字符串,然后该方法将打开一个名称为文件对象,写入并关闭它。如果file是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回的列表是一个空列表。

NNTP.post(file)

使用该POST命令发布文章。的文件参数是其使用其读直至EOF一个打开的文件对象readline()的方法。它应该是一篇格式良好的新闻文章,包括必需的标题。该post()方法自动转义以.。开头的行。

NNTP.ihave(id, file)

发送IHAVE命令。ID是一个消息ID(包含在'<''>')。如果响应不是错误,请按照该方法处理文件post()

NNTP.date()

返回一个三元组(response, date, time),其中包含当前日期和时间以适合于newnews()newgroups()方法的形式。这是一个可选的NNTP扩展,并且可能不被所有服务器支持。

NNTP.xgtitle(name[, file])

处理一个XGTITLE命令,返回一个对(response, list),其中list是包含的元组列表(name, title)。如果提供了文件参数,则XGTITLE命令的输出将存储在文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果file是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回的列表是一个空列表。这是一个可选的NNTP扩展,并且可能不被所有服务器支持。

RFC2980表示“建议不要使用此扩展名”。使用descriptions()description()替代。

NNTP.xover(start, end[, file])

返回一对(resp, list)列表是一个元组列表,其中一个用于由开始结束文章编号分隔的范围中的每篇文章。每个元组都是这种形式(article number, subject, poster, date, id, references, size, lines)。如果提供了文件参数,则XOVER命令的输出将存储在文件中。如果file是一个字符串,那么该方法将打开一个具有该名称的文件对象,写入并关闭它。如果file是一个文件对象,那么它将开始调用write()它来存储命令输出的行。如果提供了文件,则返回的列表是一个空列表。这是一个可选的NNTP扩展,并且可能不被所有服务器支持。

NNTP.xpath(id)

返回一个对(resp, path),其中path是具有消息ID 标识的文章的目录路径。这是一个可选的NNTP扩展,并且可能不被所有服务器支持。

NNTP.quit()

发送一个QUIT命令并关闭连接。一旦调用了这个方法,就不应该调用NNTP对象的其他方法。

扫码关注云+社区

领取腾讯云代金券