Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAriel Calzada <ariel@activitycentral.com>2012-06-01 01:27:39 (GMT)
committer Ariel Calzada <ariel@activitycentral.com>2012-06-01 01:27:39 (GMT)
commita9b0c2912c4e5e298cadabf6619501a7e724f432 (patch)
tree4cc6309520167092958217ed3214834646633221
Initial ImportHEADmaster
-rw-r--r--rssfeeder.py297
1 files changed, 297 insertions, 0 deletions
diff --git a/rssfeeder.py b/rssfeeder.py
new file mode 100644
index 0000000..769ddec
--- /dev/null
+++ b/rssfeeder.py
@@ -0,0 +1,297 @@
+# -*- coding: utf-8 -*-
+
+import gtk
+import webkit
+from xml.dom import minidom
+import urllib
+
+class RSSFeeder:
+ # Attributes
+ _title = "RSS Feeder"
+ _label_text = "HELLO News"
+ _window = None
+
+ _toolbar = None
+ _statusbar = None
+ _mainbox = None
+
+ _label = None
+ _news_button = None
+ _planet_button = None
+ _cool_button = None
+ _fun_button = None
+ _like_button = None
+ _updates_button = None
+ _exit_button = None
+ _feedview = None
+
+ _feedbox = None
+
+ _feedview_scroller = None
+
+ _statusbar_progressbar = None
+
+ _feedliststore = None
+ _feedtreeview = None
+ _feedcellrenderer = None
+ _feedcelltreeviewcolumn = None
+
+ _currentbutton = None
+ _currentItems = None
+
+ # Constants
+ _greenColor = '#00E500'
+ _defaultColor = "#EFEFEF"
+ _redColor = '#FF0000'
+ _feeds_limit = 20
+
+ def getFeedURL(self):
+ if self._currentbutton == "news":
+ return "http://www.eltiempo.com/colombia/rss.xml"
+ elif self._currentbutton == "planet":
+ return "http://www.eltiempo.com/deportes/rss.xml"
+ elif self._currentbutton == "cool":
+ return "http://www.eltiempo.com/tecnologia/rss.xml"
+
+ return "http://www.eltiempo.com/mundo/rss.xml"
+
+ def exit_button_clicked(self,btn):
+ """ Callback for exit button click
+ """
+ self.exitApplication()
+
+ def selectButton(self):
+ self._news_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._defaultColor))
+ self._planet_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._defaultColor))
+ self._fun_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._defaultColor))
+ self._cool_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._defaultColor))
+
+ if self._currentbutton == "news":
+ self._news_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._greenColor))
+ elif self._currentbutton == "planet":
+ self._planet_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._greenColor))
+ elif self._currentbutton == "cool":
+ self._cool_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._greenColor))
+ elif self._currentbutton == "fun":
+ self._fun_button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._greenColor))
+
+ def news_button_clicked(self,btn):
+ """ Callback for news button click
+ """
+ if self._currentbutton == "news":
+ self.clearCurrentFeeds()
+ else:
+ self._currentbutton = "news"
+ self.selectButton()
+ url = self.getFeedURL()
+ self.load_rss_items(url)
+
+ def planet_button_clicked(self,btn):
+ """ Callback for planet button click
+ """
+ if self._currentbutton == "planet":
+ self.clearCurrentFeeds()
+ else:
+ self._currentbutton = "planet"
+ self.selectButton()
+ url = self.getFeedURL()
+ self.load_rss_items(url)
+
+ def cool_button_clicked(self,btn):
+ """ Callback for cool button click
+ """
+ if self._currentbutton == "cool":
+ self.clearCurrentFeeds()
+ else:
+ self._currentbutton = "cool"
+ self.selectButton()
+ url = self.getFeedURL()
+ self.load_rss_items(url)
+
+ def fun_button_clicked(self,btn):
+ """ Callback for fun button click
+ """
+ if self._currentbutton == "fun":
+ self.clearCurrentFeeds()
+ else:
+ self._currentbutton = "fun"
+ self.selectButton()
+ url = self.getFeedURL()
+ self.load_rss_items(url)
+
+ def updates_button_clicked(self,btn):
+ """ Callback for updates button click
+ """
+ if self._currentbutton is not None:
+ url = self.getFeedURL()
+ self.load_rss_items(url)
+
+ def clearCurrentFeeds(self):
+ self._feedliststore.clear()
+ self._currentbutton = None
+ self._currentItems = None
+ self.selectButton()
+ self._feedview.load_html_string('','')
+
+ def load_rss_items(self,url):
+ """ Get the RSS items
+ """
+ connection = urllib.urlopen(url)
+ feed = minidom.parse(connection)
+ connection.close()
+ items = feed.getElementsByTagName('item')[0:self._feeds_limit]
+ self._feedliststore.clear()
+ self._feedview.load_html_string('','')
+ self._currentItems = items
+
+ for item in items:
+ self._feedliststore.append([item.childNodes[1].childNodes[0].data])
+
+ def load_rss_item(self,itemTitle):
+ """ Get the RSS items
+ """
+
+ if self._currentItems is not None:
+ for item in self._currentItems:
+ title = item.childNodes[1].childNodes[0].data
+ if title == itemTitle:
+ description = item.childNodes[9].childNodes[0].data
+ content = item.childNodes[13].childNodes[0].data
+
+ html = """
+ <div style='font-weight: bold; background-color: #333333; color: #FFFFFF; padding: 5px'>%s</div>
+
+ <div style="height: 20px">&nbsp;</div>
+
+ <div style='font-weight: bold; background-color: #333333; color: #FFFFFF; padding: 5px'>DESCRIPTION</div>
+ <div style="height: 10px">&nbsp;</div>
+ %s
+
+ <div style="height: 20px">&nbsp;</div>
+
+ <div style='font-weight: bold; background-color: #333333; color: #FFFFFF; padding: 5px'>CONTENT</div>
+ <div style="height: 10px">&nbsp;</div>
+ %s
+ """ % ( title, description, content )
+
+ self._feedview.load_html_string(html,'')
+
+ def exitApplication(self):
+ """ Callback for close button
+ """
+ gtk.main_quit()
+
+
+ def destroyWindow(self, widget, data=None):
+ """ Callback for window destroy
+ """
+ self.exitApplication()
+
+ def createWindow(self):
+ """ Create window
+ """
+ self._window = gtk.Window()
+ self._window.set_title(self._title)
+ self._window.connect("destroy", self.destroyWindow)
+ self._window.maximize()
+
+ def createToolbar(self):
+ """ Create toolbar
+ """
+ self._toolbar = gtk.HBox()
+ self._label =gtk.Label(self._label_text)
+ self._news_button = gtk.Button("News")
+ self._planet_button = gtk.Button("Planet")
+ self._cool_button = gtk.Button("Cool")
+ self._fun_button = gtk.Button("Fun")
+ self._like_button = gtk.Button("Like")
+ self._updates_button = gtk.Button("Updates")
+ self._exit_button = gtk.Button("Exit")
+
+ self._toolbar.pack_start(self._label,False,True)
+ self._toolbar.pack_start(gtk.HSeparator(),False,False,5)
+ self._toolbar.pack_start(self._news_button,False)
+ self._toolbar.pack_start(self._planet_button,False)
+ self._toolbar.pack_start(self._cool_button,False)
+ self._toolbar.pack_start(self._fun_button,False)
+ self._toolbar.pack_start(self._like_button,False)
+ self._toolbar.pack_start(gtk.HSeparator(),False,False,5)
+ self._toolbar.pack_start(self._updates_button,False,True)
+ self._toolbar.pack_start(gtk.HSeparator(),False,False,5)
+ self._toolbar.pack_start(self._exit_button,False,True)
+
+ self._exit_button.connect("clicked",self.exit_button_clicked)
+
+ self._news_button.connect("clicked",self.news_button_clicked)
+ self._planet_button.connect("clicked",self.planet_button_clicked)
+ self._cool_button.connect("clicked",self.cool_button_clicked)
+ self._fun_button.connect("clicked",self.fun_button_clicked)
+
+ self._updates_button.connect("clicked",self.updates_button_clicked)
+
+ self._mainbox.pack_start(self._toolbar,False)
+
+ self.selectButton()
+
+ def feedtreeview_click(self,widget):
+ treeselection = self._feedtreeview.get_selection()
+ (model, iter) = treeselection.get_selected()
+ value = self._feedliststore.get_value(iter, 0)
+ self.load_rss_item(value)
+
+ def createFeedWorkspace(self):
+ """ Create feed view
+ """
+ self._feedbox = gtk.HBox()
+
+ self._feedview_scroller = gtk.ScrolledWindow()
+ self._feedview = webkit.WebView()
+ self._feedview_scroller.add(self._feedview)
+
+ self._feedliststore = gtk.ListStore(str)
+ self._feedtreeview = gtk.TreeView(self._feedliststore)
+ self._feedcellrenderer = gtk.CellRendererText()
+ self._feedcelltreeviewcolumn = gtk.TreeViewColumn( "Latest 20", self._feedcellrenderer, text=0 )
+ self._feedtreeview.append_column(self._feedcelltreeviewcolumn)
+
+ self._feedbox.pack_start(self._feedview_scroller)
+ self._feedbox.pack_start(self._feedtreeview,False, padding=5)
+ self._mainbox.pack_start(self._feedbox)
+
+ self._feedtreeview.connect('cursor-changed', self.feedtreeview_click)
+
+ def createStatusBar(self):
+ self._statusbar = gtk.HBox()
+ self._statusbar_progressbar = gtk.ProgressBar()
+ self._statusbar.pack_start(self._statusbar_progressbar)
+
+ self._mainbox.pack_start(self._statusbar, False)
+
+ def __init__(self):
+ """ Constructor
+ """
+ # Window
+ self.createWindow()
+
+ # Main box
+ self._mainbox = gtk.VBox()
+
+ # Toolbar
+ self.createToolbar()
+
+ # Feed view
+ self.createFeedWorkspace()
+
+ # Status bar
+ self.createStatusBar()
+
+ # Show all
+ self._window.add(self._mainbox)
+ self._window.show_all()
+
+ # Final adjustments
+
+if __name__ == "__main__":
+ rssfeeder = RSSFeeder()
+ gtk.main()
+