58 lines
1.8 KiB
Python
Raw Normal View History

"""RSS feed aggregator. This module contains no user-facing commands."""
import sys
import os
import threading
import traceback
import feedparser
def on_connected(tenquestionmarks):
_rss_loop(tenquestionmarks,tenquestionmarks.config()["rss"]["frequency"])
def _rss_loop(tenquestionmarks, frequency=900.0):
try:
old_entries_file = os.path.join(tenquestionmarks.directory(),"old-feed-entries")
FILE = open(old_entries_file, "r")
filetext = FILE.read()
FILE.close()
except IOError:
filetext = ""
open(old_entries_file, "w").close()
filetext = filetext.decode("UTF-8")
for feed in tenquestionmarks.config()["rss"]["feeds"]:
feedname = ""
if isinstance(tenquestionmarks.config()["rss"]["feeds"],dict):
feedname = feed
feed = tenquestionmarks.config()["rss"]["feeds"][feed]
NextFeed = False
tenquestionmarks.log("refresh","Refreshing feed %s" % (feed))
d = feedparser.parse(feed)
for entry in d.entries:
title = entry.title
try:
title = title.encode("ascii")
except UnicodeEncodeError, uee:
title = tenquestionmarks.degrade_to_ascii(title)
except UnicodeDecodeError, ude:
title = tenquestionmarks.degrade_to_ascii(title)
if title in filetext:
tenquestionmarks.log("refresh","Old entry: %s" % (title))
NextFeed = True
else:
FILE = open(old_entries_file, "a")
try:
FILE.write(title + u"\n")
except Exception, e:
traceback.print_exc(file=sys.stdout)
tenquestionmarks.log("Error","%s %s" % (e,title))
FILE.close()
tenquestionmarks.queue(tenquestionmarks.config()["rss"]["format"] % ({"title": title, "link": entry.link, "feedname": feedname}))
if NextFeed:
break
def refresher(): _rss_loop(tenquestionmarks,frequency)
t = threading.Timer(frequency, refresher) # TODO: make this static
t.start()