Classe gérant la récupération de messages sur les newsgroup
Cette classe servira dans un projet plus important de client NNTP ou un grabeur de news binaire en Python
Source / Exemple :
# -*- coding: utf-8 -*-
#-#####################################################
#- Classe permetant de gerer les connexions au serveurs nntp #
#-
#- Ce code n'est que la partie d'un projet plus vaste dans le but est de réaliser un client usenet
#- en python ou en C++
#- Ce code doit etre amélioré notament en geran au mieu les exceptions et en ajputant d'autres fonctionnalite
#- temps passe a coder et valider = 2H
#- Coded by azalsup@free.fr
#- Code ouvert sans conditions
#-
#-#####################################################
__revision__ = 0.1
# Les includes se font par ici
import nntplib, sys
#Et si on declarait quelques variables globales
serverName = "news.free.fr"
groupName = 'proxade.free.adsl.degroupage'
groupName = 'sci.crypt'
#Les fonctions elementaires necessaires au bon fonctionnement du programme
def END() :
"""Areter le programme"""
sys.exit()
def ERROR(msg):
"""Affiche un message d'erreur"""
print '#'*len(msg)
print msg
print '#'*len(msg)
END()
def WARNING(msg):
"""Affiche un message de prevention"""
print '*'*len(msg)
print msg
print '*'*len(msg)
def INFO(msg):
"""Affiche un message d'information"""
print '@'*len(msg)
print msg
print '@'*len(msg)
class MyNNTP :
"""Cette classe permet de gerer la connexion aux serveurs nntp """
def __init__(self, server = serverName, group = groupName):
"""Constructeur par defaut de la classe NNTP"""
self.serverName = server
self.groupName = group
self.news = None
self.group = None
self.info = None
# connexion au serveur
def connect(self, server = None) :
""" Se connecter au serveur indique"""
if server != None :
self.serverName = server
try :
self.news = nntplib.NNTP(self.serverName)
except :
ERROR("connexion impossible")
INFO('connexion réussie : ' + self.news.getwelcome())
# connexion au groupe
def connect_2_group(self, group = None) :
""" Se connecter au groupe indique"""
if group != None :
self.groupName = group
INFO('%s - connexion au groupe' % self.groupName)
try :
self.group = self.news.group(self.groupName)
except :
ERROR('impossible de se connecter au groupe')
INFO('connexion au groupe réussie : ' + self.group[0])
# affichage des informations sur le groupe
def show(self):
""" affiche les informations sur le groupe"""
self.info = {}
self.info["debut"] = self.group[2]
self.info['fin'] = self.group[3]
self.info['nombre'] = self.group[1]
#Afficher les informations
_msg = "Nombre d'articles : " + self.info['nombre'] +'\n'
_msg += "Identifiant du premier article : " + self.info['debut'] +'\n'
_msg += "Identifiant du dernier article : " + self.info['fin'] +'\n'
INFO(_msg)
return int(self.info['debut']), int(self.info['fin'])
def list(self, debut, fin):
"""Affiche les messages"""
for _i in range(debut, fin):
print _i
try :
_article = self.news.article(str(_i))
_body = self.news.body(str(_i))
except :
WARNING('Article absent de ce groupe')
continue
print _body
print "="*80
print "Numéro: " + _body[1]
print "Message-ID: " + _body[2]
for _j in _article[3]:
if ("References:" in _j):
print _j
print "-"*80
for _j in _body[3]:
print "*-"*4
print _j
print "*-"*4
print "-"*80
if __name__ == '__main__' :
_nntp_free = MyNNTP(serverName, groupName)
_nntp_free.connect()
_nntp_free.connect_2_group()
_msgIndexS, _msgIndexE = _nntp_free.show()
_nntp_free.list(_msgIndexE - 20 , _msgIndexE)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.