nntplib.md
1> **Источник:** https://python-all.ru/2.7/library/nntplib.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.11. [`nntplib`](https://python-all.ru/2.7/library/nntplib.html#module-nntplib) – клиент протокола NNTP89**Исходный код:** [Lib/nntplib.py](https://python-all.ru/src/2.7/Lib/nntplib.py)1011---1213Этот модуль определяет класс [`NNTP`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP), который реализует клиентскую сторону протокола NNTP. Он может использоваться для создания программы чтения новостей или автоматических обработчиков новостей. Для получения дополнительной информации о NNTP (Network News Transfer Protocol, протоколе передачи новостей), см. Internet [**RFC 977**](https://python-all.ru/2.7/library/nntplib.html).1415Вот два небольших примера использования. Чтобы вывести статистику по группе новостей и напечатать темы последних 10 статей:1617```python18>>> s = NNTP('news.gmane.org')19>>> resp, count, first, last, name = s.group('gmane.comp.python.committers')20>>> print 'Group', name, 'has', count, 'articles, range', first, 'to', last21Group gmane.comp.python.committers has 1071 articles, range 1 to 107122>>> resp, subs = s.xhdr('subject', first + '-' + last)23>>> for id, sub in subs[-10:]: print id, sub24...251062 Re: Mercurial Status?261063 Re: [python-committers] (Windows) buildbots on 3.x271064 Re: Mercurial Status?281065 Re: Mercurial Status?291066 Python 2.6.6 status301067 Commit Privileges for Ask Solem311068 Re: Commit Privileges for Ask Solem321069 Re: Commit Privileges for Ask Solem331070 Re: Commit Privileges for Ask Solem341071 2.6.6 rc 235>>> s.quit()36'205 Bye!'37```3839Чтобы отправить статью из файла (предполагается, что статья имеет корректные заголовки и у вас есть право публиковать сообщения в данной группе новостей):4041```python42>>> s = NNTP('news.gmane.org')43>>> f = open('articlefile')44>>> s.post(f)45'240 Article posted successfully.'46>>> s.quit()47'205 Bye!'48```4950Сам модуль определяет следующие элементы:5152#### `class nntplib.NNTP(host[, port [, user[, password [, readermode] [, usenetrc]]]])`5354Возвращает новый экземпляр класса [`NNTP`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP), представляющий подключение к серверу NNTP, работающему на узле *host*, прослушивающему порт *port*. По умолчанию порт *port* – 119. Если указаны необязательные *user* и *password*, или если соответствующие учетные данные присутствуют в `/.netrc` и необязательный флаг *usenetrc* истинен (по умолчанию), то для идентификации и аутентификации пользователя на сервере используются команды `AUTHINFO USER` и `AUTHINFO PASS`. Если необязательный флаг *readermode* истинен, то команда `mode reader` отправляется перед выполнением аутентификации. Режим чтения иногда необходим если вы подключаетесь к серверу NNTP на локальной машине и собираетесь вызывать команды, специфичные для режима чтения, такие как `group`. Если вы получаете неожиданные [`NNTPPermanentError`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTPPermanentError), возможно, вам потребуется установить *readermode*. *readermode* по умолчанию равен `None`. *usenetrc* по умолчанию равен `True`.5556Изменено в версии 2.4: добавлен аргумент *usenetrc*.5758#### `exception nntplib.NNTPError`5960Производный от стандартного исключения [`Exception`](https://python-all.ru/2.7/library/exceptions.html#exceptions.Exception), это базовый класс для всех исключений, вызываемых модулем [`nntplib`](https://python-all.ru/2.7/library/nntplib.html#module-nntplib).6162#### `exception nntplib.NNTPReplyError`6364Исключение, вызываемое при получении неожиданного ответа от сервера. Для обратной совместимости исключение `error_reply` эквивалентно этому классу.6566#### `exception nntplib.NNTPTemporaryError`6768Исключение, вызываемое при получении кода ошибки в диапазоне 400–499. Для обратной совместимости исключение `error_temp` эквивалентно этому классу.6970#### `exception nntplib.NNTPPermanentError`7172Исключение, вызываемое при получении кода ошибки в диапазоне 500–599. Для обратной совместимости исключение `error_perm` эквивалентно этому классу.7374#### `exception nntplib.NNTPProtocolError`7576Исключение, вызываемое при получении ответа от сервера, который не начинается с цифры в диапазоне 1–5. Для обратной совместимости исключение `error_proto` эквивалентно этому классу.7778#### `exception nntplib.NNTPDataError`7980Исключение, вызываемое при наличии ошибки в данных ответа. Для обратной совместимости исключение `error_data` эквивалентно этому классу.8182## 20.11.1. Объекты NNTP8384Экземпляры NNTP имеют следующие методы. *response*, возвращаемый как первый элемент кортежа результатов почти всех методов, – это ответ сервера: строка, начинающаяся с трёхзначного кода. Если ответ сервера указывает на ошибку, метод вызывает одно из перечисленных выше исключений.8586#### `NNTP.getwelcome()`8788Возвращает приветственное сообщение, отправленное сервером в ответ на начальное подключение. (Это сообщение иногда содержит отказ от ответственности или справочную информацию, которая может быть полезна пользователю.)8990#### `NNTP.set_debuglevel(level)`9192Устанавливает уровень отладки экземпляра. Он управляет объёмом выводимых отладочных сообщений. Значение по умолчанию, `0`, не выводит отладочные сообщения. Значение `1` выдаёт умеренное количество отладочной информации, обычно одну строку на запрос или ответ. Значение `2` или больше выводит максимальный объём отладочной информации, регистрируя каждую отправленную и полученную строку соединения (включая текст сообщения).9394#### `NNTP.newgroups(date, time[, file])`9596Отправляет команду `NEWGROUPS`. Аргумент *date* должен быть строкой вида `'yymmdd'`, указывающей дату, а *time* – строкой вида `'hhmmss'`, указывающей время. Возвращает пару `(response, groups)`, где *groups* – это список имен групп, которые появились с указанной даты и времени. Если указан параметр *file*, то вывод команды `NEWGROUPS` сохраняется в файл. Если *file* – строка, то метод откроет файловый объект с этим именем, запишет в него и закроет. Если *file* – файловый объект, то он начнет вызывать `write()` для сохранения строк вывода команды. Если указан *file*, то возвращаемый *list* будет пустым списком.9798#### `NNTP.newnews(group, date, time[, file])`99100Отправляет команду `NEWNEWS`. Здесь *group* – имя группы или `'*'`, а *date* и *time* имеют то же значение, что и для [`newgroups()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.newgroups). Возвращает пару `(response, articles)`, где *articles* – это список идентификаторов сообщений. Если указан параметр *file*, то вывод команды `NEWNEWS` сохраняется в файл. Если *file* – строка, то метод откроет файловый объект с этим именем, запишет в него и закроет. Если *file* – файловый объект, то он начнет вызывать `write()` для сохранения строк вывода команды. Если указан *file*, то возвращаемый *list* будет пустым списком.101102#### `NNTP.list([file])`103104Отправляет команду `LIST`. Возвращает пару `(response, list)`, где *list* – список кортежей. Каждый кортеж имеет вид `(group, last, first, flag)`, где *group* – имя группы, *last* и *first* – номера последней и первой статей (в виде строк), а *flag* равен `'y'`, если отправка разрешена, `'n'`, если нет, и `'m'`, если группа модерируется. (Обратите внимание на порядок: *last*, *first*.) Если указан параметр *file*, то вывод команды `LIST` сохраняется в файл. Если *file* – строка, то метод откроет файловый объект с этим именем, запишет в него и закроет. Если *file* – файловый объект, то он начнет вызывать `write()` для сохранения строк вывода команды. Если указан *file*, то возвращаемый *list* будет пустым списком.105106#### `NNTP.descriptions(grouppattern)`107108Отправляет команду `LIST NEWSGROUPS`, где *grouppattern* – строка wildmat, как указано в RFC2980 (по сути, это то же самое, что строки подстановки DOS или UNIX shell strings). Возвращает пару `(response, list)`, где *list* – список кортежей, содержащих `(name, title)`.109110Новое в версии 2.4.111112#### `NNTP.description(group)`113114Получает описание для одной группы *group*. Если совпадает несколько групп (если ‘group’ – это строка шаблона wildmat), возвращается первое совпадение. Если ни одна группа не совпадает, возвращается пустая строка.115116Этот метод скрывает код ответа от сервера. Если код ответа необходим, используйте [`descriptions()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.descriptions).117118Новое в версии 2.4.119120#### `NNTP.group(name)`121122Отправляет команду `GROUP`, где *name* – имя группы. Возвращает кортеж `(response, count, first, last, name)`, где *count* – (приблизительное) количество статей в группе, *first* – номер первой статьи в группе, *last* – номер последней статьи в группе, и *name* – имя группы. Номера возвращаются в виде строк.123124#### `NNTP.help([file])`125126Отправляет команду `HELP`. Возвращает пару `(response, list)`, где *list* – список строк справки. Если указан параметр *file*, то вывод команды `HELP` сохраняется в файл. Если *file* – строка, то метод откроет файловый объект с этим именем, запишет в него и закроет. Если *file* – файловый объект, то он начнет вызывать `write()` для сохранения строк вывода команды. Если указан *file*, то возвращаемый *list* будет пустым списком.127128#### `NNTP.stat(id)`129130Отправляет команду `STAT`, где *id* – идентификатор сообщения (заключенный в `'<'` и `'>'`) или номер статьи (в виде строки). Возвращает тройку `(response, number, id)`, где *number* – номер статьи (в виде строки), а *id* – идентификатор сообщения (заключенный в `'<'` и `'>'`).131132#### `NNTP.next()`133134Отправляет команду `NEXT`. Возвращаемое значение такое же, как для [`stat()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.stat).135136#### `NNTP.last()`137138Отправляет команду `LAST`. Возвращаемое значение такое же, как для [`stat()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.stat).139140#### `NNTP.head(id)`141142Отправляет команду `HEAD`, где *id* имеет то же значение, что и для [`stat()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.stat). Возвращает кортеж `(response, number, id, list)`, где первые три элемента те же, что и для [`stat()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.stat), а *list* – список заголовков статьи (неинтерпретированный список строк, без завершающих символов новой строки).143144#### `NNTP.body(id[, file])`145146Отправляет команду `BODY`, где *id* имеет то же значение, что и для [`stat()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.stat). Если указан параметр *file*, то тело сохраняется в файл. Если *file* – строка, то метод откроет файловый объект с этим именем, запишет в него и закроет. Если *file* – файловый объект, то он начнет вызывать `write()` для сохранения строк тела. Возвращает то же, что и [`head()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.head). Если указан *file*, то возвращаемый *list* будет пустым списком.147148#### `NNTP.article(id)`149150Отправляет команду `ARTICLE`, где *id* имеет то же значение, что и для [`stat()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.stat). Возвращает то же, что и [`head()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.head).151152#### `NNTP.slave()`153154Отправляет команду `SLAVE`. Возвращает *ответ сервера*.155156#### `NNTP.xhdr(header, string[, file])`157158Отправляет команду `XHDR`. Эта команда не определена в RFC, но является распространенным расширением. Аргумент *header* – ключевое слово заголовка, например, `'subject'`. Аргумент *string* должен иметь вид `'first-last'`, где *first* и *last* – номера первой и последней статей для поиска. Возвращает пару `(response, list)`, где *list* – список пар `(id, text)`, где *id* – номер статьи (в виде строки), а *text* – текст запрошенного заголовка для этой статьи. Если указан параметр *file*, то вывод команды `XHDR` сохраняется в файл. Если *file* – строка, то метод откроет файловый объект с этим именем, запишет в него и закроет его. Если *file* – файловый объект, то он начнет вызывать `write()` для сохранения строк вывода команды. Если указан *file*, то возвращаемый *list* будет пустым списком.159160#### `NNTP.post(file)`161162Отправляет статью с помощью команды `POST`. Аргумент *file* – открытый файловый объект, который читается до конца (EOF) с помощью его метода [`readline()`](https://python-all.ru/2.7/library/stdtypes.html#file.readline). Это должна быть правильно оформленная новостная статья, включающая необходимые заголовки. Метод [`post()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.post) автоматически экранирует строки, начинающиеся с `.`.163164#### `NNTP.ihave(id, file)`165166Отправляет команду `IHAVE`. *id* – это идентификатор сообщения (заключённый в `'<'` и `'>'`). Если ответ не является ошибкой, обрабатывайте *file* точно так же, как для метода [`post()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.post).167168#### `NNTP.date()`169170Возвращает тройку `(response, date, time)`, содержащую текущие дату и время в формате, подходящем для методов [`newnews()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.newnews) и [`newgroups()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.newgroups). Это необязательное расширение NNTP, которое может не поддерживаться всеми серверами.171172#### `NNTP.xgtitle(name[, file])`173174Обрабатывает команду `XGTITLE`, возвращая пару `(response, list)`, где *list* – это список кортежей, содержащих `(name, title)`. Если передан параметр *file*, то вывод команды `XGTITLE` сохраняется в файл. Если *file* – строка, метод откроет файловый объект с таким именем, запишет в него, а затем закроет. Если *file* – файловый объект, то метод начнёт вызывать для него `write()`, сохраняя строки вывода команды. Если *file* передан, то возвращаемый *list* будет пустым списком. Это необязательное расширение NNTP, которое может не поддерживаться всеми серверами.175176RFC2980 гласит: «Рекомендуется отказаться от этого расширения». Используйте [`descriptions()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.descriptions) или [`description()`](https://python-all.ru/2.7/library/nntplib.html#nntplib.NNTP.description) вместо него.177178#### `NNTP.xover(start, end[, file])`179180Возвращает пару `(resp, list)`. *list* – это список кортежей, по одному для каждой статьи в диапазоне, ограниченном номерами статей от *start* до *end*. Каждый кортеж имеет вид `(article number, subject, poster, date, id, references, size, lines)`. Если передан параметр *file*, то вывод команды `XOVER` сохраняется в файл. Если *file* – строка, метод откроет файловый объект с таким именем, запишет в него, а затем закроет. Если *file* – файловый объект, то метод начнёт вызывать для него `write()`, сохраняя строки вывода команды. Если передан *file*, то возвращаемый *list* будет пустым списком. Это необязательное расширение NNTP, которое может не поддерживаться всеми серверами.181182#### `NNTP.xpath(id)`183184Возвращает пару `(resp, path)`, где *path* – это путь к каталогу статьи с идентификатором сообщения *id*. Это необязательное расширение NNTP, которое может не поддерживаться всеми серверами.185186#### `NNTP.quit()`187188Отправляет команду `QUIT` и закрывает соединение. После вызова этого метода не следует вызывать другие методы объекта NNTP.189