>>from nntplib import NNTP from time import strftime,time,localtime from email import message_from_string from urllib.request import urlopen import textwrap import re day=24*60*60 def wrap(string,max=70): return '\n'.join(textwrap.wrap(string))+'\n' class NewsAgent: def _init_(self): self.sources = [] self.destinations = [] def addSource(self,source): self.sourcess.append(source) def addDestination(self,dest): self.destinations.append(dest) def distribute(self): items = [] for source in self.sources: items.extend(source.getItems()) for dest in self.destinations: dest.receiveItems(item) class NewsItem: def _init_(self,title,body): self.title = title self.body = body class NNTPSource def _init_(self,servername,group,window); self.servername = servername self.group = group self.window = window def getItems(self) start = local(time() - self.window*day) date = strftime('%y%m%d',start) hour = strftime('%H%M%S',start) server = NNTP(self.servername) ids = server.newnews(self.group,date,hour)[1] for id in ids: lines = server.article(id)[3] message = massage_from_string('\n'.join(lines)) titile = message['subject'] body = message.get_payload() if message.is_multipart(): body = body[0] yield NewsItem(title,body) server.quit() class SimpleWebSource def _init_(self,url,titilePattern,bodyPattern): self.url = url self.titlePattern = re.compile(titlePattern) self.bodypattern = re.compile(body) def getItems(self): text = urlopen(self.url).read() titles = self.titilePattern.findall(text) bodies = self.bodyPattern.findall(text) for title,body in zip(titles,bodies): yield NewsItem(titile,wrap(body)) class PlainDestination: def receiveItems(self,items): for item in items: print item.title print '-'*len(item.title) print item.body class HTMLDestination: def _init_(self,filename): self.filename = filename def receiveItems(self,items): out = open(self.filename,'w') print >> out,""" <html> <head> <title>Today's News</title> </head> <body> <h1>Today's News</h1> """ print >> out, '<ul>' id = 0 for item in items: id += 1 print >> out, '<li><a href="#%i">%s</a></li>'%(id.item.title) print >> out, '</ul>' id = 0 for item in items: id += 1 print >> out, '<h2><a name="%i">%s</a></h2>'%(id.item.title) print >> out, '<pre>%s</pre>'%item.body print >> out,""" </body> </html> """ def runDefaultSetip() agent = NewsAgent() 163_url = 'http://www.163.com/rss' 163_title = r'(?s)a href="[^"]*">\s*<b>\s*(.*?)\s*</b>' 163_body = r'(?s)</a>\s*<br />\s*(.*?)\s*<' 163 = SimpleWebSource(163_url,163_title,163_body) agent.addSource(163) clpa_server = 'news.foo.bar' clpa_group = 'comp.lang.python.announce' clpa_window = 1 clpa = NNTPSSource(clpa_server,clpa_group,clpa_window) agent.addSource(clpa) agent.addDestination(PlainDestination()) agent.addDestination(HTMLDestination('news.html')) agent.distribute() if _name_ == '_main_': runDefaultSetup()
没有报错信息唉