« »
2009-02-01Python

227

python写的RSS阅读器

  1. 
  2. # -*- coding:utf-8 -*-
  3. # file: pyRSS.py
  4. #
  5. import Tkinter
  6. import urllib
  7. import xml.parsers.expat

  1. 
  2. class MyXML:                                    # XML解析类
  3.     def __init__(self, edit):
  4.         self.parser = xml.parsers.expat.ParserCreate()            # 生成XMLParser
  5.         self.parser.StartElementHandler = self.start            # 起始标记处理方法
  6.         self.parser.EndElementHandler = self.end            # 结束标记处理方法
  7.         self.parser.CharacterDataHandler = self.data            # 字符数据处理方法
  8.         self.title = False                        # 状态标志
  9.         self.description = False
  10.         self.date = False
  11.         self.edit = edit                        # 多行文本框对象
  12.     def start(self, name, attrs):                        # 起始标记处理方法
  13.         if name == 'title':                        # 判断是否为title元素
  14.             self.title = True                    # 标志设为真
  15.         elif name == 'description':
  16.             self.description = True
  17.         elif name == 'pubDate':                        # 判断是否为pubDate
  18.             self.date = True                    # 标志设为真
  19.         else:
  20.             pass
  21.     def end(self, name):                            # 结束标记处理
  22.         if name == 'title':
  23.             self.title = False                    # 标志设为假
  24.         elif name == 'description':
  25.             self.description = False
  26.         elif name == 'pubDate':
  27.             self.date = False                    # 标志设为假
  28.         else:
  29.             pass
  30.     def data(self,data):                            # 字符数据处理方法
  31.         if self.title:                            # 根据标志状态输出数据
  32.             self.edit.insert(Tkinter.END,
  33.                     '******************************\n')
  34.             self.edit.insert(Tkinter.END, 'Title: ')
  35.             self.edit.insert(Tkinter.END, data + '\n')
  36.         elif self.description:
  37.             self.edit.insert(Tkinter.END, 'Date: ')
  38.             self.edit.insert(Tkinter.END, data + '\n')
  39.         elif self.date:
  40.             self.edit.insert(Tkinter.END, 'Date: ')
  41.             self.edit.insert(Tkinter.END, data + '\n')
  42.         else:
  43.             pass
  44.     def feed(self, data):
  45.         self.parser.Parse(data, 0)
  46. class Window:
  47.     def __init__(self, root):
  48.         self.root = root                            # 创建组件
  49.         self.entryUrl = Tkinter.Entry(root,width = 30) 
  50.         self.entryUrl.place(x = 65, y = 15)
  51.         self.get = Tkinter.Button(root,
  52.                 text = '读取RSS', command = self.Get, font = ('system','10'))
  53.         self.get.place(x = 350, y = 15)
  54.         self.frame = Tkinter.Frame(root, bd=2)
  55.         self.scrollbar = Tkinter.Scrollbar(self.frame)
  56.         self.edit = Tkinter.Text(self.frame,yscrollcommand = self.scrollbar.set,
  57.                 width = 96, height = 32)
  58.         self.scrollbar.config(command=self.edit.yview)
  59.         self.edit.pack(side = Tkinter.LEFT)
  60.         self.scrollbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
  61.         self.frame.place(y = 50)
  62.     def Get(self):
  63.         url = self.entryUrl.get()
  64.         page = urllib.urlopen(url)                        # 打开URL
  65.         data = page.read()                            # 读取URL内容
  66.         parser = MyXML(self.edit)                        # 生成实例对象
  67.         parser.feed(data)                            # 处理XML数据
  68.         page.close()
  69. root = Tkinter.Tk()
  70. root.title('RSS 阅读器')
  71. window = Window(root)
  72. root.minsize(700,500)
  73. root.maxsize(700,500)
  74. root.mainloop()

您还可能感兴趣的内容

日志信息 »

该日志于2009-02-01 21:59由 admin 发表在Python分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

没有评论

发表评论 »


返回顶部