Python e NNTP
Published on May 19, 2013.
Python possui uma biblioteca/módulo que implementa o lado do cliente do protocolo NNTP1.
Neste post iremos mostrar como utilizar essa biblioteca para enviar novas mensagens para um grupo local do Leafnode-2 (o Leafnode-2 foi configurado em ../../../2013/05/19/leafnode2.
Grupos locais no Leafnode-2
Os grupos locais são informados no arquivo /etc/leafnode/local.groups.
Para a criação de grupos locais adicione linhas seguindo a sintaxe
abaixo:
news.group.name<TAB>status<TAB>descrição
e.g., :
local.test y Local Unmoderated Group
no arquivo /etc/leafnode/local.groups tomando o cuidado de utilizar
tab para separa os campos.
Recuperando informações dos grupos
Para recuperar informações do grupo local.test utilizamos:
>>> import nntplib
>>> s = nntplib.NNTP('localhost')
>>> s.group('local.test')
('211 0 0 0 local.test group selected', 0, 0, 0, 'local.test')
A tupla de retorno é da forma (response, count, first, last, name),
onde count é o número de artigos presentes no grupo, first é o
número do primeiro artigo no grupo, last é o número do último artigo e
name é o nome do grupo.
Caso o grupo não exista, um erro é levantado:
>>> s.group('local.foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.3/nntplib.py", line 654, in group resp = self._shortcmd('GROUP ' + name)
File "/usr/local/lib/python3.3/nntplib.py", line 504, in _shortcmd return self._getresp()
File "/usr/local/lib/python3.3/nntplib.py", line 447, in _getresp
raise NNTPTemporaryError(resp)
nntplib.NNTPTemporaryError: 411 No such group
Formato de artigos
Os artigos são compostos por um header e um body. O body corresponde ao texto do artigo e deve terminar com uma linha com um único ponto. Já o headers possui informações relacionadas com o artigo e os campos obrigatórios são :
From: your_username@your_host
Newsgroups: my.newsgroup.1,my.newsgroup.2
Subject: My_subject
Um artigo válido é :
From: foo@bar.baz
Newsgroups: local.test
Subject: Testing
This is a test
.
Postando em um grupo
Para postar um novo artigo no grupo local.test utilizamos:
>>> import nntplib
>>> s = nntplib.NNTP('localhost')
>>> f = open('article.txt', 'rb')
>>> s.post(f)
'240 Article posted successfully.'
O argumento do método post deve ser um objeto arquivo aberto para
leitura binária e deve representar um novo artigo bem formatado,
incluindo os headers. Caso o novo artigo não esteja corretamente escrito
e o servidor recusá-lo, um erro é levantado.
Para verificar se o novo artigo realmente foi adicionado no grupo utilizamos :
>>> s.group('local.test')
('211 1 1 1 local.test group selected', 1, 1, 1, 'local.test')
Se o número de artigos tiver sido incrementado então o artigo foi devidamente adicionado.
Referencias
Tags: