Sto scrivendomi un news reader.
Ora sono arrivato a skarikare i body dei msg e gli heade+subject(poi li fondero assieme).
Pero volevo sapere se il mio code si puo ottimizzare un pochino.
Ecco il code:
codice:
import os
import sys
import socket
import nntplib
import string
__author__ = "Kleidemos (francesca8810@ti.it)"
__version__ = "$Revision: 0.2 $"
__date__ = "$Date: 2004/05/6 14:00:00 $"
__copyright__ = "Copyright (c) 2004 Luca Francesca"
__license__ = "Python"
kb = 8 * 1024 # a kb unit
#
# This class elaborate the NewsServerGestion downloaded files
#
class ArticleGestion:
nws = ''
article = []
def Close(self):
nws.quit()
# Load into a GROUP_article.txt file the body of the article specified
# into GROUP.txx file
# Because this requied many time you should use a modal dialog or any
# other mode (threads for example) to not block the application GUI
def ParseGroup(self, server, gname):
self.nws = nntplib.NNTP(server)
self.nws.group(gname)
self.fin = file(gname+"/"+gname+".txt", "r")
self.fout = file(gname+"/"+gname+"_article.txt", "w")
while 1:
self.line = self.fin.readline()
if not self.line:
self.fin.close()
self.fout.close()
break
self.str_tmp = string.split(self.line, "\t")
self.id = self.str_tmp[0]
for i in self.nws.body(self.id)[3]:
try:
self.fout.write(i+"\n")
except:
print 'Error in write for file',
gname+"/"+gname+"_article.txt", '\n'
#self.fout.write("\n")
self.fin.close()
self.fout.close()
# Merge the sebject-header file to the body file and build a group tree
# to show
# Because this requied many time you should use a modal dialog or any
# other mode (threads for example) to not block the application GUI
# TODO : 100%
def BuildGroupTree(self, group, farticle, fsubject):
pass
#
# This class download message from group and save it into a files
#
class NewsServerGestion:
#
__i = ''
#
__news = ''
__msg = []
#
__group_state = []
__beg = ''
__end = ''
#
__stats = ''
#single article
__single_article = []
__response = ''
__number = ''
__list = ''
#article range
__articles_header = []
articles_list = []
#article id
__article_id = []
def __init__(self, host):
# Open a server connection
self.news = nntplib.NNTP(host)
self.news.getwelcome()
# Send a article
def SendArticle(self, file):
f = open(file)
s.post(f)
# Download article id & header
# Because this requied many time you should use a modal dialog or any
# other mode (threads for example) to not block the application GUI
def DownloadArticle(self):
self.fname = self.group_state[4]+"/"+self.group_state[4]+".txt"
self.articles_list = self.news.xover('subject', self.beg + '-' + self.end, self.fname)
# Save group info
def PrintGroupInfo(self, gname):
if not os.path.exists(gname):
os.mkdir(gname)
self.group_state = self.news.group(gname)
self.stats = self.group_state[0] # set group info
self.beg = self.group_state[2] # start message
self.end = self.group_state[3] # end message
f = open(gname+"/"+gname+"_stat.txt", "w")
try:
f.write(self.stats)
except:
print 'Error in write stat files for', gname, 'group\n'
f.close()
def Close(self):
self.news.quit()
if __name__ == "__main__":
print "Test NewsServerGestione on ", sys.getwindowsversion()
n = NewsServerGestion("news.tin.it")
n.PrintGroupInfo("it.comp.lang.python")
n.DownloadArticle()
n.Close()
msg = ArticleGestion()
msg.ParseGroup("news.tin.it", "it.comp.lang.python")
msg.Close()
Tnk 1000000000000000000