设为首页 收藏本站
查看: 871|回复: 0

[经验分享] python之nntp服务器组

[复制链接]

尚未签到

发表于 2018-8-6 13:11:06 | 显示全部楼层 |阅读模式
  


  • http://www.newzbot.com/serverlist.php?since=ALL&orderby=kps&sortorder=desc&show_maxgroup=on&show_post=on&show_kps=on&show_created=on
这是可以找到当前有哪些服务器的地方网址,  

  这个项目的目的就是收集信息,并且将其生成一个html的报告(当然也可以是其他的形式的报告),完成代码如下
  


  • '''''
  • Created on 2012-7-18

  • @author: mars
  • '''
  • import nntplib
  • from nntplib import NNTP
  • from time import time,strftime,localtime
  • from email import message_from_string
  • from urllib import urlopen
  • import textwrap
  • import re

  • day=24*60*60
  • def wrap(string,max=70):
  •     #make the string to the max linewidth
  •     return '\n'.join(textwrap.wrap(string))+'\n'
  • class NewsAgent:
  •     #can get the new project and announce to the object fo the new from the souuce of the news
  •     def __init__(self):
  •         self.sources=[]
  •         self.destinations=[]
  •     def addSource(self,source):
  •         self.sources.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(items)
  • class NewsItem:
  •     #simle news project including tile and text
  •     def __init__(self,title,body):
  •         self.title=title
  •         self.body=body

  • class NNTPSource:
  •     #the nntp source
  •     def __init__(self,servername,group,window):
  •         self.servername=servername
  •         self.group=group
  •         self.window=window
  •     def getItems(self):
  •         start=localtime(time()-self.window*day)
  •         date=strftime('%y%m%d',start)
  •         hour=strftime('%H%M%S',start)

  •         server=NNTP(self.servername)

  •         ids=server.group(self.group)[2]
  •         #ids=server.newnews(self.group, date, hour)[1]

  •         for id in ids:
  •             lines=server.article(id)[3]
  •             message=message_from_string('\n'.join(lines))

  •             title=message['subject']
  •             body=message.get_payload()
  •             if message.is_multipart():
  •                 body=body[0]

  •             yield NewsItem(title,body)

  •         server.quit()

  • class SimpleWebSource:
  •     #user the re  to fetch thr source from the webpage
  •     def __init__(self,url,titlePattern,bodyPattern):
  •         self.url=url
  •         self.titlePattern=re.compile(titlePattern)
  •         self.bodyPattern=re.compile(bodyPattern)
  •     def getItems(self):
  •         text=urlopen(self.url).read()
  •         titles=self.titlePattern.findall(text)
  •         bodies=self.bodyPattern.findall(text)
  •         for title,body in zip(titles,bodies):
  •             yield NewsItem(title.wrap(body))
  • class PlainDestination:
  •     #make it to the pure text
  •     def receiveItems(self,items):
  •         for item in items:
  •             print item.title
  •             #print '-'*len(subject)
  •             #print '-'*len(item.title)
  •             print item.body
  •             #print 'fuck&&&&&&&bitch'
  • class HTMLDestination:
  •     # make it to the html
  •     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>
  •         &quot;&quot;&quot;

  •         print >> out, '<ul>'
  •         id = 0
  •         for item in items:
  •             id += 1
  •             print >> out, '<li><a href=&quot;#%i&quot;>%s</a></li>' % (id, item.title)
  •         print >> out, '</ul>'

  •         id = 0
  •         for item in items:
  •             id += 1
  •             print >> out, '<h2><a name=&quot;%i&quot;>%s</a></h2>' % (id, item.title)
  •             print >> out, '<pre>%s</pre>' % item.body

  •         print >> out, &quot;&quot;&quot;
  •             </body>
  •         </html>
  •         &quot;&quot;&quot;

  • class runDefaultSetup():
  •     #the souce  can modify by yourself
  •     agent=NewsAgent()
  •     #bbc_url='http://www.chinanews.com/'
  •     bbc_url='http://www.bbc.co.uk/news/'
  •     #bbc_url='http://www.bbc.co.uk/text_only.stm'
  •     bbc_title=r'(?s)a href=&quot;[^&quot;]*>\s*<b>\s*(.*?)\s*</b>'
  •     bbc_body=r'(?s)</a>\s*<br/>\s*(.*?)\s*<'
  •     bbc=SimpleWebSource(bbc_url,bbc_title,bbc_body)

  •     agent.addSource(bbc)
  •     #cong gmane.comp.python.announce get the nntpsource

  •     clpa_server='news.gmane.org'
  •     clpa_group='gmane.comp.python.apple'

  •     clpa_window=1
  •     clpa=NNTPSource(clpa_server,clpa_group,clpa_window)
  •     agent.addSource(clpa)


  •     #add the text and html target
  •     agent.addDestination(PlainDestination())

  •     agent.addDestination(HTMLDestination('news.html'))

  •     #public
  •     agent.distribute()
  • if __name__=='__main__':
  •     runDefaultSetup()



  

  其实这个程序呢 在第二版的教程上有,不过呢 那个给出的服务器不能用,所以在文章的开始的时候我就给出了 可以找到服务器地址的地方,比如我这里用的就是
  clpa_server='news.gmane.org'
  
    clpa_group='gmane.comp.python.apple'
  
    这个!
  当然这段代码我也稍微说下,最开始的类NewsAgent,接着是NewsItem,NNTPSource,SimpleWebSource,PlainDestination,HTMLDestination和runDefaultSetup

  程序一运行就开始跑的是runDefaultSetup,这里就将NewsAgent实例化为agent,SimpleWebSource的3个参数分别是url, >  随后将bbc作为参数,调用agent的addsource。同样的道理完成了nntpsouce这一块。
  最后就是就是调用agent.addDestionation。最后HTMLDestionation以news.html作为生成报告的html文本!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-547680-1-1.html 上篇帖子: python学习之记事本 下篇帖子: MorningDiary(Python版)又更新了一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表