add legacy version of tenquestionmarks irc bot
This commit is contained in:
57
modules/rss.py
Executable file
57
modules/rss.py
Executable file
@@ -0,0 +1,57 @@
|
||||
"""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()
|
Reference in New Issue
Block a user