免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2947 | 回复: 0

RSS阅读器 [复制链接]

论坛徽章:
0
发表于 2009-12-27 11:59 |显示全部楼层
根据http://python.djhui.net/post/23.html修改而成,可以自定义网址读取RSS内容,可惜在linux下字体支持不是很好,不知道windows下会怎么样,没试过,原代码如下
# -*- coding:utf-8 -*-
# file: pyRSS.py
#
import Tkinter
import urllib
import xml.parsers.expat

class MyXML:                                    # XML解析类
    def __init__(self, edit):
        self.parser = xml.parsers.expat.ParserCreate()            # 生成XMLParser
        self.parser.StartElementHandler = self.start            # 起始标记处理方法
        self.parser.EndElementHandler = self.end            # 结束标记处理方法
        self.parser.CharacterDataHandler = self.data            # 字符数据处理方法
        self.title = False                        # 状态标志
        self.description = False
        self.date = False
        self.edit = edit                        # 多行文本框对象
    def start(self, name, attrs):                        # 起始标记处理方法
        if name == 'title':                        # 判断是否为title元素
            self.title = True                    # 标志设为真
        elif name == 'description':
            self.description = True
        elif name == 'pubDate':                        # 判断是否为pubDate
            self.date = True                    # 标志设为真
        else:
            pass
    def end(self, name):                            # 结束标记处理
        if name == 'title':
            self.title = False                    # 标志设为假
        elif name == 'description':
            self.description = False
        elif name == 'pubDate':
            self.date = False                    # 标志设为假
        else:
            pass
    def data(self,data):                            # 字符数据处理方法
        if self.title:                            # 根据标志状态输出数据
            self.edit.insert(Tkinter.END,
                    '******************************\n')
            self.edit.insert(Tkinter.END, 'Title: ')
            self.edit.insert(Tkinter.END, data + '\n')
        elif self.description:
            self.edit.insert(Tkinter.END, 'Date: ')
            self.edit.insert(Tkinter.END, data + '\n')
        elif self.date:
            self.edit.insert(Tkinter.END, 'Date: ')
            self.edit.insert(Tkinter.END, data + '\n')
        else:
            pass
    def feed(self, data):
        self.parser.Parse(data, 0)
class Window:
    def __init__(self, root):
        self.root = root                            # 创建组件
        self.entryUrl = Tkinter.Entry(root,width = 30)
        self.entryUrl.place(x = 65, y = 15)
        self.get = Tkinter.Button(root,
                text = '读取RSS', command = self.Get, font = ('system','10'))
        self.get.place(x = 350, y = 15)
        self.frame = Tkinter.Frame(root, bd=2)
        self.scrollbar = Tkinter.Scrollbar(self.frame)
        self.edit = Tkinter.Text(self.frame,yscrollcommand = self.scrollbar.set,
                width = 96, height = 32)
        self.scrollbar.config(command=self.edit.yview)
        self.edit.pack(side = Tkinter.LEFT)
        self.scrollbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y)
        self.frame.place(y = 50)
    def Get(self):
        url = self.entryUrl.get()
        page = urllib.urlopen(url)                        # 打开URL
        data = page.read()                            # 读取URL内容
        parser = MyXML(self.edit)                        # 生成实例对象
        parser.feed(data)                            # 处理XML数据
        page.close()
root = Tkinter.Tk()
root.title('RSS 阅读器')
window = Window(root)
root.minsize(700,500)
root.maxsize(700,500)
root.mainloop()
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/55091/showart_2131969.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP