1 #!/usr/bin/env python2.5
4 # Copyright (c) 2007-2008 INdT.
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Lesser General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # ============================================================================
21 # Author : Yves Marcoz
23 # Description : PyGtk Example
24 # ============================================================================
26 from os.path import isfile
27 from os.path import isdir
34 CONFIGDIR="/home/user/.feedingit/"
37 return md5.new(string).hexdigest()
40 # Contains all the info about a single feed (articles, ...), and expose the data
41 def __init__(self, name, url):
47 self.updateTime = "Never"
50 file = open(CONFIGDIR+getId(self.name), "w")
51 pickle.dump(self, file )
55 tmp=feedparser.parse(self.url)
56 # Check if the parse was succesful (number of entries > 0, else do nothing)
57 if len(tmp["entries"])>0:
58 self.updateTime = time.asctime()
59 self.entries = tmp["entries"]
60 # Initialize the new articles to unread
61 for index in range(self.getNumberOfEntries()):
62 if not self.readItems.has_key(self.getTitle(index)):
63 self.countUnread = self.countUnread + 1
64 self.readItems[self.getTitle(index)] = False
68 def setEntryRead(self, index):
69 if self.readItems[self.getTitle(index)]==False:
70 self.countUnread = self.countUnread - 1
71 self.readItems[self.getTitle(index)] = True
73 def isEntryRead(self, index):
74 return self.readItems[self.getTitle(index)]
76 def getTitle(self, index):
77 return self.entries[index]["title"]
79 def getUpdateTime(self):
80 return self.updateTime
88 def getNumberOfUnreadItems(self):
89 return self.countUnread
91 def getNumberOfEntries(self):
92 return len(self.entries)
94 def getItem(self, index):
96 return self.entries[index]
100 def getArticle(self, index):
101 self.setEntryRead(index)
102 entry = self.entries[index]
103 title = entry.get('title', 'No title')
104 #content = entry.get('content', entry.get('summary_detail', {}))
105 if entry.has_key('content'):
106 content = entry.content[0].value
108 content = entry.get('summary', '')
109 #print content.keys()
110 #.get('value', "No Data")
111 link = entry.get('link', 'NoLink')
112 date = time.strftime("%a, %d %b %Y %H:%M:%S",entry["updated_parsed"])
113 #text = '''<div style="color: black; background-color: white;">'''
114 text = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>'
115 text = text + '<div><a href=\"' + link + '\">' + title + "</a>"
116 text = text + "<BR /><small><i>Date: " + date + "</i></small></div>"
117 text = text + "<BR /><BR />"
118 text = text + content
123 # Lists all the feeds in a dictionary, and expose the data
126 if isfile(CONFIGDIR+"feeds.pickle"):
127 file = open(CONFIGDIR+"feeds.pickle")
128 self.listOfFeeds = pickle.load(file)
131 self.listOfFeeds = {getId("Slashdot"):{"title":"Slashdot", "url":"http://rss.slashdot.org/Slashdot/slashdot"}, }
132 for key in self.listOfFeeds.keys():
133 if isfile(CONFIGDIR+key):
134 file = open(CONFIGDIR+key)
135 self.feeds[key] = pickle.load(file)
138 self.feeds[key] = Feed(self.listOfFeeds[key]["title"], self.listOfFeeds[key]["url"])
141 def updateFeeds(self):
142 for key in self.listOfFeeds.keys():
143 self.feeds[key].updateFeed()
145 def getFeed(self, key):
146 return self.feeds[key]
148 def getFeedUpdateTime(self, key):
149 return self.feeds[key].getUpdateTime()
151 def getFeedNumberOfUnreadItems(self, key):
152 return self.feeds[key].getNumberOfUnreadItems()
154 def getFeedTitle(self, key):
155 return self.listOfFeeds[key]["title"]
157 def getFeedUrl(self, key):
158 return self.listOfFeeds[key]["url"]
160 def getListOfFeeds(self):
161 return self.listOfFeeds.keys()
163 def addFeed(self, title, url):
164 self.listOfFeeds[getId(title)] = {"title":title, "url":url}
166 self.feeds[getId(title)] = Feed(title, url)
168 def removeFeed(self, key):
169 del self.listOfFeeds[key]
171 if isfile(CONFIGDIR+key):
172 remove(CONFIGDIR+key)
174 def saveConfig(self):
175 file = open(CONFIGDIR+"feeds.pickle", "w")
176 pickle.dump(self.listOfFeeds, file)