Classe nttp

Soyez le premier à donner votre avis sur cette source.

Vue 4 331 fois - Téléchargée 89 fois

Description

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)

Codes Sources

A voir également

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.