nntplib
nntplib — NNTP protocol client
源代码:
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 USER
and AUTHINFO PASS
命令来标识和验证服务器的用户
。如果可选标志readermode
为true,那么amode reader
命令在执行认证之前发送。如果您连接到本地计算机上的NNTP
服务器并且打算调用特定于阅读器的命令(例如,),则有时需要阅读器模式group
。如果你意想不到NNTPPermanentError
的话,你可能需要设置readermode
。readermode
默认为None
。usenetrc
默认为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对象的其他方法。